-
-
Save 700brains/5c043fca07a899c9388b1096a387cb8f to your computer and use it in GitHub Desktop.
Python library for the Google Prediction API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
""" | |
This module provides an interface to the Google Prediction API. | |
""" | |
import json | |
import numbers | |
import urllib | |
import urllib2 | |
import urlparse | |
def get_auth(email, password): | |
""" | |
Retrieves a Google authentication token. | |
""" | |
url = 'https://www.google.com/accounts/ClientLogin' | |
post_data = urllib.urlencode([ | |
('Email', email), | |
('Passwd', password), | |
('accountType', 'HOSTED_OR_GOOGLE'), | |
('source', 'companyName-applicationName-versionID'), | |
('service', 'xapi'), | |
]) | |
request = urllib2.Request(url, post_data) | |
response = urllib2.urlopen(request) | |
content = '&'.join(response.read().split()) | |
query = urlparse.parse_qs(content) | |
auth = query['Auth'][0] | |
response.close() | |
return auth | |
def train(auth, model): | |
""" | |
Tells the Google Prediction API to train the supplied model. | |
""" | |
url = 'https://www.googleapis.com/prediction/v1/training?data=%s' % \ | |
urllib.quote(model, '') | |
headers = { | |
'Content-Type': 'application/json', | |
'Authorization': 'GoogleLogin auth=%s' % auth, | |
} | |
post_data = json.dumps({ | |
'data': {}, | |
}) | |
request = urllib2.Request(url, post_data, headers) | |
response = urllib2.urlopen(request) | |
response.close() | |
def predict(auth, model, query): | |
""" | |
Makes a prediction based on the supplied model and query data. | |
""" | |
url = 'https://www.googleapis.com/prediction/v1/training/%s/predict' % \ | |
urllib.quote(model, '') | |
headers = { | |
'Content-Type': 'application/json', | |
'Authorization': 'GoogleLogin auth=%s' % auth, | |
} | |
data_input = {} | |
if isinstance(query, basestring): | |
data_input['text'] = [query] | |
elif isinstance(query, numbers.Number): | |
data_input['numeric'] = [query] | |
post_data = json.dumps({ | |
'data': { | |
'input': data_input | |
} | |
}) | |
request = urllib2.Request(url, post_data, headers) | |
response = urllib2.urlopen(request) | |
content = response.read() | |
prediction = json.loads(content)['data']['output']['output_label'] | |
response.close() | |
return prediction | |
def main(): | |
""" | |
Asks for the user's Google credentials, Prediction API model and queries. | |
""" | |
from getpass import getpass | |
google_email = raw_input('Email: ') | |
google_password = getpass('Password: ') | |
auth = get_auth(google_email, google_password) | |
message = 'Enter text for classification. Hit control-c to quit: ' | |
model = raw_input('Model: ') | |
while True: | |
query = raw_input(message) | |
print predict(auth, model, query) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment