私はプロジェクトに取り組んでおり、その一部には、python スクリプトからプロジェクトの Google Fusion Table に行を挿入することが含まれます。私は過去数日間、それを行う方法を理解しようとしましたが、公式には混乱しています.
私の調査では、API にアクセスするには Oauth 2.0 を使用する必要があることが示されているようです。そうすることで、アクセストークンを正常に取得できますが、リフレッシュトークンを正常に取得できないようです。これが、Fusion Table へのアクセスを Python コードと正常に統合する能力を妨げるかどうかはわかりません。
私が抱えている2番目の問題は、テーブルに行を挿入するコードを正確に理解していないことです。私が見つけた資料のほとんどは、非推奨の Fusion Tables SQL API からのものであり、それを行う新しい方法を完全には理解していません。
私はこの種の初心者であり、私を助けるための方向性は非常に高く評価されています!
編集:これまでに作業したコードは次のようになります。
client_id = "<client_i>"
client_secret = "<client_secret>"
table_id = "<table_id>"
access_token = ""
refresh_token = "<refresh_token>"
# the refresh token is used to request a new access token
data = urllib.urlencode({
'client_id': client_id,
'client_secret': client_secret,
'refresh_token': refresh_token,
'grant_type': 'refresh_token'})
request = urllib2.Request(
url='https://accounts.google.com/o/oauth2/token',
data=data)
request_open = urllib2.urlopen(request)
response = request_open.read()
request_open.close()
tokens = json.loads(response)
access_token = tokens['access_token']
# Read the table
request_read = urllib2.Request(
url='https://www.google.com/fusiontables/api/query?%s' % \
(urllib.urlencode({'access_token': access_token,
'sql': 'SELECT * FROM table_id'})))
request_open = urllib2.urlopen(request_read)
response = request_open.read()
request_open.close()
print response
そして、テーブルに新しい行を挿入しようとする私のコード:
date = str(datetime.now().date())
time = str(datetime.now().time())
query = 'INSERT INTO table_id (Date,Time,Saskatoon,Regina,MeadowLake)VALUES(date,time,60.01,60.02,59.99)'
data = urllib2.Request(
url='https://www.google.com/fusiontables/api/query?%s' % \
(urllib.urlencode({'access_token': access_token,
'sql': query})))
request_open = urllib2.urlopen(data)
これを実行すると、
HTTP エラー 400: HTTP GET は選択クエリにのみ使用できます。
INSERTのGETではなくPOSTを作成することになっていることはわかっていますが、それを行うためにコードで何を変更する必要があるのか わかりません。ノブでごめんなさい。
2回目の編集:
これを長くして申し訳ありませんが、これまでに到達した場所を示すことが適切だと思います. ライブラリ リクエストに切り替えたところ、多少は楽になりましたが、まだ POST は成功していません。行をインポートするための新しいコードは次のとおりです。
def importRows(self):
print 'IMPORT ROWS'
date = str(datetime.now().date())
time = str(datetime.now().time())
data = {'Date': date,
'Time': time,
'Saskatoon': '60.01',
'Regina': '59.95'}
url = 'https://www.googleapis.com/upload/fusiontables/v1/tables/%s/import/%s' % \
(tableid, self.params) # self.params is access token
importRow = requests.post(url, params=data)
print importRow.status_code
print importRow.text
それは私に与えます
400
{
"error": {
"errors": [
{
"domain": "fusiontables",
"reason": "badImportInputEmpty",
"message": "Content is empty."
}
],
"code": 400,
"message": "Content is empty."
}
}