めも帖

「めも帖」代わりにダラダラと書いていったり、めもしたりしているだけです。

Google App EngineのデータストアをSpreadsheets Data APIを使って登録

前回「Spreadsheets Data APIを使ってGoogle App Engineのデータストアに登録 - めも帖」ということで、GoogleドキュメントにあるデーターをGoogleAppEngine(GAE)に入れるというのをしました。
今回は逆に、GoogleAppEngineのデータストアからGoogleドキュメントに入れるのを試してみました。

過程

自分のローカルにあるデータストアのデータ

これをGoogleドキュメントに入ってる

試してみて

実際に出来たんですが、ローカルでのテストなので実際の環境ではエラーが出るかも。それぐらに遅いんですよね...

ソース

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os,sys,re
import wsgiref.handlers
from google.appengine.ext import webapp

import gdata.spreadsheet.text_db
import gdata.service
import atom.service
import gdata.spreadsheet
import atom
import gdata.spreadsheet.service
import gdata.urlfetch

# model
sys.path.append('./model/')
from Railway import *

class MainHandler(webapp.RequestHandler):
	def get(self):
		document_name = 'test1'
		sheet_name = 'book'

		email    = 'xxxxxxx@gmail.com'
		password = 'xxxxxxx'
		gd_client = gdata.spreadsheet.service.SpreadsheetsService()
		gd_client.email    = email 
		gd_client.password = password 
		gd_client.ProgrammaticLogin()

		# ドキュメントを探す
		feed = gd_client.GetSpreadsheetsFeed()
		for entry in feed.entry:
			if entry.title.text == document_name:
				current_key = entry.id.text.split('/')[-1]
				break
			else:
				raise ValueError('document not found')

		# シートを探す
		feed = gd_client.GetWorksheetsFeed(current_key)
		for entry in feed.entry:
			if entry.title.text == sheet_name:
				current_worksheet_id = entry.id.text.split('/')[-1]
				break
			else:
				raise ValueError('sheet not found')

		#
		for idx, value in enumerate(('id', 'name', 'linename', 'address')):
			gd_client.UpdateCell(row=1,col=(idx + 1),inputValue=value,key=current_key,wksht_id=current_worksheet_id)

		#
		for station in Railway.all():
			entry = gd_client.InsertRow({
				'id'      : station.key().name(),
				'name'    : station.name,		
				'linename': station.linename,
				'address' : station.address,
			},current_key,current_worksheet_id)

def main():
	application = webapp.WSGIApplication(
				[
					('/test/',       MainHandler),
				], debug=True)
	wsgiref.handlers.CGIHandler().run(application)

if __name__ == '__main__':
	main()
else:
	print 'error'