Skip to content

Instantly share code, notes, and snippets.

@esperia
Created March 31, 2012 08:13
Show Gist options
  • Select an option

  • Save esperia/2260822 to your computer and use it in GitHub Desktop.

Select an option

Save esperia/2260822 to your computer and use it in GitHub Desktop.
GoogleAppsScriptでTwitterbotつくった時のソース
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