import java.io.*; import java.net.*; import java.util.Scanner; import java.util.regex.*; // Yahoo! Auctions を検索 // DOM ではなく正規表現で情報を抜き出す // // usage: java YahooAuctionsSearcher word class YahooAuctionsSearcher { // 登録済のアプリケーションID private static final String appid = "websearch05ki999"; public static void main(String args[]) { YahooSearchRequest request = new YahooSearchRequest(); String query = args[0]; request.setQuery(query); request.setAppID(appid); request.run(); } } class YahooSearchRequest { // response の文字セット private String responseEncoding = "utf-8"; // URL の文字セット private String urlEncoding = "utf-8"; // Request URL private String searchURL = "http://auctions.yahooapis.jp/AuctionWebService/V2/search"; // *** 以下は検索パラメータ // see http://developer.yahoo.co.jp/webapi/auctions/auction/v2/search.html private String param_appid; // キーワード private String param_query; // 一回に表示する件数 private String param_results; private String param_format; private String param_site; public YahooSearchRequest() { // 検索パラメータの初期化 param_appid = "dummy"; param_query = ""; param_results = "10"; param_format = "any"; param_site = ""; } public void setQuery(String query) { try { // URLエンコードをしてASCII文字に // ex. "東京 大学" -> %93%8C%8B%9E+%93%64%91%E5 param_query = URLEncoder.encode(query, urlEncoding); } catch(UnsupportedEncodingException e) { System.err.println("Unsupported Encoding."); } } public void setSite(String site) { try { param_site = URLEncoder.encode(site, urlEncoding); } catch(UnsupportedEncodingException e) { System.err.println("Unsupported Encoding."); } } public void setAppID(String appid) { param_appid = appid; } public void run() { String requestURL = searchURL + "?appid=" + param_appid + "&query=" + param_query; // "&site=" + param_site + // "&format=" + param_format + // "&results=" + param_results; Response response = new Response(); response.setURL(requestURL); response.setEncoding(responseEncoding); response.run(); } } class Response { // response のURL private String urlString; // RSS response の文字セット private String encoding; public Response() { urlString = null; encoding = "utf-8"; } public void setURL(String url) { this.urlString = url; } public void setEncoding(String encoding) { this.encoding = encoding; } public void run() { System.out.println("アクセス先URL: " + urlString); // 確認 Scanner scanner = null; try { URL url = new URL(urlString); URLConnection urlConnection = url.openConnection(); urlConnection.connect(); scanner = new Scanner(urlConnection.getInputStream(), encoding); } catch (IOException e) { System.err.println("Cannot connect: " + urlString); System.exit(1); } // 各要素の内容抽出のためのパターン (Response用) Pattern patternTitle = Pattern.compile("<Title>(.+?)</Title>", Pattern.DOTALL); Pattern patternLink = Pattern.compile("<ItemListUrl>(.+?)</ItemListUrl>", Pattern.DOTALL); Pattern patternPrice = Pattern.compile("<CurrentPrice>(.+?)</CurrentPrice>", Pattern.DOTALL); scanner.useDelimiter("<Item>"); // item要素の開始タグを区切りとする int i = 0; System.out.println("<html><head><title>検索結果</title></head><body>"); while(scanner.hasNext()) { String resultContent = scanner.next(); if(i == 0) { // 0個目は最初の<item>よりも前なので不要 i++; continue; } System.out.println("<h2>" + i + "件目:</h2>"); // System.out.println("文字列: " + resultContent); // 確認 System.out.println(); String title = ""; String link = ""; String price = ""; Matcher matcher; // タイトルの抽出 matcher = patternTitle.matcher(resultContent); if(matcher.find()) title = matcher.group(1); // リンクの抽出 matcher = patternLink.matcher(resultContent); if(matcher.find()) link = matcher.group(1); // 価格の抽出 matcher = patternPrice.matcher(resultContent); if(matcher.find()) price = matcher.group(1); // 表示 System.out.println("<div>" + title + "</div>"); System.out.println("<div>" + price + "</div>"); System.out.println("<div>" + link + "</div>"); System.out.println(); i++; } System.out.println("</body></html>"); } }
YahooAuctionsSearcher.java (utf-8-unix)
YahooAuctionsSearcher.java (shift_jis-dos)