forked from xysun/pinboard
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fusion.py
105 lines (93 loc) · 3.51 KB
/
fusion.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# use google fusion table to serve as database
# sample code from google: https://developers.google.com/fusiontables/docs/samples/python
from api_secret import client_id, client_secret, redirect_uri, api_key, tableid
import urllib.parse, urllib.request, json, http.client
class API:
def __init__(self):
self.access_token = ''
self.params = ''
self.api_key = api_key
def main(self):
print('copy and paste the url below into browser')
print('https://accounts.google.com/o/oauth2/auth?%s%s%s%s' % \
('client_id=%s&' % (client_id),
'redirect_uri=%s&' % (redirect_uri),
'scope=https://www.googleapis.com/auth/fusiontables&',
'response_type=code'))
code = input('enter code:\n')
data = urllib.parse.urlencode({
'code':code,
'client_id':client_id,
'client_secret':client_secret,
'redirect_uri':redirect_uri,
'grant_type':'authorization_code'
})
serv_req = urllib.request.urlopen(url='https://accounts.google.com/o/oauth2/token', data=data.encode())
response = serv_req.read()
tokens = json.loads(response.decode())
access_token = tokens['access_token']
self.access_token = access_token
self.params = '?key=%s&access_token=%s' % (self.api_key, self.access_token)
def runRequest(self, method, url, data=None, headers=None):
request = http.client.HTTPSConnection('www.googleapis.com')
if data and headers:
request.request(method, url, data, headers)
elif headers: # for inserting a row
request.request(method, url, headers=headers)
else:
request.request(method, url)
response = request.getresponse()
print(response.status, response.reason)
response = response.read()
print (response)
return response
# retrieve a table
def retrieveTable(self, table_id):
print("GET TABLE")
return self.runRequest(
'GET',
'/fusiontables/v1/tables/%s/%s' % \
(table_id, self.params)
)
# create a column
def insertColumn(self, table_id, cname, ctype):
print('INSERT COLUMN')
data = '''{
"name":%s,
"type":%s
}''' % (cname, ctype)
return self.runRequest(
'POST',
'/fusiontables/v1/tables/%s/columns%s' % (table_id, self.params),
data,
headers = {'Content-Type':'application/json'}
)
# update a column
# delete a column
def deleteColumn(self, table_id, column_id):
print('DELETE COLUMN')
return self.runRequest(
'DELETE',
'/fusiontables/v1/tables/%s/columns/%s%s' % (table_id, column_id, self.params)
)
# querying for data, GET
def getRows(self, sql):
print('GET ROWS')
query = urllib.parse.urlencode(
[('sql',sql), ('key', self.api_key), ('access_token', self.access_token)]
)
return self.runRequest(
'GET',
'/fusiontables/v1/query?%s' % query
)
# insert/delete/update a row, POST
def postRows(self, sql):
print('INSERT ROWS')
query = urllib.parse.urlencode(
[('sql',sql), ('key', self.api_key), ('access_token', self.access_token)]
)
return self.runRequest(
'POST',
'/fusiontables/v1/query?%s' % query,
headers={'Content-length':0}
)