Сократа SODA и Python

Сократа подтверждает, что официального API Python не существует. Я хотел бы знать, есть ли для этого какая-то причина, по которой стоило бы изучать один из языков, который имеет официальную поддержку API, т.е. Python (и связанные с ним пакеты, такие как Pandas) не лучший выбор для обработки данных.

Конкретные вещи, которые я хотел бы сделать, включают просмотр таких сайтов, как data.lacity.gov Какие бы базы данных я ни просматривал в браузере, они не позволяют мне устанавливать даты или другие параметры. Я получаю результаты за несколько месяцев, хотя ожидал годы или десятилетия. Это привело к поиску API и отсутствию поддержки Python, за исключением появляющегося форка устаревшего проекта. Я предполагаю, что API, конечно, обеспечивают более высокую видимость. ..

Старый парень в клубе


person Community    schedule 04.11.2014    source источник


Ответы (3)


Чтобы узнать немного больше о том, почему у нас еще нет библиотеки Python, вы можете проверить эта ветка на Github.

Краткая версия: это не потому, что с Python что-то особенно не так или потому, что мы не любим его (я думаю, что это отличный язык), а скорее потому, что у нас просто нет внутреннего опыта для его создания. Сейчас. Я бы с удовольствием написал его, но, честно говоря, я больше Rubyist, чем Pythonista, поэтому я, вероятно, испортил бы его каким-то образом, который сделал бы всех несчастными. :)

Тем не менее, довольно легко использовать API Socrata напрямую, используя что-то вроде Requests или urllib2. Например, вот как сделать простой вызов с использованием библиотеки Requests для [data.lacity.org Building Inspections dataset]:

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 для использования с запросами, но существует множество ресурсов о том, как это сделать, на dev.socrata.com.

person chrismetcalf    schedule 04.11.2014
comment
Поскольку мне было любопытно, я также написал краткий пример того, как использовать SODA API с Python, Pandas и Bokeh для визуализации некоторых данных. Это может быть вам по душе: dev.socrata.com/consumers /примеры/ - person chrismetcalf; 05.11.2014
comment
Очень хорошие указатели, и я ценю разъяснения. Я рассмотрю варианты Python. - person ; 05.11.2014

Я не знаю, можно ли это считать ответом, но недавно я написал немного 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.

person Steve Bennett    schedule 05.02.2015

Для тех, кто столкнется с этим вопросом в нынешнюю эпоху, sodapy упоминается в некоторых документах Socrata как «неофициальный API Python». На стороне публикации немного не хватает, а API Discovery не поддерживается, но собирает известные наборы данных быстро и гладко.

person jshrimp29    schedule 29.08.2018