Pythonを使用してRESTfulサービスからJSONデータを取得する標準的な方法はありますか?
認証にKerberosを使用する必要があります。
いくつかのスニペットが役立ちます。
回答:
私が要点を見逃していない限り、このようなものは機能するはずです:
import json
import urllib2
json.load(urllib2.urlopen("url"))
私は与えるだろう要求のライブラリにこのための試みを。基本的に、同じ目的で使用する標準ライブラリモジュール(つまり、urllib2、httplib2など)のラッパーを使用する方がはるかに簡単です。たとえば、基本認証を必要とするURLからjsonデータをフェッチするには、次のようになります。
import requests
response = requests.get('http://thedataishere.com',
auth=('user', 'password'))
data = response.json()
Kerberos認証の場合、リクエストプロジェクトにはreqests-kerberosライブラリがあり、リクエストで使用できる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で書かれているという事実は、多くのリダイレクトなどを処理する必要がない場合でも機能するはずです。