37

たとえば、都市や国ですべての「レストラン」や「保険代理店」を見つけようとしています。さて、多分国は広すぎますが、主に大都市です。

Google Places APIとPythonを使用していますが、使用できるのは「radius」パラメーターまたは「rankby=distance」のみであることがわかります。問題は、ドキュメントによると、各クエリは3ページで20件の結果、または60件の結果しか返すことができないと信じていることです(間違っている場合は訂正してください)。たとえば、ニューヨークのすべてのレストランを検索する場合は、中心などから開始して「rankby = distance」を設定し、設定された半径内で最も近い60の結果が得られるようにする必要があります。しかし、次のクエリがどうなるかわかりません...

これを行う方法について何かアイデアはありますか?

4

8 に答える 8

33

残念ながら、Google Places API から 60 を超える結果を取得することはできません。少なくとも利用規約に違反することなく:

Google (または該当する場合は特定のコンテンツのプロバイダー) から事前に書面による承認を受けていない限り、次のことを行ってはなりません: (d) お客様または他の人が大量ダウンロードまたは一括フィードにアクセスできるような方法で製品を使用すること。緯度または経度の数値座標、画像、および可視地図データを含むがこれらに限定されないコンテンツの

さらに、ここで読むことができるように:

それは主にライセンスの問題です。しかし、それはまた、Places API の目的が、記述した方法で Google Places データのスクレイピングまたは集約を容易にすることではないためです。そのようなアプリケーションは、ほぼ確実に Google マップまたは Google Maps API 利用規約に準拠しておらず、API や他の Google サービスの使用がいつでもブロックされる可能性があります。Places API は、近くのプレイスを特定する方法をアプリがユーザーに提供できるようにすることを目的としています。ユーザーがスキャンして検討する検索結果の数には実質的な制限があります。ユーザーに 200 件の結果を提供する必要はないと思います。そうすることで、Google プレイスのデータをスクレイピングするアプリケーションの開発が増えるだけだと思います。

さらなる参考として、こちらの回答もご覧ください。

于 2012-12-30T21:51:26.183 に答える
0

URL に Page トークンを使用すると、すべての結果を取得できます。

要件:

  • 場所の API キーが必要です。
  • リクエスト ライブラリをインストールします。

以下のコードを試すことができます:

import requests
import json

final_data = []

location='24.4165267,75.833981'
radius='2000'
types='restaurant'
url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=%s&radius=%s&types=%s&key=api key" % (location,radius,types)

while True:

    response = requests.request("POST", URL)
    response = json.loads(response.text)
    results = response['results']

    for result in results:
       final_data.append(data)

    if 'next_page_token' not in response:
        break
    else:
        next_page_token = response['next_page_token']

    next_page_token = '&pagetoken=%s' % str(next_page_token)
    url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=%s&radius=%s&types=%s&key=api key%s" % (location,radius,types,next_page_token)

print(final_data)
于 2021-08-09T04:53:31.407 に答える