実現したいこと
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