Yahoo! Auctions 検索

概要

サンプルプログラム

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)