我試圖在Freebase上查詢美國所有縣和他們的goelocation(經度+緯度)。我注意到有時查詢會起作用,但在其他嘗試中,它會返回以下內容:<「HttpError 503在請求時返回」後端錯誤「>當查詢結果超過一定數量時,Freebase + GoogleAPI查詢返回錯誤
我試着更改查詢結果限制,我發現的是,我的查詢分解的極限有所不同;有時它在「極限」:2900時有效,有時在「極限」:1200時返回上述錯誤。我寫的目前爲止的代碼:
from itertools import islice from apiclient import discovery from apiclient import model import json from CREDENTIALS import FREEBASE_KEY from pandas import DataFrame, Series DEVELOPER_KEY = FREEBASE_KEY model.JsonModel.alt_param = "" freebase = discovery.build('freebase', 'v1', developerKey=DEVELOPER_KEY) query_json = """ [{ "id": null, "name": null, "/location/us_county/fips_6_4_code": [], "/location/location/geolocation": { "latitude": null, "longitude": null }, "limit": 3050 }]""".replace("\n", " ") query = json.loads(query_json) response = json.loads(freebase.mqlread(query=json.dumps(query)).execute()) results = list() for result in islice(response['result'], None): results.append({'id': result['id'], 'name': result['name'], 'latitude': float(result['/location/location/geolocation']['latitude']), 'longitude': float(result['/location/location/geolocation']['longitude']), 'fips': result['/location/us_county/fips_6_4_code'], }) states = DataFrame(results) plt.scatter(states["longitude"], states["latitude"])
這似乎不是配額問題,而其他人已經注意到Freebase郵箱中的類似問題g列表:http://lists.freebase.com/pipermail/freebase-discuss/2011-December/007710.html 但是這是針對另一種類型的數據,所以看起來他們的解決方案不適用於我正在處理的內容。
[編輯] 我使用的光標通過數據進行迭代,並且它很好地工作。下面是我用最後的代碼:
from itertools import islice from apiclient import discovery from apiclient import model import json from CREDENTIALS import FREEBASE_KEY from pandas import DataFrame, Series DEVELOPER_KEY = FREEBASE_KEY model.JsonModel.alt_param = "" freebase = discovery.build('freebase', 'v1', developerKey=DEVELOPER_KEY) query = [{ "id": None, "name": None, "type": "/location/us_county", "/location/location/geolocation": { "latitude": None, "longitude": None } }] results = [] count = 0 def do_query(cursor=""): response = json.loads(freebase.mqlread(query=json.dumps(query), cursor=cursor).execute()) for result in islice(response['result'], None): results.append({'id': result['id'], 'name': result['name'], 'latitude': result['/location/location/geolocation']['latitude'], 'longitude': result['/location/location/geolocation']['longitude'], }) return response.get("cursor") cursor = do_query() while(cursor): cursor = do_query(cursor) # Check how many iterations this loop has gone through. #print count count+=1 # Plug results into a pandas DataFrame and plot. states = DataFrame(results) plt.scatter(states["longitude"], states["latitude"])
謝謝大家。我用了一個光標,瞧!所有事情都是相應的。 – 2013-02-27 18:57:33