1

Python 用 Google API クライアント ライブラリ ( http://wiki.freebase.com/wiki/Google_API_Client_Libraries#Python )を使用して次の MQL クエリを再現するにはどうすればよいですか?

https://api.freebase.com/api/service/mqlread?queries={"q1":[{"name~=":"*doubt*","name": None,"type": "/media_common/quotation","author": [{"name": "William Shakespeare"}]}], "q2":[{"name~=":"*law*","name": None,"type": "/media_common/quotation","author": [{"name": "William Shakespeare"}]}]}

次の単一のクエリが機能します。

from apiclient import discovery
from apiclient import model
import json
from pprint import pprint

DEVELOPER_KEY = ''

model.JsonModel.alt_param = ""
freebase = discovery.build('freebase', 'v1', developerKey=DEVELOPER_KEY)
query = [{"name~=":"*doubt*","name": None,"type": "/media_common/quotation","author": [{"name": "William Shakespeare"}]}]
response = json.loads(freebase.mqlread(query=json.dumps(query)).execute())
pprint (response)

パラメータ「query」を「queries」に変更する方法がわかりません

4

3 に答える 3

1

Google API Python クライアントの次のリリース (バージョン 1.0 ベータ 9) では、次のように複数のクエリをまとめてバッチ処理できるようになります。

from apiclient import discovery, model
from apiclient.http import BatchHttpRequest
import json

DEVELOPER_KEY = open('DEVELOPER_KEY').read()
query1 = [{"name~=":"*doubt*","name":None,"type":"/media_common/quotation","author":[{"name":"William Shakespeare"}]}]
query2 = [{"name~=":"*law*","name":None,"type":"/media_common/quotation","author":[{"name":"William Shakespeare"}]}]

model.JsonModel.alt_param = ""
freebase = discovery.build('freebase', 'v1', developerKey=DEVELOPER_KEY)

def display_results(request_id, response):
    for topic in response['result']:
        print topic['name']

batch = BatchHttpRequest(callback=display_results)
batch.add(freebase.mqlread(query=json.dumps(query1)))
batch.add(freebase.mqlread(query=json.dumps(query2)))
batch.execute(http)

この手法を使用すると、複数のクエリを組み合わせることができます。MQL クエリと検索クエリを組み合わせても、HTTP リクエストは 1 つしか作成されません。

于 2012-05-31T21:16:21.277 に答える
1

このqueriesパラメーターは、新しい API ではなくなりました。代わりに、文書化されていない RPC インターフェイスを次のような方法で使用できます。

import urllib
import urllib2
import json

url = 'https://www.googleapis.com/rpc'
requests = [{
  'method': 'freebase.text.get', 
  'apiVersion': 'v1', 
  'params': {
   'id': ['en','bob_dylan']
  }
},{
  'method': 'freebase.text.get', 
  'apiVersion': 'v1', 
  'params': {
    'id': ['en','blade_runner']
  }
}]
headers = { 'Content-Type': 'application/json' }
req = urllib2.Request(url, json.dumps(requests), headers)
response = urllib2.urlopen(req)
print response.read()

[コード スニペットは、Google dev rel の Shawn Simister の厚意により提供]

于 2012-05-29T14:03:38.403 に答える
0

ディスカバリードキュメントにqueriesパラメーターが含まれていると仮定すると、次のようになると思います。

queries = {"q1":[{"name~=":"*doubt*","name": None,"type": "/media_common/quotation","author": [{"name": "William Shakespeare"}]}], "q2":[{"name~=":"*law*","name": None,"type": "/media_common/quotation","author": [{"name": "William Shakespeare"}]}]}
response = json.loads(freebase.mqlread(queries=json.dumps(queries)).execute())
pprint (response)

クライアントは、検出ドキュメントを使用して、各APIメソッドが受け入れるパラメーターを特定します。したがって、pythonパラメータの名前を変更するだけでうまくいくはずです。

于 2012-05-29T09:40:32.830 に答える