Pythonを使用してRESTfulサービスからJSONデータを取得する標準的な方法はありますか?
認証にKerberosを使用する必要があります。
いくつかのスニペットが役立ちます。
私はポイントを逃していない限り、このような何かが動作するはずです:
import json
import urllib2
json.load(urllib2.urlopen("url"))
requests ライブラリでこれを試してみます。基本的に、同じものに使用する標準ライブラリモジュール(urllib2、httplib2など)のラッパーを使用する方がはるかに簡単です。たとえば、基本認証を必要とするURLからJSONデータを取得するには、次のようになります。
import requests
response = requests.get('http://thedataishere.com',
auth=('user', 'password'))
data = response.json()
Kerberos認証の場合、- requests project には reqests-kerberos ライブラリがあり、これは requests で使用できるkerberos認証クラスを提供します。
import requests
from requests_kerberos import HTTPKerberosAuth
response = requests.get('http://thedataishere.com',
auth=HTTPKerberosAuth())
data = response.json()
基本的に、サービスに対してHTTPリクエストを作成してから、レスポンスの本文を解析する必要があります。私はhttplib2を使用したいです:
import httplib2 as http
import json
try:
from urlparse import urlparse
except ImportError:
from urllib.parse import urlparse
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json; charset=UTF-8'
}
uri = 'http://yourservice.com'
path = '/path/to/resource/'
target = urlparse(uri+path)
method = 'GET'
body = ''
h = http.Http()
# If you need authentication some example:
if auth:
h.add_credentials(auth.user, auth.password)
response, content = h.request(
target.geturl(),
method,
body,
headers)
# assume that content is a json reply
# parse content with the json module
data = json.loads(content)
Python 3を使用する場合は、次を使用できます。
import json
import urllib.request
req = urllib.request.Request('url')
with urllib.request.urlopen(req) as response:
result = json.loads(response.readall().decode('utf-8'))
まず、必要なのはurllib2またはhttplib2だけです。とにかく、汎用RESTクライアントが必要な場合は、これを確認してください。
https://github.com/scastillo/siesta
ただし、おそらくoauthなどを使用するため、ライブラリの機能セットはほとんどのWebサービスでは機能しないと思います。また、多くのリダイレクトなどを処理する必要がない場合でも、httplib2と比較して苦痛であるhttplibを介して書かれているという事実があなたにとってはうまくいくはずではありません。