Socrata确认没有正式的Python API。我想知道是否有一些原因可以让我有必要学习其中一种支持官方API的语言,即Python(以及像Pandas这样的相关软件包)不是数据争用的最佳选择。
我想做的具体事情包括查看data.lacity.gov等网站 无论我在浏览器上看到什么数据库,都不要让我设置日期或其他参数。我得到几个月的结果,我预计数年或数十年。这导致了寻找API以及缺乏Python支持,除了新兴的已弃用项目分支。当然,我假设API允许更高的可见性。 ..
俱乐部中的老家伙
答案 0 :(得分:6)
有关我们为什么还没有Python库的更多背景信息,您可能需要查看this thread on Github。
简短的版本是 - 它不是因为Python有任何特别的错误,或者因为我们不喜欢它(我认为它是一种很棒的语言),它更多的是我们现在没有内部专业知识来建立一个。我喜欢写一个,但坦率地说,我更像是一个Rubyist而不是Pythonista,所以我可能会以某种方式弄乱它,这会让每个人都不高兴。 :)
也就是说,使用Requests或urllib2之类的东西直接使用Socrata API非常容易。例如,以下是如何使用Requests库对[data.lacity.org建筑检查数据集]进行简单调用:
import requests
r = requests.get(
"https://data.lacity.org/resource/9w5z-rg2h.json?$where=within_circle(lat_lon, 34.053714, -118.242653, 1000)",
headers={"X-App-Token":"[YOUR APP TOKEN]"}
)
r.json()[0] # {u'permit_status': u'Permit Finaled', u'inspection_result': u'Partial Inspection', u'lat_lon': {u'latitude': u'34.04866', u'needs_recoding': False, u'longitude': u'-118.23787'}, u'address': u'100 S ALAMEDA ST', u'inspection': u'Excavation/Setback/Form/Re-Bar', u'inspection_date': u'2013-08-27T00:00:00', u'permit': u'13016-30000-09747'}
您需要structure your own SoQL query才能使用“请求”,但有很多关于如何在dev.socrata.com上执行此操作的资源。
答案 1 :(得分:0)
我不知道这是否有资格作为答案,但我最近写了一些Python与SODA交互,并(在经历了同样的初始混淆之后)发现你真的不需要“Python API”。这是我的代码:https://github.com/stevage/meshlium-soda
样品:
headers = {
'X-App-Token': config.app_token,
'Content-Type': 'application/json'
}
...
params = {#'$select': 'max(timestamp)',
'$limit': 1,
'$order': 'timestamp DESC',
'$where': 'timestamp IS NOT NULL'}
r = requests.get(config.dataset + '.json', params=params, headers=headers, auth=config.auth)
if r.status_code != 200:
raise RuntimeError('Can''t retrieve latest timestamp.' + r.text)
...
r = requests.post(config.dataset, data=simplejson.dumps(rows), headers = headers, auth=config.auth)
j = r.json()
print
if r.status_code != 200:
raise RuntimeError ( "%d Socrata error: %s" % (r.status_code, j['message']))
return j
我绝对推荐Requests库。
答案 2 :(得分:0)
对于在当前时代遇到这个问题的任何人来说,sodapy在某些Socrata文档中都被称为“非官方Python API”。发布方面存在一些不足,Discovery API不受支持,但是收集已知数据集既快速又顺利。