GUIビルダー使ってTwitterクライアントもどき

暑さには弱いです。Google Apps Scriptの季節です。

GUI Builder

function initTwitter() {
  var oAuthConf = UrlFetchApp.addOAuthService("twitter");
  oAuthConf.setAccessTokenUrl("http://api.twitter.com/oauth/access_token");
  oAuthConf.setRequestTokenUrl("http://api.twitter.com/oauth/request_token");
  oAuthConf.setAuthorizationUrl("http://api.twitter.com/oauth/authorize");
  oAuthConf.setConsumerKey("アレ");
  oAuthConf.setConsumerSecret("アレ");
}

function getLatestTweet() {
  var options = {
    "oAuthServiceName": "twitter",
    "oAuthUseToken": "always",
    "method": "GET"
  };
  var result = UrlFetchApp.fetch("http://api.twitter.com/1/statuses/home_timeline.json", options);
  var o = Utilities.jsonParse(result.getContentText());
  
  var tw = [];
  for(var i = 0; i < 5; i++) {
    tw[i] = {"url": o[i]["user"]["profile_image_url"], "tweet": o[i]["text"]};
  }
  
  return tw;
}

// スプレッドシートで表示するとき呼ぶ
function showGui(url, tweet) {
  var app = UiApp.createApplication();
  app.add(app.loadComponent("MyTwitter"));
  
  var text = app.getElementById("text1");
  //text.setText(tweet);
  var icon = app.getElementById("icon1");
  //icon.setUrl(url);
  
  SpreadsheetApp.getActiveSpreadsheet().show(app);
  return app;
}

function myTwitter() {
  initTwitter();
  var twi = getLatestTweet();
  showGui(twi.url, twi.tweet);
}

// サービスとして公開するとき呼ぶ
function doGet() {
  var app = UiApp.createApplication();
  app.add(app.loadComponent("MyTwitter"));
  
  initTwitter();
  var twi = getLatestTweet();
  
  for(var i = 0; i < twi.length; i++) {
    var text = app.getElementById("text" + (i+1));
    var icon = app.getElementById("icon" + (i+1));
    text.setText(twi[i].tweet);
    icon.setUrl(twi[i].url);
  }
  
  return app;
}

サービスとして公開したらこうなります。 https://spreadsheets.google.com/macros/exec?service=AKfycbxCqvY-oTA4DsC75d1M1QYBkeSGvhy2yi0

KarotzのWebAPIをたたく

  1. アプリケーションの作成
  2. アプリケーションの登録
  3. interactiveIDの取得
  4. Web APIたたく

Web APIをたたくだけですがアプリケーションを作る必要があります。interactiveIDを取得するためです。

アプリケーションの作成

まず、descriptor.xmlを書いていきます。最小はこんな感じ。

<descriptor>
   <version>0.0.1</version>
   <accesses>
       <access>tts</access>
    </accesses>
    <deployment>external</deployment>
    <callback>http://...</callback>
</descriptor>
  • ここで指定したにinteractiveIDがついたHTTPリクエストが飛んでくるのでそのリクエストを取得できるURLを指定してください。(自分でサーバたてんのめんどくせって方はなんでもおk。ブラウザから取得できるので。)
  • Webアプリかそうでないかはの値で決まります。またの値に指定した機能のみWebから呼び出せます。(ここではKarotzにしゃべらせれる機能のみ使える。)
  • 各値の詳しい説明はこちら http://dev.karotz.com/dev/register_app.html#descriptor-xml

アプリケーションの登録

  1. http://www.karotz.com/lab/app/form からアプリケーションを追加
  2. ぱぱぱっと済ませて http://www.karotz.com/lab/app/dashboard にアクセスするとアプリが追加されてるはずです。
  3. 「Add a new version」から、さっき作ったdescriptor.xmlをzip圧縮したものをアップロード
  4. 「Test!」であなたのKarotzにインストール

interactiveIDの取得

  1. http://www.karotz.com/authentication/run/karotz/部をdashboardページにあるAPI Keyに置き換えてアクセス
  2. リダイレクトされます。URL欄をみるとinteractiveIDがついてるのが確認できるでしょうか。

これで大仕事はおしまいです。interactiveIDはテキストエディタにでもメモしときましょう。

Web APIたたく

さあここからはあなたの独断場です。びしびしたたいてあげましょう。ここまできたあなたをうさぎは暖かく受け入れるでしょう。(たぶん)

  • 例えば、

http://api.karotz.com/api/karotz/tts?action=speak&lang=EN&text=hello%20world&interactiveid=
にアクセスするとおなじみHello Worldと喋ってくれます。野太い声で。

// Karotz流行るといいな

うさぎガジェットKarotzが届いた

f:id:grapswiz:20110511112521j:image
新しいおもちゃが届きました。かわいいうさぎです。右のほう(左はNabaztag

Karotzって?

二うさぎ間通話ができます。RSSしゃべります。話しかけてきます。内蔵カメラで勝手に撮影されます。つぶやき読みます(白いのとか青いのとかなんか目じゃない!)。すべてWeb APIでも操作できます。

まずは買ってみよう

なにをするにもまずは買いましょう。人柱でも何でもいいです。置いとくだけで癒されますから。

今ならなんとRFIDチップ一つもらえます。こっちもうさぎです。1.5倍癒されますね。
こういう輸入ガジェットでKarotz storeがすごいのは標準で日本に配送してくれることです。

届いたら

まず説明書を読みましょう。本体だけでは全く謎です。 plug.karotz.com にアクセスすれば解決しますが。
セットアップが終われば後は好き放題です。http://www.karotz.com/appz/home から好きなアプリをインストールしたり延々と話しかけたり。

開発者には

Web APIJavaScript SDKが用意されています(http://dev.karotz.com 参照)

テスト(2)

1.2 Assertion

1.3.1 Setup and Teardown

  • xUnit FrameworkではsetUpメソッドとtearDownメソッドが用意されている
  • テストデータのセットアップ(オブジェクトや変数の定義など)を一括管理できる
  • setUpはテストの前、tearDownはテストの後で呼び出される

1.4 Integration Tests

  • 車の組立工程を例にする。Unit testは車輪や窓がきちんと動作するか確かめること。Integration testは車が車として機能するか確かめること。

Test-Driven JavaScript Development (Developer's Library)

Test-Driven JavaScript Development (Developer's Library)

テスト(1)

テストとは

  • テストの結果と期待する出力を比較

テストを書くのはこんなとき

  • 実装ができたとき、正しい振る舞いであることを確認するため
  • 実装が変わったとき、その振る舞いが変わらないことを確認するため
  • 新しいユニットがシステムに追加されたとき、あいかわらず目的を満たすことを確認するため

テストの意義から勉強していって気分を高めるところから。

Test-Driven JavaScript Development (Developer's Library)

Test-Driven JavaScript Development (Developer's Library)