2013-06-04 15 views
11

JavaのGoogleカスタム検索APIを使用して、クエリに応じてGoogleの検索結果を取得しています。私は次のようにコードは、他の記事の助けを借りて、このコードを書かれている:Googleによるカスタム検索API V1による10件以上の検索結果

url = new URL("https://www.googleapis.com/customsearch/v1?key="+key+ "&cx="+ cx +"&q="+ searchText+"&alt=json"+"&start="+0+"&num="+30); 
    HttpURLConnection conn2 = (HttpURLConnection) url.openConnection(); 
    System.out.println("Connection opened!"); 
    conn2.setRequestMethod("GET"); 
    conn2.setRequestProperty("Accept", "application/json"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(
    (conn2.getInputStream()))); 

問題は、私はNUMせずに上記のコードを使用していたときにということであり、それが適切に実行するが、唯一のトップ10を与えているパラメータを開始します結果。だから私はnumと開始パラメータを使用しています。しかし、彼らは問題を作り出しています。ここでは、URLにnumstartのパラメータをどこに入れるのか理解できません。常にHTTP 400すなわちBad Requestを与えています。私はDocumentationページを読んでいますが、Urlにこれらの2つのパラメータをどこに置くべきかについても明確な指示はありません。

誰かが私にこの問題を解決するのに役立つなら、私は本当に感謝します。ありがとうございました。

答えて

16

このようにすることはできません。 numは唯一
を返すために、検索結果の10を参照してください

https://developers.google.com/custom-search/v1/using_rest#query-params

num個の番号の最大することができますが 結果が、現在の検索に戻るには何を指定することができます。有効な値は、1〜10の整数 です。 numが使用されない場合、値10は と仮定されます。より多くの結果を表示するには

、Googleは必要に応じて起動パラメータをインクリメントし、複数の呼び出しを行うことを示唆:

http://support.google.com/customsearch/bin/answer.py?hl=en&answer=1361951

Googleカスタム検索とGoogleサイト内検索は、10件の結果クエリごと まで戻ります。 ユーザーに10以上の結果を表示する場合は、start = 0、start = 11 ... パラメータを使用して複数のリクエストを発行し、結果を1ページに表示できます。この場合、 Googleは各リクエストを個別のクエリとみなし、 Google Site Searchを使用している場合は、それぞれのクエリが上限にカウントされます。

+0

はい、どこに開始パラメータを入れる必要があるのか​​分かりません。なぜなら、このようにURLの最後にstart = 0またはstart = 11を追加すると、https://www.googleapis.com/customsearch/v1?key = "+ key +"&cx = "+ cx +"&q = "+ searchText +"&alt = json "+"&start = "+ 0 HTTPステータス400、つまりBad Requestです。 startパラメータを使用してこのURLをフレームする方法を正確に指定してください。 – Joy

+0

コードで、使用しているURLを出力してください。System.out.println(url.toString());のようなものをコピーしてブラウザに表示します。 JSON形式の完全なエラーです(サンプル - これを得るためにパラメータ "q"を省略しました)。問題を解決できない場合は、ここに取得した結果を投稿してください:{ "error": { "エラー":[ { "ドメイン": "グローバル"、 "理由": "必須"、 "メッセージ": "必須パラメータ:Q"、 "locationType": "パラメータ"、 "場所": "Q" } ] 、 "code":400、 "message": "必須パラメータ:q" } } –

+5

Googleが賢く設計しました。もっと多くの結果を返すのではなく、もっと多くの要求をするようにしてください... -.- – simon

-1

Googleでは「JSON/Atomカスタム検索APIで使用できるクエリパラメータはこのセクションにまとめられています。すべてのパラメータ値をURLエンコードする必要があります。 https://developers.google.com/custom-search/v1/using_rest#query-params "?" urlencodingの標準を設定するphp urlエンコーダと同等のものでエンコードする必要があります。 JavaクラスのURLEncoderが正しくないということは、replaceAllを2回実行する必要があるということです。あなたの入力にこれを行う必要があります:

String queryArguments = "key="+key+ "&cx="+ cx +"&q="+ searchText+"&alt=json"+"&start="+"0"+"&num="+"30"; 

数字の周りには引用符があります。 あなたは変数からこれらを取得するには、次を使用する場合:その後、

String thenum = Integer.toString(theinteger); 

と適切なエンコーディング

String addition = URLEncoder.encode(queryArguments, "UTF-8") 
.replaceAll("\\%28", "(") 
.replaceAll("\\%29", ")") 
.replaceAll("\\+", "%20") 
.replaceAll("\\%27", "'") 
.replaceAll("\\%21", "!") 
.replaceAll("\\%7E", "~"); 

次に、あなたは、元のエンコードされていないURLにそれを追加します。結論あなたに

String url = "https://www.googleapis.com/customsearch/v1?" 
String total = url + addition; 

をコードは次のようになります。

String query = URLEncoder.encode("key="+key+ "&cx="+ cx +"&q="+ searchText+"&alt=json"+"&start="+"0"+"&num="+"30"), "UTF-8").replaceAll("\\%28", "(") 
.replaceAll("\\%29", ")") 
.replaceAll("\\+", "%20") 
.replaceAll("\\%27", "'") 
.replaceAll("\\%21", "!") 
.replaceAll("\\%7E", "~"); 
URL url = new URL("https://www.googleapis.com/customsearch/v1?" + query); 
HttpURLConnection conn2 = (HttpURLConnection) url.openConnection(); 
System.out.println("Connection opened!"); 
conn2.setRequestMethod("GET"); 
conn2.setRequestProperty("Accept", "application/json"); 
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn2.getInputStream()))); 

私はこれがあなたのために働くことを願っています。私は古い廃止予定のイメージapiと非常によく似た何かをしましたが、コンセプトは同じで、私は新しいドキュメントを見ました。 :)

EDIT: numパラメータが0以上10以下であることを確認してください。

+0

はい、先生が最初に提案した方法で試したところ、 。しかし、今でも同じエラーコード400すなわち悪いリクエストを与えている。あなた自身でこれを試しましたか? – Joy

+1

私は以前にGoogle画像検索apiを使用しました。これは、apiキーとベースURLの必要性の他に、まったく同じです。他の回答者が言ったように、あなたのnumパラメータが10以下であることが必要であることを言及することを忘れました。 numパラメータを省略すると、0から10の間であれば機能するはずです。私は、URLのエンコーディングが必要なのは、スペースがあるクエリ(「%20」に変更される)といくつかの特殊なケースのためだけであることを明確にしたいと思います。この場合もパラメータの順序は関係ありません。がんばろう! –

+3

が間違っています:「num」は10を超えてはなりません。有効な値は1〜10です。 'start'は' 0'でも構いません。有効な値は0より大きい整数です。 – Raptor

関連する問題