All Articles

GASでTwitter Bot (ワンパンマン更新Bot)作りました

GASでTwitter Botを作りました。今回はそれのメモです。(コードは下に有り)

まずは前回の記事の通り、GASのプロジェクトを作ります。

GAS サイトの更新をメールでお知らせシステムを作りました

次にTwitter AppsにBot機能を取り込みたいアカウントでログインします。別でBotアカウントを作りたいときは、新しくアカウントを作っておく必要があります。その際、電話番号認証が後から必要になるので、最初から電話番号で登録するのが良いです。

自分が管理しやすい名前でTwitter Apps名を決め、その説明を簡単に書きます。(アカウントの説明ではない。下の画像の説明は間違えている。)GASでファイル>>…プロパティ>>スクリプトIDを取得。そしてCallBackIDにこんな感じ↓で登録。

https://script.google.com/macros/d/ここにスクリプトID/usercallback

d6538aa0ddf8847b49e1c4176a5ad2bf

完了したら、Keys and Access Tokensにある、Consumer Key と Consumer Secretをメモしておきます。

ed0ea5e0516badfde04b202da997c972

次にGASにTwitterライブラリを導入します。リリース>>ライブラリです。その後このid(1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTF)で検索します。そいで導入します。

8b4834004a2e22ae1a8cfbfbdfd49959

次にGASのスクリプトに以下のコードを導入します。

// OAuth1認証用インスタンス  
var twitter = TwitterWebService.getInstance(  
‘Consumer Key (API Key),  
‘Consumer Secret (API Secret));  
// 認証を行う(必須)  
function authorize() {  
twitter.authorize();  
}

// 認証をリセット  
function reset() {  
twitter.reset();  
}

// 認証後のコールバック(必須)  
function authCallback(request) {  
return twitter.authCallback(request);  
}

// タイムラインを取得  
function getUserTimeline() {  
var service = twitter.getService();  
var response = service.fetch(‘https://api.twitter.com/1.1/statuses/user\_timeline.json’);  
Logger.log(JSON.parse(response));  
}

// ツイートを投稿  
function postUpdateStatus(volumes) {  
var service = twitter.getService();  
var response = service.fetch(‘https://api.twitter.com/1.1/statuses/update.json’, {  
method: ‘post’,  
payload: { status: targetName + “\[第” + volumes + “話\]の更新がありました! ”+ targetUrl }  
});  
Logger.log(JSON.parse(response));  
}

その後authorize()で認証します

エラーなく実行されたら表示>>ログからurlを取得します。その後、そのurlを開いて認証完了です。(successという文字が出ます。)

あとは頑張れ!GASの標準機能の関数の定期実行を設定すればおk。

参考サイトはこちら

全体のコード

var targetName=”ワンパンマン”;  
var targetUrl=”http://tonarinoyj.jp/episode/13932016480028985383;  
var mailAddress=”example@gmail.com”;

// OAuth1認証用インスタンス  
var twitter = TwitterWebService.getInstance(  
‘Consumer Key (API Key),  
‘Consumer Secret (API Secret));

//メイン関数  
function detectChange(){

//スプレッドシートの取得&アクティブ化  
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();  
var sheet = spreadSheet.getActiveSheet();

//使用セル指定  
var cellA1 = sheet.getRange(A1);  
var cellA2 = sheet.getRange(A2);

//過去の情報取得  
var before = cellA1.getValue();  
var volumes = cellA2.getValue();

//urlの先の情報  
var response = UrlFetchApp.fetch(targetUrl); //httpレスポンス  
var now = response.getContentText(UTF-8); //現在のテキスト  
now = now.substring(now.indexOf(“xxx”),now.indexOf(“xxx”));

//更新処理  
if(before !== now){  
//セルの値を更新  
cellA1.setValue(now);

volumes++;  
cellA2.setValue(volumes);

postUpdateStatus(volumes);  
mailMe(volumes);

Logger.log(“更新有り”);  
}

else{  
//mailMeElse(volumes);  
Logger.log(“更新無し”);  
}

}

//更新通知メール  
function mailMe(volumes){  
MailApp.sendEmail(  
mailAddress, //宛先  
targetName+”\[第”+ volumes +”話\]の更新通知”, //タイトル  
targetName + “(” + targetUrl + “)が更新されたよ!”  
);  
}

//更新無し通知メール  
function mailMeElse(volumes){  
MailApp.sendEmail(  
mailAddress,  
“更新無し”,  
“更新無しだよ!” + targetName + “\[第” + volumes + “話\]の更新がありました! ”+ targetUrl  
);  
}

//以下Twitter用

// 認証を行う(必須)  
function authorize() {  
twitter.authorize();  
}

// 認証をリセット  
function reset() {  
twitter.reset();  
}

// 認証後のコールバック(必須)  
function authCallback(request) {  
return twitter.authCallback(request);  
}

// タイムラインを取得  
function getUserTimeline() {  
var service = twitter.getService();  
var response = service.fetch(‘https://api.twitter.com/1.1/statuses/user\_timeline.json’);  
Logger.log(JSON.parse(response));  
}

// ツイートを投稿  
function postUpdateStatus(volumes) {  
var service = twitter.getService();  
var response = service.fetch(‘https://api.twitter.com/1.1/statuses/update.json’, {  
method: ‘post’,  
payload: { status: targetName + “\[第” + volumes + “話\]の更新がありました! ”+ targetUrl }  
});  
Logger.log(JSON.parse(response));  
}