[解決済み] Googleをプログラムで検索する方法 Java API [終了しました]。
質問
Google をプログラム的に検索することが可能かどうか、またどのように可能か、特にそのための Java API があるかどうか、誰か知っていますか?
どのように解決するのですか?
いくつかの事実があります。
-
Google は一般向けの検索ウェブサービス API を提供しており、その API では JSON : http://ajax.googleapis.com/ajax/services/search/web . ドキュメントはこちら
-
Java の提供
java.net.URL
とjava.net.URLConnection
を使用して、HTTP リクエストを発行し処理します。 -
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);
}
関連
-
Javaがテキストファイルを読み込む
-
アノテーション「@Retention」の役割
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み】JSP 2を使用して、JSPファイル内のJavaコードを回避するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
Uncaught ReferenceError: は定義されていません。
-
SocketException java.netの4つの例外解決策。
-
代入の左辺は変数でなければならない 解答
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
Java Runtime Environmentを継続するためのメモリが不足しています。
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み】JSONデータをJavaオブジェクトに変換する
-
[解決済み] 代表的なJavaのHTMLパーサーの長所と短所は何ですか?[クローズド]