我正在尝试在 Freebase 上查询所有美国县及其地理位置(经度 + 纬度)。我注意到有时查询会起作用,但在其他尝试时它会返回以下内容:<"HttpError 503 when requesting...returned "Backend Error">。
我尝试更改查询结果限制,我发现我的查询分解的限制各不相同;有时它在“limit”:2900时起作用,有时它在“limit”:1200返回上述错误。
这是我到目前为止编写的代码:
从 itertools 导入 islice 从 apiclient 导入发现 从 apiclient 导入模型 导入json 从 CREDENTIALS 导入 FREEBASE_KEY 从熊猫导入数据框,系列 DEVELOPER_KEY = FREEBASE_KEY model.JsonModel.alt_param = "" freebase = discovery.build('freebase', 'v1', developerKey=DEVELOPER_KEY) query_json = """ [{ “身份证”:空, “名称”:空, "/location/us_county/fips_6_4_code": [], “/位置/位置/地理位置”:{ “纬度”:空, “经度”:空 }, “限制”:3050 }]""".replace("\n", "") 查询 = json.loads(query_json) 响应 = json.loads(freebase.mqlread(query=json.dumps(query)).execute()) 结果=列表() 结果为 islice(response['result'], None): results.append({'id': 结果['id'], '名称':结果['名称'], '纬度':浮动(结果['/location/location/geolocation']['latitude']), '经度':浮动(结果['/location/location/geolocation']['longitude']), 'fips': 结果['/location/us_county/fips_6_4_code'], }) 状态 = 数据帧(结果) plt.scatter(states["longitude"], states["latitude"])
这似乎不是配额问题,其他人在 Freebase 邮件列表中注意到了类似的问题:http: //lists.freebase.com/pipermail/freebase-discuss/2011-December/007710.html 但这是针对另一种类型的数据,所以他们的解决方案似乎不适用于我正在研究的内容。
[编辑] 我使用游标遍历数据,它工作正常。这是我使用的最终代码:
从 itertools 导入 islice 从 apiclient 导入发现 从 apiclient 导入模型 导入json 从 CREDENTIALS 导入 FREEBASE_KEY 从熊猫导入数据框,系列 DEVELOPER_KEY = FREEBASE_KEY model.JsonModel.alt_param = "" freebase = discovery.build('freebase', 'v1', developerKey=DEVELOPER_KEY) 查询 = [{ “身份证”:无, “名称”:无, "type": "/location/us_county", “/位置/位置/地理位置”:{ “纬度”:无, “经度”:无 } }] 结果 = [] 计数 = 0 def do_query(cursor=""): 响应 = json.loads(freebase.mqlread(query=json.dumps(query), cursor=cursor).execute()) 结果为 islice(response['result'], None): results.append({'id': 结果['id'], '名称':结果['名称'], '纬度': 结果['/location/location/geolocation']['latitude'], '经度':结果['/location/location/geolocation']['longitude'], }) 返回 response.get("光标") 游标 = do_query() 而(光标): 游标 = do_query(游标) # 检查这个循环经历了多少次迭代。 #打印计数 计数+=1 # 将结果插入 pandas DataFrame 并绘图。 状态 = 数据帧(结果) plt.scatter(states["longitude"], states["latitude"])