2

/v1 Fusion Table API への移行に遅れをとっていますが、これ以上我慢することはありません。

私は AppEngine で Python を使用しており、Google サービス アカウント (JSON Web トークンを使用するサーバー側アプリの OAuth2 のより複雑ないとこ) を使用して Google Fusion Tables に接続しようとしています。

Google Prediction API でサービス アカウントを使用するためのドキュメントを指摘する別の質問を見つけました。 Fusion Table と Google サービス アカウント

これまでのところ、私は持っています

import httplib2
from oauth2client.appengine import AppAssertionCredentials
from apiclient.discovery import build

credentials = AppAssertionCredentials(scope='https://www.googleapis.com/auth/fusiontables')
http = credentials.authorize(httplib2.Http(memcache)) #Http(memcache)
service = build("fusiontables", "v1", http=http)

# list the tables
tables = service.table().list().execute() # <-- ERROR 401 invalid credentials here

共有できるサービス アカウントを使用して AppEngine 上の Fusion Tables に接続する例はありますか? それともオンラインで何かいいこと?

ありがとう

4

5 に答える 5

3

これは実際に機能します。重要な部分は、App Engine サービス アカウントにフュージョン テーブルへのアクセス権を付与する必要があることです。書き込みを行っている場合、アカウントには書き込みアクセスが必要です。ヘルプについては、https ://developers.google.com/api-client-library/python/start/installation を参照してください (「はじめに: クイックスタート」を探してください)。

アプリ エンジン サービス アカウントは、your-app-id@appspot.gserviceaccount.com のようになります。

また、API コンソールで App Engine サービス アカウントをチーム メンバーにして、「編集可能」権限を付与する必要があります。

SCOPE='https://www.googleapis.com/auth/fusiontables'
PROJECT_NUMBER = 'XXXXXXXX' # REPLACE WITH YOUR Project ID

# Create a new API service for interacting with Fusion Tables
credentials = AppAssertionCredentials(scope=SCOPE)
http = credentials.authorize(httplib2.Http())
logging.info('QQQ: accountname: %s' % app_identity.get_service_account_name())
service = build('fusiontables', 'v1', http=http, developerKey='YOUR KEY HERE FROM API CONSOLE')

def log(value1,value2=None):
    tableid='YOUR TABLE ID FROM FUSION TABLES'
    now = strftime("%Y-%m-%d %H:%M:%S", gmtime())
    service.query().sql(sql="INSERT INTO %s (Temperature,Date) values(%s,'%s')" % (tableid,value1,now)).execute()
于 2013-02-13T17:32:00.090 に答える
1

Ralph Yozzo の回答を明確にするために、service_account 資格情報を作成したときにダウンロードした json ファイル (ServiceAccountCredentials.from_json_keyfile_name('service_acct.json')新しい oauth2client ライブラリで使用するときにロードするファイルと同じ) から、「client_email」の値をテーブルの共有ダイアログ画面に追加する必要があります ( 1をクリックし、2にメールアドレスを入力してください)

[共有] をクリックし、メール アドレスを入力します

于 2016-03-11T23:49:23.877 に答える
0

Oauth2 を使用して Python AppEngine を Fusion Tables API に接続するのに役立つ、私が見つけた最高のオンライン リソースは、 Google APIs Client Library for Python です。

スライド プレゼンテーションは、オンライン サンプル、デコレータが使用される理由を理解するのに役立ちます。

また、認証にアプリのサービス アカウントとユーザー アカウントのどちらを使用するかを理解するのに役立ちます: OAuth 2.0 を使用して Google API にアクセスする

Python 用 Google API クライアント ライブラリのインストールを検討してください

スコープは別として、Oauth2 は多かれ少なかれフュージョン テーブルだけでなく、すべての Google API に共通しています。

oauth2 が機能したら、Google Fusion Tables APIを参照してください。

于 2015-02-14T23:46:55.380 に答える
0

Google App Engine や Google Compute Engine 以外のホストから (たとえば、テスト用の localhost から) 動作させたい場合は、サービス アカウント ページから生成およびダウンロードできる json キー ファイルから作成された ServiceAccountCredentials を使用する必要があります。

scopes = ['https://www.googleapis.com/auth/fusiontables']
keyfile = 'PATH TO YOUR SERVICE ACCOUNT KEY FILE'
FTID = 'FUSION TABLE ID'

credentials = ServiceAccountCredentials.from_json_keyfile_name(keyfile, scopes)
http_auth = credentials.authorize(Http(memcache))
service = build('fusiontables', 'v2', http=http_auth)

def insert(title, description):
    sqlInsert = "INSERT INTO {0} (Title,Description) values('{1}','{2}')".format(FTID, title, description)
    service.query().sql(sql=sqlInsert).execute()

説明については、サービス アカウントに関する Google のページを参照してください。

于 2016-08-06T21:45:39.433 に答える