Created
March 31, 2012 08:13
-
-
Save esperia/2260822 to your computer and use it in GitHub Desktop.
GoogleAppsScriptでTwitterbotつくった時のソース
This file contains hidden or 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
| var Prop = { | |
| lastUpdate: "lastUpdate", | |
| }; | |
| /** | |
| * | |
| * Twitterへアクセスするためのオブジェクト | |
| * | |
| */ | |
| var Twitter = (function() { | |
| var options = { | |
| "oAuthServiceName": "twitter", | |
| "oAuthUseToken": "always" | |
| }; | |
| function init() { | |
| /** | |
| * Setup OAuthServiceConfig | |
| * @see https://sites.google.com/site/usakoyama/gastotwitterbot | |
| */ | |
| var oAuthConfig = UrlFetchApp.addOAuthService("twitter"); | |
| oAuthConfig.setAccessTokenUrl("https://api.twitter.com/oauth/access_token"); | |
| oAuthConfig.setRequestTokenUrl("https://api.twitter.com/oauth/request_token"); | |
| oAuthConfig.setAuthorizationUrl("https://api.twitter.com/oauth/authorize"); | |
| oAuthConfig.setConsumerKey(ScriptProperties.getProperty("twitterConsumerKey")); | |
| oAuthConfig.setConsumerSecret(ScriptProperties.getProperty("twitterConsumerSecret")); | |
| } | |
| function update(text, in_reply_to_status_id) { | |
| var options = Twitter.getOptions(); | |
| options.method = "POST"; | |
| if (in_reply_to_status_id) { | |
| options.in_reply_to_status_id = in_reply_to_status_id; | |
| } | |
| var encodedTweet = encodeURIComponent(text); | |
| var result = null; | |
| try { | |
| result = UrlFetchApp.fetch("http://api.twitter.com/1/statuses/update.json?status=" + encodedTweet, options); | |
| } catch (e) { | |
| return null; | |
| } | |
| var o = Utilities.jsonParse(result.getContentText()); | |
| Logger.log("update ----"); | |
| Logger.log(o); | |
| Logger.log(result.getResponseCode()); | |
| return o; | |
| } | |
| function home_timeline() { | |
| var options = Twitter.getOptions(); | |
| options.method = "GET"; | |
| var result = null; | |
| try { | |
| result = UrlFetchApp.fetch("http://api.twitter.com/1/statuses/home_timeline.json", options); | |
| } catch (e) { | |
| return null; | |
| } | |
| Logger.log(result.getResponseCode()); | |
| var o = Utilities.jsonParse(result.getContentText()); | |
| return o; | |
| } | |
| return { | |
| init: init, | |
| getOptions: function() { | |
| return options; | |
| }, | |
| update: function(text) { | |
| update(text); | |
| }, | |
| reply: function(text, id) { | |
| update(text, id); | |
| }, | |
| getHomeTimeline: home_timeline, | |
| }; | |
| })(); | |
| var TweetBuilder = (function() { | |
| // 非公開 | |
| })(); | |
| function cron() { | |
| var pastDate = getPastDate(); | |
| var nowDate = getNowDate(); | |
| Twitter.init(); | |
| tweetReplyHomu(pastDate, nowDate); | |
| tweetTime(pastDate, nowDate); | |
| ScriptProperties.setProperty(Prop.lastUpdate, "" + nowDate.getTime()); | |
| } | |
| function testCron() { | |
| var pastDate = getPastDate(); | |
| var nowDate = getNowDate(); | |
| Twitter.init(); | |
| tweetReplyHomu(pastDate, nowDate); | |
| tweetTime(pastDate, nowDate); | |
| ScriptProperties.setProperty(Prop.lastUpdate, "" + nowDate.getTime()); | |
| } | |
| /** | |
| * 最後に処理を行った時間を取得するー。 | |
| * でもその時間が取得出来なかったら最新の時間つかうー | |
| */ | |
| function getPastDate() { | |
| var pastTimeProp = ScriptProperties.getProperty(Prop.lastUpdate); | |
| if (!pastTimeProp) { | |
| Logger.log("prop not found. execute #getNowDate"); | |
| var nowDate = getNewestDate(); | |
| ScriptProperties.setProperty(Prop.lastUpdate, "" + nowDate.getTime()); | |
| return nowDate; | |
| } | |
| var pastTime = parseInt(pastTimeProp); | |
| pastDate = new Date(pastTime); | |
| Logger.log("pastDate: " + pastDate); | |
| return pastDate; | |
| } | |
| function getNowDate() { | |
| var result = UrlFetchApp.fetch("http://ntp-a1.nict.go.jp/cgi-bin/json"); | |
| var o = Utilities.jsonParse(result.getContentText()); | |
| var date = new Date(o.st * 1000); | |
| // Logger.log("NTP result: " + o); | |
| Logger.log("now date: " + date); | |
| return date; | |
| } | |
| /** | |
| * 時間ごとに時間+ほむほむとつぶやく | |
| * ex.) 12時39分12秒 | |
| */ | |
| function tweetTime(pastDate, nowDate) { | |
| if (pastDate.getHours() !== nowDate.getHours()) { | |
| var hours = nowDate.getHours(); | |
| tweetText = TweetBuilder.hmsDate(nowDate) + " "; | |
| tweetText += TweetBuilder.hoursComment(hours); | |
| Twitter.update(tweetText); | |
| Logger.log("tweetText: " + tweetText); | |
| } | |
| } | |
| /** | |
| * 話しかけられたらほむほむと返す関数 | |
| */ | |
| function tweetReplyHomu(pastDate, nowDate) { | |
| var homeTL = Twitter.getHomeTimeline(); | |
| for (var i = 0; i<homeTL.length; i++) { | |
| var tweet = homeTL[i]; | |
| var tweetCreatedAt = new Date(tweet.created_at); | |
| if (tweetCreatedAt.getTime() > pastDate.getTime()) { | |
| if (tweet.text.match(/^@hentai_esperia.*$/) | |
| // && tweet.user.screen_name === "esperia09" | |
| ) { | |
| var tweetText = "@" + tweet.user.screen_name + " " + | |
| TweetBuilder.hmsDate(nowDate) + " " + | |
| TweetBuilder.randomHomu(); | |
| Twitter.reply(tweetText, tweet.id); | |
| } | |
| Logger.log("Target: @" + tweet.user.screen_name + ": " + tweet.text); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment