Google AppengineのAPIクオータを確認するためのPythonスクリプトを書きました

appengine sdkを探してもそういうモジュールを見つけられなかったので、mechanizeとBeautifulSoupを使ってAPIの状態を確認するスクリプトを書きました。
これでAPIクオータ監視ができるようになりました。以下、ソースコード

#! /usr/bin/python2.7
# coding: utf-8

# monitor appengine api status from 'Quota Details' page on your appengine dashboard.

import urllib
import mechanize
from BeautifulSoup import BeautifulSoup 


def setup_browser():
    b = mechanize.Browser()
    b.set_handle_equiv(True)
    #b.set_handle_gzip(True)
    b.set_handle_redirect(True)
    b.set_handle_referer(True)
    b.set_handle_robots(False)
    b.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
    
    return b

def parse_response(fp):
    status = {}
    
    soup = BeautifulSoup(fp)
    a = soup.findAll('table', {'class': 'ae-table ae-table-striped '})[0]
    for tr in a.findAll('tbody')[0].findAll('tr'):
        tds = tr.findAll('td')
        topic = tds[0].text
        usage = tds[2].text
        count = tds[3].text.replace('\n', '')
        stat  = tds[4].text
        status[topic] = (usage, count, stat)

    return status

def analyze_api_status(url, email, passwd):
    # setup
    browser = setup_browser()
    # login
    browser.open(url)
    browser.select_form(nr=0)
    browser.form['Email'] = email
    browser.form['Passwd'] = passwd
    browser.submit()
    # parse
    status = parse_response(browser.response())
    return status

# url like https://appengine.google.com/dashboard/quotadetails?&app_id=<appid>&version_id=<vid>
url = ''
# account
email = '<account email>'
passwd = '<account pasword>'
status = analyze_api_status(url, email, passwd)
for k in status:
    print k,status[k]

"""sample output:
Datastore Entity Delete Ops (u'', u'0', u'Okay')
Number of Indexes (u'11%', u'22of 200', u'Okay')
Blobstore API Calls (u'', u'0', u'Okay')
Datastore Write Operations (u'100%', u'0.05of 0.05Million Ops', u'Limited')
Datastore Queries (u'', u'0', u'Okay')
Datastore Small Operations (u'0%', u'0.00of 0.05Million Ops', u'Okay')
Datastore Entity Put Ops (u'', u'800', u'Okay')
Datastore Stored Data (u'44%', u'0.44of 1.00GBytes', u'Okay')
Blobstore Stored Data (u'0%', u'0.00of 5.00GBytes', u'Okay')
Datastore Index Write Ops (u'', u'50,136', u'Okay')
Data Sent to Datastore API (u'', u'0.00GBytes', u'Okay')
Datastore Entity Fetch Ops (u'', u'4,406', u'Okay')
Code and Static File Storage (u'0%', u'0.00of 1.00GBytes', u'Okay')
Datastore Query Ops (u'', u'270', u'Okay')
Datastore Id Allocation Ops (u'', u'0', u'Okay')
Prospective Search Subscriptions (u'0%', u'0of 10,000', u'Okay')
Datastore Read Operations (u'9%', u'0.00of 0.05Million Ops', u'Okay')
Datastore API Calls (u'', u'350', u'Okay')
Data Received from Datastore API (u'', u'0.00GBytes', u'Okay')
Datastore Key Fetch Ops (u'', u'0', u'Okay')
"""