stylesheet

2011-03-09

pythonでgoogleにログインする

insightとかinsightとかapiが公開されていないGoogleサービスにpythonでログインする方法をメモ。
その他のサービスは素直に gdata-python-client を使ったほうがイイ。

手順は以下の通り

  1. ログインするアカウントのメールアドレスとパスワードを https://www.google.com/accounts/ClientLogin へ POST する。
  2. 認証に成功するとセッションIDがレスポンスとして返る。
  3. セッションIDをリクエストヘッダのCookieにセットしてサービスにアクセスする。

ログイン時に送信するパラメタは他にもあるが、省略できるみたい。詳しくは pyrfeedの人が知ってる。


import urllib, urllib2

# ログインしてクッキーを取得
payload = urllib.urlencode({'Email': 'example@gmail.com', 'Passwd': 'password'})
req = urllib2.Request('https://www.google.com/accounts/ClientLogin', payload)
cookie = urllib2.urlopen(req).read()

# クッキーをセットしてリクエスト送信
req = urllib2.Request('http://www.google.com/insights/search/')
req.add_header('Cookie', cookie)
content = urllib2.urlopen(req)

print content

Google AppEngineの場合

appengineでは "Stripped prohibited headers from URLFetch request" とwarningが出てヘッダがホゲられる。urllib2の代わりにurlfetchを使うのが楽ちん。

import urllib
from google.appengine.api import urlfetch

# ログインしてセッション情報を取得
payload = urllib.urlencode({'Email': 'example@gmail.com', 'Passwd': 'password'})
cookie = urlfetch.fetch('https://www.google.com/accounts/ClientLogin',
    payload, urlfetch.POST).content

# セッション情報をクッキーにセットしてリクエスト送信
content = urlfetch.fetch('http://www.google.com/insights/search/',
    headers={'Cookie': cookie}).content

print content

感想

  • これで、「割り当て制限...」に悩まされることなくinsightが使い放題。足がつくけど。
  • urlフェチってどんなフェチやねん