PythonからGoogle Music Betaを叩く

まだ途中。とりあえずログインから情報を取得するまで。
PyAmazonCloudDriveみたいにライブラリ化したいけど、そこまでの馬力がない。。。

#!/usr/bin/env python

import sys,re
import urllib,urllib2,cookielib
import xml.dom.minidom


if len(sys.argv)!=3:
  sys.stderr.write("%s EMAIL PASSWD\n"%sys.argv[0])
  sys.exit(2)

_,email,passwd=sys.argv
#print email,passwd

urls=[
  "http://music.google.com/",
  "http://music.google.com/music/listen",
  "http://music.google.com/music/services/loadalltracks?u=0&xt=%s",
]

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

res=opener.open(urls[0])
body=re.sub(r"\s{2,}"," ",res.read())
form=re.search("<form.*?</form>",re.sub(r"\r|\n"," ",body)).group()
inputs="\n".join(re.findall("<input .*?/>",form))
dom=xml.dom.minidom.parseString(
  re.match("<form.*?>",form).group()+inputs+"</form>")

urls.append(dom.getElementsByTagName("form")[0].getAttribute("action"))

params={}
for tag in dom.getElementsByTagName("input"):
  params[tag.getAttribute("name")]=tag.getAttribute("value")

params["Email"]=email
params["Passwd"]=passwd

#print params

res = opener.open(urls[-1],urllib.urlencode(params))
#print res.code
#print res.read()

res = opener.open(urls[1])

#print res.code
xt_cookie=cj._cookies["music.google.com"]["/music"]["xt"]
#print xt_cookie
xt=xt_cookie.value
#print xt


res = opener.open(urls[2]%xt,urllib.urlencode({"json":"{}"}))
#print res.code
print res.read()

使い方

administrator@CF-T4 ~ $ ./test1_googlemusic.py 
./test1_googlemusic.py EMAIL PASSWD
administrator@CF-T4 ~ $ ./test1_googlemusic.py someone@gmail.com YourPassword