Working from @Rachel's sample code, with a bit of fiddling I got to this, which works, and illustrates the topic, search, and query features.
Must install libraries urllib and json, plus code from https://code.google.com/p/google-api-python-client/downloads/list Must enable billing from 'settings' for the specific project The mglread() interface for Python is broken as of April 2014. The documented 'freebase.readonly' scope doesn't work.
from apiclient.discovery import build import httplib2 from oauth2client.client import SignedJwtAssertionCredentials, VerifyJwtTokenError # Set up needed constants # SERVICE_EMAIL = args.serviceEmail PRIVATE_KEY_PATH = args.privateKeyFile topicID = args.topicID query = args.query search_url = 'https://www.googleapis.com/freebase/v1/search' topic_url = 'https://www.googleapis.com/freebase/v1/topic' mql_url = "https://www.googleapis.com/freebase/v1/mqlread" key = open(PRIVATE_KEY_PATH, 'rb').read() credentials = SignedJwtAssertionCredentials(SERVICE_EMAIL, key, scope='https://www.googleapis.com/auth/freebase') try: http = httplib2.Http() http = credentials.authorize(http) except VerifyJwtTokenError as e: print(u"Unable to authorize via private key: VerifyJwtTokenError, {0}".format(e)) raise connection = build('freebase', 'v1', http=http) # Search for a topic by Freebase topic ID # https://developers.google.com/freebase/v1/topic-overview # params = { 'filter': 'suggest' } url = topic_url + topicID + '?' + urllib.urlencode(params) if (args.verbose): print("URL: " + url) resp = urllib.urlopen(url).read() if (args.verbose): print("Response: " + resp) respJ = json.loads(resp) print("Topic property(s) for '%s': " % topicID) for property in respJ['property']: print(' ' + property + ':') for value in respJ['property'][property]['values']: print(' - ' + value['text']) print("\n") # Do a regular search # https://developers.google.com/freebase/v1/search-overview # params = { 'query': query } url = search_url + '?' + urllib.urlencode(params) if (args.verbose): print("URL: " + url) resp = urllib.urlopen(url).read() if (args.verbose): print("Response: " + resp) respJ = json.loads(resp) print("Search result for '%s': " % query) theKeys = {} for res in respJ['result']: print ("%-40s %-15s %10.5f" % (res['name'], res['mid'], res['score'])) params = '{ "id": "%s", "type": []}' % (res['mid']) # Run a query on the retrieved ID, to get its types: url = mql_url + '?query=' + params resp = urllib.urlopen(url).read() respJ = json.loads(resp) print(" Type(s): " + `respJ['result']['type']`) otherKeys = [] for k in res: if (k not in ['name', 'mid', 'score']): otherKeys.append(k) if (len(otherKeys)): print(" Other keys: " + ", ".join(otherKeys)) sys.exit(0)