話題のキーワードを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();
	}
}

 

システム開発

Posted by @erestage