我正在尝试在 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"])