質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

2回答

866閲覧

ランキング形式にしたいが切り取れない またその各文字要素を順に入力していきたい

nekotatinu

総合スコア4

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/12/29 10:08

実現したいこと

rssからとってきた情報を必要な部分だけ取り出して、その情報を順に入力していく

 title要素を取り出せてその中から必要な物だけ切り取れたが、上位n個を取り出すことができない
その取り出した文字を区切って順に入力したい

java

1 2コード 3import java.io.BufferedReader; 4import java.io.InputStream; 5import java.io.InputStreamReader; 6import java.net.HttpURLConnection; 7import java.net.URL; 8import java.security.cert.CertificateException; 9import java.security.cert.X509Certificate; 10 11import javax.net.ssl.HostnameVerifier; 12import javax.net.ssl.HttpsURLConnection; 13import javax.net.ssl.SSLContext; 14import javax.net.ssl.SSLSession; 15import javax.net.ssl.TrustManager; 16import javax.net.ssl.X509TrustManager; 17 18import org.w3c.dom.Document; 19import org.w3c.dom.Node; 20import org.w3c.dom.bootstrap.DOMImplementationRegistry; 21import org.w3c.dom.ls.DOMImplementationLS; 22import org.w3c.dom.ls.LSInput; 23import org.w3c.dom.ls.LSParser; 24 25 26//https://qiita.com/tsukakei/items/41bc7f3827407f8f37e8 27//これでサイト閲覧者数がわかるプログラムをうてる 28 29 30 31 32public class web { 33 34 35 36 public static void main(String[] arsg) throws Exception { 37 38 web viewer = new web(); 39 try { 40 41 //String url ="http://192.168.1.6:8097/buckets?buckets=true"; 42 String url ="http://k-ani.com/rss/all.rss"; 43 HttpURLConnection urlconn = getHttpsConnection(url); 44 45 //DOMnoyatudayo 46 InputStream inputStream = urlconn.getInputStream(); 47 Document document = viewer.buildDocument(inputStream, "utf-8"); 48 viewer.showTree(document.getDocumentElement()); 49 50 //データの読み取り 51 BufferedReader reader = new BufferedReader(new InputStreamReader( 52 urlconn.getInputStream(), "utf8")); 53 String line; 54 StringBuilder sb = new StringBuilder(); 55 while ((line = reader.readLine()) != null) { 56 sb.append(line); 57 } 58 reader.close(); 59 urlconn.disconnect(); 60 System.out.println(sb.toString()); 61 62 63 64 65 66 67 68 69 70 71 72 73 74 } catch (Exception e) { 75 e.printStackTrace(); 76 } 77 } 78 79 80 private static HttpURLConnection getHttpsConnection(String url) throws Exception { 81 82 HttpURLConnection urlconn = null; 83 84 URL connectURL = new URL(url); 85 86 // https接続の場合 87 if ("https".equals(connectURL.getProtocol())) { 88 89 //証明書情報 全て空を返す 90 TrustManager[] tm = { new X509TrustManager() { 91 public X509Certificate[] getAcceptedIssuers() { 92 return null; 93 } 94 @Override 95 public void checkClientTrusted(X509Certificate[] chain, 96 String authType) throws CertificateException { 97 } 98 @Override 99 public void checkServerTrusted(X509Certificate[] chain, 100 String authType) throws CertificateException { 101 } 102 } }; 103 SSLContext sslcontext = SSLContext.getInstance("SSL"); 104 sslcontext.init(null, tm, null); 105 //ホスト名の検証ルール 何が来てもtrueを返す 106 HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { 107 @Override 108 public boolean verify(String hostname, 109 SSLSession session) { 110 return true; 111 } 112 }); 113 114 urlconn = (HttpsURLConnection) connectURL.openConnection(); 115 116 ((HttpsURLConnection)urlconn).setSSLSocketFactory(sslcontext.getSocketFactory()); 117 118 119 // http接続の場合 120 } else { 121 122 urlconn = (HttpURLConnection) connectURL.openConnection(); 123 124 } 125 126 // http,https共通 127 128 urlconn.setRequestMethod("GET"); 129 //接続 130 urlconn.connect(); 131 132 133 return urlconn; 134 135 136 137 138 139 140 141 } 142 143/** DOM Tree の構築 */ 144public Document buildDocument(InputStream inputStream, String encoding) { 145 Document document = null; 146 try { 147 // DOM実装(implementation)の用意 (Load and Save用) 148 DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance(); 149 DOMImplementationLS implementation = (DOMImplementationLS)registry.getDOMImplementation("XML 1.0"); 150 // 読み込み対象の用意 151 LSInput input = implementation.createLSInput(); 152 input.setByteStream(inputStream); 153 input.setEncoding(encoding); 154 // 構文解析器(parser)の用意 155 LSParser parser = implementation.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null); 156 parser.getDomConfig().setParameter("namespaces", false); 157 // DOMの構築 158 document = parser.parse(input); 159 } 160 catch (Exception e) { 161 e.printStackTrace(); 162 } 163 return document; 164} 165/** 引数 node 以下の tree を表示 */ 166public void showTree(Node node) { 167 for(Node current = node.getFirstChild(); 168 169 current != null; 170 current = current.getNextSibling()) { 171 if(current.getNodeType() == Node.ELEMENT_NODE) { // ノードは要素? 172 String nodeName = current.getNodeName(); 173 // 中括弧 { } を使って階層を表現 174 175 176 177 if(current.getNodeName().equals("title")) { // title要素だったら 178 String title = current.getTextContent(); // 子孫要素からテキスト部分を得る 179 //切り出した文字列を表示 180 181 //System.out.println(title); 182 183 if (title.contains("【")) 184 { 185 String pin =title.substring(1, title.indexOf("】")); 186 187 // System.out.println(pin); 188 189 String[] words = pin.split("<br>",5); 190 for (String word : words) { 191 System.out.println( word); 192 } 193 } 194 195 // System.out.println(title.substring(0, title.indexOf("】"))); 196 } 197 //if(current.getNodeName().equals("link")) { // link要素だったら 198 //String link = current.getTextContent(); // 子孫要素からテキスト部分を得る 199 200 //System.out.println(link); 201 202 //} 203 204 205 206 //System.out.println(nodeName + " {"); 207 showTree(current); // さらに子ノードを見る (再帰) 208 //System.out.println("}"); 209 210 } 211 else if(current.getNodeType() == Node.TEXT_NODE // ノードはテキスト? 212 && current.getNodeValue().trim().length() != 0) { 213 //System.out.println(current.getNodeValue()); 214 } 215 else if(current.getNodeType() == Node.CDATA_SECTION_NODE) { // ノードはCDATA? 216 //System.out.println(current.getNodeValue()); 217 } // HTMLタグなどを含む 218 ; // 上記以外のノードでは何もしない 219 } 220 221 ////////////////////////////////////////////////////////////////////////////////////// 222 223 224 225 226 227} 228} 229

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2021/12/29 10:24

できない、したい・・・では無く、具体的に何が分からないのかをお書きください。
nekotatinu

2021/12/29 11:08

rssのtitle要素をとりだしたが、そのtitle要素を上位5つめまで取得してあとは切り捨てたいのですが、その方法がわからない
jimbe

2021/12/30 08:55 編集

> rssのtitle要素をとりだしたが 意味不明や通らないコードが散見されますが、どの変数に「とりだした」のでしょうか。 > 上位5つめ とは? 出現順で最初の 5 つでしょうか?
guest

回答2

0

とりあえずどこかから持ってきたっぽい認証やら構築やらを省いて、 XPath で //item/title を集めるコードを作りました。
リスト(titleList)になってしまえば必要なだけ利用できると思います。
("【","】" の処理は意味不明だったので入れていません。)

java

1import java.io.IOException; 2import java.io.InputStream; 3import java.net.HttpURLConnection; 4import java.net.URL; 5import java.util.ArrayList; 6import java.util.List; 7 8import javax.xml.parsers.*; 9import javax.xml.xpath.*; 10 11import org.w3c.dom.*; 12import org.xml.sax.SAXException; 13 14public class Web { 15 public static void main(String[] args) throws Exception { 16 String url = "http://k-ani.com/rss/all.rss"; 17 List<String> titleList = getTextContentList(readXML(new URL(url)), "//item/title"); 18 19 for(int i=0; i<titleList.size(); i++) { 20 System.out.println((i+1) + ": " + titleList.get(i)); 21 } 22 } 23 24 static Document readXML(URL url) throws IOException, ParserConfigurationException, SAXException { 25 HttpURLConnection con = (HttpURLConnection)url.openConnection(); 26 27 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 28 DocumentBuilder builder = factory.newDocumentBuilder(); 29 30 try(InputStream is = con.getInputStream()) { 31 return builder.parse(is); 32 } 33 } 34 35 static List<String> getTextContentList(Document document, String expression) throws XPathExpressionException { 36 XPathExpression expr = XPathFactory.newInstance().newXPath().compile(expression); 37 NodeList nodeList = (NodeList)expr.evaluate(document, XPathConstants.NODESET); 38 39 List<String> list = new ArrayList<>(); 40 for(int i=0; i<nodeList.getLength(); i++) { 41 list.add(((Element)nodeList.item(i)).getTextContent()); 42 } 43 return list; 44 } 45}

投稿2021/12/30 08:31

編集2021/12/30 18:06
jimbe

総合スコア13209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

やりたいことの方法がわからないときは「考えて下さい」

投稿2021/12/30 05:56

qqfsdfsafd

総合スコア599

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問