1. ホーム
  2. java

[解決済み] Googleをプログラムで検索する方法 Java API [終了しました]。

2022-12-02 08:43:48

質問

Google をプログラム的に検索することが可能かどうか、またどのように可能か、特にそのための Java API があるかどうか、誰か知っていますか?

どのように解決するのですか?

いくつかの事実があります。

  1. Google は一般向けの検索ウェブサービス API を提供しており、その API では JSON : http://ajax.googleapis.com/ajax/services/search/web . ドキュメントはこちら

  2. Java の提供 java.net.URL java.net.URLConnection を使用して、HTTP リクエストを発行し処理します。

  3. JSONはJavaにおいて、任意のJava JSON APIを使用して、完全なJavabeanオブジェクトに変換することができます。最も良いものの1つは Google Gson .

では、計算をしてみましょう。

public static void main(String[] args) throws Exception {
    String google = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
    String search = "stackoverflow";
    String charset = "UTF-8";
    
    URL url = new URL(google + URLEncoder.encode(search, charset));
    Reader reader = new InputStreamReader(url.openStream(), charset);
    GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);
    
    // Show title and URL of 1st result.
    System.out.println(results.getResponseData().getResults().get(0).getTitle());
    System.out.println(results.getResponseData().getResults().get(0).getUrl());
}

このJavabeanクラスは、Googleが返す最も重要なJSONデータを表しています(実際にはもっと多くのデータを返しますが、それに応じてこのJavabeanコードを拡張するのは練習としてあなたに任されています)。

public class GoogleResults {

    private ResponseData responseData;
    public ResponseData getResponseData() { return responseData; }
    public void setResponseData(ResponseData responseData) { this.responseData = responseData; }
    public String toString() { return "ResponseData[" + responseData + "]"; }

    static class ResponseData {
        private List<Result> results;
        public List<Result> getResults() { return results; }
        public void setResults(List<Result> results) { this.results = results; }
        public String toString() { return "Results[" + results + "]"; }
    }

    static class Result {
        private String url;
        private String title;
        public String getUrl() { return url; }
        public String getTitle() { return title; }
        public void setUrl(String url) { this.url = url; }
        public void setTitle(String title) { this.title = title; }
        public String toString() { return "Result[url:" + url +",title:" + title + "]"; }
    }

}

###こちらもご覧ください。


更新 2010年11月(上記回答から2ヶ月後)より、一般向け検索Webサービスが 非推奨 (となりました(サービス提供の最終日は2014年9月29日)。現在、最もお勧めなのは、次のようなクエリです。 http://www.google.com/search を直接、正直なユーザーエージェントと一緒に問い合わせ、その結果を HTML パーサー . ユーザーエージェントを省略した場合は、403が返されます。ユーザー エージェントで嘘をつき、Web ブラウザ (例: Chrome または Firefox) をシミュレートしている場合、帯域幅とパフォーマンスの無駄となる、はるかに大きな HTML 応答が返されます。

を使用したキックオフの例です。 Jsoup をHTMLパーサーとして使用したキックオフの例です。

String google = "http://www.google.com/search?q=";
String search = "stackoverflow";
String charset = "UTF-8";
String userAgent = "ExampleBot 1.0 (+http://example.com/bot)"; // Change this to your company's name and bot homepage!

Elements links = Jsoup.connect(google + URLEncoder.encode(search, charset)).userAgent(userAgent).get().select(".g>.r>a");

for (Element link : links) {
    String title = link.text();
    String url = link.absUrl("href"); // Google returns URLs in format "http://www.google.com/url?q=<url>&sa=U&ei=<someKey>".
    url = URLDecoder.decode(url.substring(url.indexOf('=') + 1, url.indexOf('&')), "UTF-8");
    
    if (!url.startsWith("http")) {
        continue; // Ads/news/etc.
    }
    
    System.out.println("Title: " + title);
    System.out.println("URL: " + url);
}