1

Socrata 确认没有官方的 Python API。我想知道是否有某种原因值得学习其中一种具有官方 API 支持的语言,即 Python(以及 Pandas 等相关软件包)不是数据处理的最佳选择。

我想做的具体事情包括查看像 data.lacity.gov 这样的网站。无论我在浏览器上查看什么数据库,都不允许我设置日期或其他参数。我得到了几个月的结果,而我预计几年或几十年。这导致了寻找 API 并导致除了一个已弃用项目的新兴分支之外缺乏 Python 支持。当然,我假设 API 允许这种更高的可见性。..

俱乐部里的老家伙

4

3 回答 3

6

关于我们为什么还没有 Python 库的更多背景信息,您可能想查看Github 上的这个线程

简短的版本是 - 这不是因为 Python 有什么特别的问题,也不是因为我们不喜欢它(我认为它是一门很棒的语言),更多的是我们没有内部专业知识来构建它马上。我很想写一个,但坦率地说,我更像是一个 Rubyist 而不是 Pythonista,所以我可能会以某种方式把它搞砸,这会让每个人都不开心。:)

也就是说,直接使用诸如Requestsurllib2之类的东西来使用 Socrata API 非常容易。例如,以下是如何使用 Requests 库对 [data.lacity.org Building Inspections 数据集] 进行简单调用:

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'}

您需要构建自己的 SoQL 查询以与 Requests 一起使用,但在dev.socrata.com上有很多关于如何做到这一点的资源。

于 2014-11-04T22:05:05.653 回答
1

对于在当前时代遇到这个问题的任何人,苏打水在一些 Socrata 文档中被称为“非官方 Python API” 发布方面有点欠缺,不支持Discovery API,但收集已知数据集快速流畅。

于 2018-08-29T22:00:13.517 回答
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 库。

于 2015-02-05T07:24:46.913 回答