Hatena::Groupsubtech

冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。

 | 

Dec 06, 2012 (Thu)

Google Spread Sheet のクソ複雑で使う気がなくなるAPIを、さくっと使えるJSONP APIに変身させるたった1つの方法 21:15 はてなブックマーク - Google Spread Sheet のクソ複雑で使う気がなくなるAPIを、さくっと使えるJSONP APIに変身させるたった1つの方法 - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。

Google Spread Sheet の APIOAuthXML を使ってシートを変更するものなのですが、これが非常に使いづらい。OAuth はいいとして、XML 作ったりするのがつらい。そのうえ JavaScript だけで完結させるのが、クロスドメインXHR が必要になるので難しい。あと XML 作ったりするのがつらい。OAuth のスコープもスプレッドシート全体への変更を許してしまって、これだと粒度が大きすぎる。あと XML 作ったりするのがつらい。

ということでまとめると

  • 特定のスプレッドシートだけを外から更新したい
  • OAuth は大変めんどうかつ、特定のスプレッドシートのみ権限を与えることができない
  • Google Spread Sheet の XML API が全力で面倒

なので、

  • 特定のスプレッドシートだけを更新できる
  • クロスドメインで、JSONP を使える
  • 安全に使える

を満す API を無理矢理グーグルに作ります。社員でもないのにAPI作るとかwwww って話ですが Google Apps Script を使えば、どんな無能でもAPI作れる感じになっているのでさくっと作ってみました。

手順

  1. いじりたいスプレッドシートで [ツール] → [スクリプトエディタ…] を開く (Google ドライブの新規作成から、スクリプトを選んでもいい)
  2. スクリプトエディタに code.gs の内容をはっつける。
  3. code.gs の openById() の引数をスプレッドシートのURLの含まれる key=... にする
  4. api_key を適当感じに生成していれる ( head /dev/urandom| shasum とかする)
  5. [ファイル] → [バージョンを管理] でバージョンを生成
  6. [公開] → [ウェブアプリケーションとして導入] で導入する ([アプリケーションにアクセスできるユーザー] は [全員 (匿名ユーザーを含む)] で良い。※ 設定に関わらず dev の環境はログインしていないと叩けない)
  7. call.js みたいな感じで叩く

まとめと注意点

共通鍵である api_key のみで安全性を確保しているので、api_key が漏れないようにする必要があります。Google Apps Script 側は外にコードが公開されたりはしないのと、必ず https で配信されるので問題ありませんが、API を呼ぶ側も https にしたほうが安全です。幸いこれまた GoogleDrive のウェブ公開機能 (ルートフォルダを全世界に公開にすると、https://googledrive.com/host/FOLDER_ID でアクセスできる) を使うと https で簡単に公開できます (ファイル名自体を知られないようにする必要はあります)。

自分のサーバが全くいらないので非常に手軽でいい感じです。

 | 

スポンサード リンク

書いてる人

cho45 (佐藤広央) (www.lowreal.net)

Perl, JavaScript, Ruby, HTML, CSS, Web etc


スポンサード リンク