insightとかinsightとかapiが公開されていないGoogleサービスにpythonでログインする方法をメモ。
その他のサービスは素直に gdata-python-client を使ったほうがイイ。
手順は以下の通り
- ログインするアカウントのメールアドレスとパスワードを https://www.google.com/accounts/ClientLogin へ POST する。
- 認証に成功するとセッションIDがレスポンスとして返る。
- セッション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フェチってどんなフェチやねん