Сократа СОДА и Питон

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

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

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

3 ответа

Решение

Для получения дополнительной информации о том, почему у нас еще нет библиотеки Python, вы можете проверить эту тему на Github.

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

Тем не менее, довольно просто использовать Socrata API напрямую, используя что-то вроде Requests или urllib2. Например, вот как можно сделать простой вызов, используя библиотеку запросов для набора данных [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 для использования с запросами, но на http://dev.socrata.com/ есть много ресурсов, как это сделать.

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

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

Я определенно рекомендую библиотеку запросов.

Другие вопросы по тегам