前回の補足。
ID, Key
OAuthやAPIを使うために必要になるIDやKeyについて、用途と取得方法を示す。
- DocId
- ClientId
- ClientSecret
- API Key
- code
- AccessToken
6つもある。実際はアカウント情報(メールアドレス、パスワード)もログインするために必要だから8つか。
DocId
| ID | 用途 |
|---|---|
| docid | SQL文でテーブル名として使う |
Google DriveでFusion Tablesを作成したとき、そのファイルにURLが割り当てられる。そのURL内にあるdocidパラメータの値をテーブル名として使う。
SQL文を作るときは、そのテーブルのカラム名も必要。データを追加するときは、データのフォーマットに合わせる必要がある、と思う。
OAuth2.0
| 入力 | 取得 |
|---|---|
| ClientId,ClientSecret | code |
| code | AccessToken |
Google Developers Consoleの認証情報からAPI KeyとOAuth クライアント IDを作成する。そこで得たClientId,ClientSecret,APIKeyを使ってcodeを得る。ローカルサーバが必要で、許可ボタンを押さねばならない。手入力が必要なところ。期限もあるらしい。いつまでかは知らない。ワンタイムパスワード的なものなのだろうか。
codeが入手できたら、AccessTokenを取得するリクエストをする。
APIを叩く
| Key | 用途 |
|---|---|
| APIKey,AccessToken | Fusion Tables API |
APIを叩くためには、APIKeyとAccessTokenの両方が必要である。
Fusion Tables APIに触ってみたとき、APIKeyだけでできると思って叩くもLogin Requiredエラーになった。あれはOAuth2.0認証しろという意味だったのだろうか。
ソースコード
AccessTokenを取得する
ソースコードを参照する。以下の部分でAccessTokenを取得している。
data = urllib.urlencode({
"code": code,
"client_id": client_id,
"client_secret": client_secret,
"redirect_uri": redirect_uri,
"grant_type": "authorization_code"
})
serv_req = urllib2.Request(url="https://accounts.google.com/o/oauth2/token",
data=data)
serv_resp = urllib2.urlopen(serv_req)
response = serv_resp.read()
tokens = simplejson.loads(response)
access_token = tokens["access_token"]
所感
codeの取得をすっとばして、AccessTokenを使いまわせたら、手入力を回避できそう。
そうすれば、ブラウザもローカルサーバも立ち上げる必要がなくなる。できるかどうか知らないけど。
次回、調べてみる。