GASで指定TwitterユーザIDのfollowing一覧をスプレッドシートに書きだす。
Google Apps Script 勉強会 #1行ってきた
で書いたネタなんですが、あのときは、Twitter APIの使い方が分かっておらず、
最近フォローした100人しか取れませんでした。
が、その後色々調べているうちに、分かったので改良してみました。
ソース
function onOpen() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var menuEntries = [ {name: "Twitterフレンズ一覧", functionName: "getTwitterFriends"}]; ss.addMenu("Twitter", menuEntries); } function getTwitterFriends() { // ユーザIDを入力 var inScreenName = Browser.inputBox("ユーザIDを入力してください。"); if(!inScreenName) { return; } // スプレッドシートへの書き込み準備 var range= SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1, 1); // スプレッドのクリア range.offset(1, 0, 1000, 5).clear(); // 次ページ取得用カーソル var nextCursor = "-1"; // API呼び出し最大10回(MAX1,000件)で強制終了 for(var page=1; page<=10; page++) { var url = "http://api.twitter.com/1/statuses/friends/" + inScreenName + ".json?cursor=" + nextCursor; // TwitterからFriendsの情報を取得 var response = UrlFetchApp.fetch(encodeURI(url), getOptions_()); var resObj = Utilities.jsonParse(response.getContentText()); var users = resObj["users"]; nextCursor = resObj["next_cursor_str"]; for(var i=0; i<users.length; i++) { var anStatus = users[i]; var screenName = anStatus["screen_name"]; var name = anStatus["name"]; var friendsCount = anStatus["friends_count"]; var followersCount = anStatus["followers_count"]; var tweetsCount = anStatus["statuses_count"]; var rownum = i+1+(100*(page-1)); range.offset(rownum, 0).setValue(name); range.offset(rownum, 1).setValue(friendsCount); range.offset(rownum, 2).setValue(followersCount); range.offset(rownum, 3).setValue(tweetsCount); range.offset(rownum, 4).setValue("http://twitter.com/#!/" + screenName); } if(nextCursor === "0") { break; } } Browser.msgBox("完了しました。"); } /** * 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; }
ポイントは、
http://api.twitter.com/1/statuses/friends/taka_2.json
でfollowing一覧が取れるのですが、
ここにcursorパラメータを付けているところです。
最初は-1を渡しておいて、
二回目(二ページ目)以降は、レスポンスの"next_cursor_str"
を渡してあげると、ページング処理が行えます。
"next_cursor"だと、なんかズレたのが返ってきます。。