2008年6月3日火曜日

Google Spreadsheets Data API

Google Spreadsheets Data API

overview

1. gdata-python-client をダウンロード
http://code.google.com/p/gdata-python-client/
 内容 http://gdata-python-client.googlecode.com/svn/trunk/src/gdata/spreadsheet/

2. gdata.py-1.0.13.zip を c:\work に展開
cd c:\work\gdata.py-1.0.13
c:\python25\python setup.py install
(C:\Python25\Lib\site-packages\gdata が作成される)
3. http://code.google.com/apis/spreadsheets/developers_guide_python.html
の内容を参照するより、overview のビデオをみた感じでは、
  C:\Python25\Lib\site-packages\gdata\spreadsheet\text_db.py
  内のコメントを参照した方が早い。
  実際、コマンドラインからの3行だけでシートが作成できた。

c:\python25\python
import gdata.spreadsheet.text_db
client = gdata.spreadsheet.text_db.DatabaseClient(username='jo@example.com', \
password='12345)
database = client.CreateDatabase('My Text Database')
http://docs.google.com/?hl=ja&tab=wo#all












table = database.CreateTable('addresses', ['name','email','phonenumber', 'mailingaddress'])

record = table.AddRecord({'name':'Bob', 'email':'bob@example.com', \
'phonenumber':'555-555-1234', 'mailingaddress':'900 Imaginary St.'})
record = table.AddRecord({'name':'Bob', 'email':'bob@example.com', \
'phonenumber':'555-555-1234', 'mailingaddress':'900 Imaginary St.'})
record.content['email'] = 'bob2@example.com'
record.Push()
 



列名に _ アンダーバーがあると書き込みができないので注意
× mail_address
 mailaddress


---


database = client.CreateDatabase('My Text Database') ごとに新しいファイルが同じ名前で作成されてしまう。
既存のファイルにシートを追加するのは
GetDatabases で、 これにはファイル名でなく、そのkeyが必要。
database = client.GetDatabases('o07694147574308797724.289928492545294217')
この keyというのは
http://spreadsheets.google.com/feeds/spreadsheets/private/full
でファイルのリストが xml で表示されるので、この中身から取得することができる。

読み出しの方はgdata.spreadsheet.text_db では GetRecord でのデータを取り出しが、なぜかうまくいかないのでやり方を変えた。
wksht_id では苦労した。

import gdata.service
import atom.service
import gdata.spreadsheet
import atom
import gdata.spreadsheet.service
import string
gd_client = gdata.spreadsheet.service.SpreadsheetsService()
gd_client.email = 'xxxx@xxx.com'
gd_client.password = 'xxxx'
gd_client.ProgrammaticLogin()

key ='o07694147574308797724.289928492545294217'
feed = gd_client.GetWorksheetsFeed(key)
#input = raw_input('\nSelection: ')
input = '0'
print feed.entry[string.atoi(input)].id.text.rsplit('/', 1)[1]

for i, entry in enumerate(feed.entry):
if isinstance(feed, gdata.spreadsheet.SpreadsheetsCellsFeed):
print '%s %s\n' % (entry.title.text, entry.content.text)
elif isinstance(feed, gdata.spreadsheet.SpreadsheetsListFeed):
print '%s %s %s\n' % (i, entry.title.text, entry.content.text)
else:
print '%s %s\n' % (i, entry.title.text)


def PrintFeedRow(feed):
ii = 1
for i, entry in enumerate(feed.entry):
if isinstance(feed, gdata.spreadsheet.SpreadsheetsCellsFeed):
if ii <> int(entry.cell.row):
ii = int(entry.cell.row)
print "---" # put
print '%s %s %s %s' % (i, entry.title.text, entry.content.text, entry.cell.row)
# A.(entry.title.text) = entry.content.text


wksht_id = 'od6'
feed = gd_client.GetCellsFeed(key, wksht_id)

PrintFeedRow(feed)

Migration Python2.7への移行

1. 以前のプログラムのソースをダウンロードして、 app.xml を変更して deployする 503 python -V // まず Mac にインストールされている python のバージョンを確認 504 pwd 505 curl https://sdk.cl...