Created
July 3, 2012 17:15
-
-
Save shikajiro/3041123 to your computer and use it in GitHub Desktop.
Google SpreadsheetをJSONを返すダミーサーバーとして利用する方法
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### | |
GoogleShpreadsheetのシートに記述されたデータをDBのテーブルに見立て取得し、 | |
JSONに変換するスクリプト。 | |
このソースはTitanium Mobileを想定しているが、コンバートの処理は流用できる。 | |
テストに使用しているShpreadsheetは以下 | |
https://docs.google.com/spreadsheet/ccc?key=0AuCUD7G5hGZrdGlBbHBDVElfUXdsbWRkRThVcmdCalE | |
条件:1行目をカラム名にすること | |
LEFT JOINなどの処理は別途本気出して実装する必要あり。 | |
サンプルとして、テーブル間をidで連携させたJSONを返している。 | |
@author shikajiro | |
### | |
module.exports = ()-> | |
url = "https://spreadsheets.google.com/feeds/cells/%s/%s/public/values?alt=json" | |
### | |
ここに利用するspreadsheetのIDを記載する。idはspreadsheetのリンクに表示される文字列。 | |
### | |
sheetId = "0AuCUD7G5hGZrdGlBbHBDVElfUXdsbWRkRThVcmdCalE" | |
self = this | |
convertTable = (spreadsheet)-> | |
# 配列の構造 | |
# records[row][col] | |
# keys[col] | |
records = [] | |
keys = [] | |
for entry in spreadsheet.feed.entry | |
row = parseInt(entry.gs$cell.row) | |
col = parseInt(entry.gs$cell.col) | |
if row == 1 | |
key = entry.content.$t | |
keys[col-1] = key | |
else | |
records[row-2] = {} unless records[row-2] | |
value = entry.content.$t | |
records[row-2][keys[col-1]] = value | |
records | |
# HTTPでspreadsheetにアクセスする | |
# Titanium依存しているので、プラットフォームに合わせて書き換えてください。 | |
request = (url, callback)-> | |
client = Ti.Network.createHTTPClient | |
onload:(e)-> | |
table = convertTable JSON.parse this.responseText | |
Ti.API.info "get table : "+ JSON.stringify(table) | |
callback table | |
onerror:(e)-> | |
Ti.API.info e.error | |
client.open 'GET', url | |
client.send() | |
#それぞれのテーブルのJSONを返す。 | |
self.requestGetUser = (callback)-> | |
### | |
'od6'の部分がシートになる。 | |
1番目のシートはod6だが、それ以降は不定。 | |
ブラウザで一度確認する必要あり。 | |
### | |
request Json.format(url,sheetId,'od6'), callback | |
self.requestGetArticle = (callback)-> | |
request Json.format(url,sheetId,'od7'), callback | |
self.requestGetComment = (callback)-> | |
request Json.format(url,sheetId,'od4'), callback | |
### | |
テーブルを複合したJSONを帰す | |
shreadsheetのapiはLEFT JOINなどはできないので、実装でごまかす。 | |
サンプルとして、テーブル間をidで連携させたJSONを返している。 | |
### | |
self.requestGetTimeline = (callback)-> | |
self.requestGetArticle (articles)-> | |
self.requestGetComment (comments)-> | |
blogs = [] | |
for article in articles | |
article.comments = [] | |
article.comments.push c for c in comments when article.id == c.article_id | |
blogs.push article | |
callback blogs | |
self |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment