2014-11-04 58 views
0

Socrata確認沒有官方的Python API。我想知道是否有某些原因會使得學習其中一種具有官方API支持的語言(即Python(和Pandas等相關軟件包)不是數據爭用的最佳選擇)的值得值得。Socrata SODA和Python

我想要做的具體事情包括看看像data.lacity.gov的網站 無論我在瀏覽器上看到什麼數據庫,都不要讓我設置日期或其他參數。我會在幾年或幾十年後得到幾個月的結果。這導致尋找API和缺乏Python支持,除了已棄用項目的新興分支。當然,我假設API允許這種更高的可見性。 ..

老傢伙在俱樂部

回答

4

有關爲什麼我們沒有一個Python庫的是,你可能想看看this thread on Github多一點點的背景。

簡短的版本並不是因爲Python中有什麼特別的錯誤,或者因爲我們有任何不喜歡的東西(我認爲這是一種很好的語言),更多的是我們沒有內部的東西專業知識立即建立一個。我很樂意寫一篇,但坦率地說,我比Pythonista更像一個Rubyist,所以我可能會以某種方式搞砸了,這會讓每個人都不快。 :)

也就是說,使用Socrata API直接使用諸如Requestsurllib2之類的東西很容易。例如,下面是如何使用抗[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

因爲我很好奇,我還寫了一個關於如何使用Python,Pandas和Bokeh的SODA API來可視化一些數據的快速示例。這可能是你的衚衕:http://dev.socrata.com/consumers/examples/data-visualization-with-python.html – chrismetcalf 2014-11-05 03:16:36

+0

非常好的指針,我讚賞澄清。我將研究Python選項。 – OldGuyInTheClub 2014-11-05 16:24:24

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 

我絕對推薦請求庫。