話題のキーワードをJavaで取得する
話題のキーワードを提供するAPIから取得するサンプルプログラム。
JavaでXMLを読み込むときは、この方法で使いまわすことができます。
import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.config.RequestConfig.Builder; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicHeader; import org.apache.http.util.EntityUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class KeywordAPI { private HttpClient httpClient = null; public KeywordAPI() { int socketTimeout = 3000; int connectionTimeout = 3000; String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0)"; // タイムアウト設定 Builder builder = RequestConfig.custom(); builder.setConnectTimeout(connectionTimeout); builder.setSocketTimeout(socketTimeout); RequestConfig requestConfig = builder.build(); // HTTPヘッダ情報 List<Header> headers = new ArrayList<Header>(); headers.add(new BasicHeader("Accept-Charset", "utf-8")); headers.add(new BasicHeader("User-Agent", userAgent)); // create client HttpClientBuilder clientBuilder = HttpClientBuilder.create(); clientBuilder.setDefaultRequestConfig(requestConfig); clientBuilder.setDefaultHeaders(headers); httpClient = clientBuilder.build(); } public void run() { HttpGet get = new HttpGet("http://www.nilab.info/buzztube/buzztube.xml"); try { HttpResponse response = httpClient.execute(get); String html = EntityUtils.toString(response.getEntity(), "UTF-8"); try { DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docbuilder = dbfactory.newDocumentBuilder(); Document doc = docbuilder.parse(new ByteArrayInputStream(html.getBytes("UTF-8"))); Element root = doc.getDocumentElement(); NodeList list = root.getElementsByTagName("item"); for (int i = 0; i < list.getLength(); i++) { Node child = list.item(i); NodeList itemList = child.getChildNodes(); for (int n = 0; n < itemList.getLength(); n++) { Node info = itemList.item(n); if (info.getNodeType() == Node.ELEMENT_NODE) { if (info.getNodeName().compareTo("title") == 0) { System.out.println(info.getTextContent()); } } } } } catch (SAXException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ KeywordAPI api = new KeywordAPI(); api.run(); } }