プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやる

Google Apps Script 勉強会 #1行ってきた

スクリプトをコピーして作ったのが、
ツイッターであるユーザがフォローしている人の一覧をスプレッドに出すというもの。
ユーザのフォロー数と、フォロワー数もついでに出力します。


が、

という、アプリのバグなのか、Twitter APIのバグなのか、
pageパラメータが無視され、1ページ目しか取れないという、良く分からない事象に遭遇し、
(たぶん)最近フォローした、100人だけ出るようになってます。

実行結果


ソース

function test() {
  // スクリーン名を入力
  var inScreenName = Browser.inputBox("スクリーン名を入力してください。");
  if(!inScreenName) {
    return;
  }
  
  for(var page=1; page<=2; page++)
  {
    var url = "http://api.twitter.com/1/statuses/friends/" + inScreenName + ".json?page=" + page;
  
    // TwitterからFriendsの情報を取得
    var response = UrlFetchApp.fetch(encodeURI(url), getOptions_());
    var status = Utilities.jsonParse(response.getContentText());

    // スプレッドシートへの書き込み準備
    var range= SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1, 1);
      
    for(var i=0; i<status.length; i++) {
      var anStatus = status[i];
      var screenName = anStatus["screen_name"];
      var friendsCount = anStatus["friends_count"];
      var followersCount = anStatus["followers_count"];
    
      range.offset(i+1+(100*(page-1)), 0).setValue(screenName);
      range.offset(i+1+(100*(page-1)), 1).setValue(friendsCount);
      range.offset(i+1+(100*(page-1)), 2).setValue(followersCount);
      range.offset(i+1+(100*(page-1)), 3).setValue("http://twitter.com/#!/" + screenName);
    }
  }
}

/**
 * UrlFetch用のオプションを指定します。
 */
function getOptions_() {
    // スクリプトプロパティを取得
    var CONSUMER_KEY = ScriptProperties.getProperty("CONSUMER_KEY");
    var CONSUMER_SECRET = ScriptProperties.getProperty("CONSUMER_SECRET");
  
    var oAuthServiceName = "twitter";
  
    // OAuthServiceConfigの設定
    var oAuthConfig = UrlFetchApp.addOAuthService(oAuthServiceName);
    oAuthConfig.setAccessTokenUrl("http://twitter.com/oauth/access_token");
    oAuthConfig.setRequestTokenUrl("http://twitter.com/oauth/request_token");
    oAuthConfig.setAuthorizationUrl("http://twitter.com/oauth/authorize");
    oAuthConfig.setConsumerKey(CONSUMER_KEY);
    oAuthConfig.setConsumerSecret(CONSUMER_SECRET);
  
    // UrlFetchAppに渡すオプションの設定
    var options = {
        "method" : "get",
        "oAuthServiceName" : oAuthServiceName,
        "oAuthUseToken" : "always",
  };
  
  return options;
}

動作させるには、スクリプトのプロパティに対して、
CONSUMER_KEYとCONSUMER_SECRETを定義してあげる必要があります。