Search code examples
pythonfreebasegoogle-api-python-client

Making multiple MQL queries to Freebase from Google GWT Appengine with Python apiclient


How do I reproduce the following MQL query with the Google API Client Library for Python( http://wiki.freebase.com/wiki/Google_API_Client_Libraries#Python)

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"}]}]}

The following single query works:

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)

I do not see how I can change the parameter "query" to "queries"


Solution

  • The queries parameter is gone in the new API. You can instead use the lightly documented RPC interface in a manner similar to this:

    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()
    

    [Code snippet courtesy of Shawn Simister, Google dev rel]