GAS

自分専用のTwitterBotを作って事前に定義したつぶやきを順番につぶやかせる

TwitterBotとは

定期的にTwitterに投稿を行うBotサービスのことを言います。

有名なサービスを挙げると、Twittbotなどが挙げられます。

Twittbotを使用すると投稿の投稿経路にそのサービスが残るため、「あぁ、このアカウントはBotか…」と思われ、敬遠されがちです。

ただTwittBotの効果は大きく、定期的に投稿を行うアカウントはFollowerも定着します。

そのままTwittbotを使ってもいいのですがそれでは能がないのと、Twittbotがサービス終了した場合に困ってしまうので、

自作のBotを作ることにしました。

TwitterBotを作る上で用意するもの

Twitter開発者用アカウント

まずはTwitterに投稿するアカウントが必要です。

開発者用アカウントとする必要があるのでこちらから必要な手続きを行ってください。

Googleアカウント

今回はGoogleスプレッドシートを使ったツールなので、Googleアカウントが必須です。

今使っているアカウントがあればそれを使ってもらって問題ありません。

作成手順

Twitterアプリを作りキーを確認する

Twitterに投稿するためには投稿の処理元が自分自身であることを証明するキー(customer keyとcustomer secret key)が必要です。

TwitterのDeveloper portalからbot用のアプリを一つ作成し、[keys and tokens]の[Customer keys]でcustomer keyとcustomer secret keyを確認します。

この2つは一度ブラウザ内に表示されたら2度と表示することはできません。失念してしまった場合は、再生成となりますので注意深く保管してください。

Googleスプレッドシートを1つ用意する

まずはGoogleスプレッドシートを新しく作りましょう。

Googleドライブのページの左上の[新規]からGoogleスプレッドシートを選択します。

スプレッドシートが表示されたら[拡張機能]から[Apps Script]を選択します。

エディタ画面が表示されたらコード.gsに以下のコードをコピペします。既に入力されているmyfunction()関数は消してしまってよいです。

// 認証用インスタンス
var twitter = TwitterWebService.getInstance(
  'YOUR CONSUMER KEY',       // 作成したアプリケーションのConsumer Key
  'YOUR CONSUMER SECRET'  // 作成したアプリケーションのConsumer Secret
);

// 認証
function authorize() {
  twitter.authorize();
}

// 認証解除
function reset() {
  twitter.reset();
}

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

// セルを取得
var sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); // 「シート1」はシート名
var postMessageCell = sheetData.getRange(2, 2); // セルの位置。縦横それぞれ1~の番号で指定できる

// ツイートを投稿
function postUpdateStatus() {
  var message = pickUpTweet();
  if (message == "") {
    return;
  }
  var service  = twitter.getService();
  var response = service.fetch('https://api.twitter.com/1.1/statuses/update.json', {
    method: 'post',
    payload: { status: message }
  });
}

/**
* ツイートを順番に選択する処理
* 処理の中で前回の番号を保持していくことは出来ないので
* 投稿された回数をシートに保存しておき、一番投稿された回数が少ない記事を次の記事にする
**/
function pickUpTweet() {
  var titleRow = 1; // 『投稿内容』とか書いている部分の行数
  var startRow = 1 + titleRow; // 1行目は『投稿内容』とか書いているので2行目から
  var startCol = 1;
  var endRow = sheetData.getLastRow() - titleRow; // 最後の行まで(2行目から始まっているので-1している)
  var endCol = 3; // 『投稿回数』の列までなので3列目まで
  
  // 投稿を一括で取得する
  var cells = sheetData.getRange(startRow, startCol, endRow, endCol).getValues();
  
  // ちなみにcellsの中身は
  // [ [ '投稿内容', 'URL', '投稿回数'] ,  [ '投稿内容','URL',  '投稿回数'] ,  [ '投稿内容','URL',  '投稿回数'] ,....,] 
  // という形式になっている
  
  var postData = cells[0]; // postData = [ '投稿内容', 'URL', '投稿回数'] なので postData[0] => 投稿内容, postData[1] => URL, postData[2] => URL,  
  var row = 1 // 行番号(選ばれたらその行の投稿された回数を+1するために持っておく)
  for (var i = 0, il = cells.length; i < il; i++ ) {
    // 投稿回数が少なかったら更新(回数が同じであればそのまま)
    if (cells[i][2] < postData[2]) {
      postData = cells[i]
      row = 1 + i // 行は1から始まるので+1して保存しておく
    }
  }
  var postMessage = postData[0] + " " + postData[1];
  
  // 投稿する内容の投稿回数の部分のセルだけ取得して、+1して更新する
  var updateCell = sheetData.getRange(row + titleRow, 3, 1, 1);
  updateCell.setValue(postData[2]+1);
  
  return postMessage;
}

 

コードはこちらの記事を参考にしました。

続いて、Twitterの機能を呼び出す便利関数をまとめたライブラリをインストールします。

[ライブラリ]の横の[+]をクリックしてください。

スクリプトIDには

1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTF

をそのままコピペして入力してください。

Twitterアプリを編集する

最後にTwitterアプリを調整します

具体的に調整するポイントは2点です

  • App name が意図したものになっているか
  • CallbackURLsをGoogleAppsScriptにしているか

です。実際の設定を下に添付しているのでご覧ください。

CallbackURLsですが、

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

になります。

スクリプトIDは[プロジェクトの設定]をクリックすると確認することができます。

これらを確認したらTwitterの設定は保存してください。

これで準備は完了です。実際に動かしてみましょう!

実際に動かしてみよう

それでは実際に動かしてみます。

Twitterの認証を行う

基本的には下記画像のように機能を選んで再生ボタンを押すことで実行されます。

authorize関数を選んで[▶︎実行]を押しましょう。

そうすると下にログが表示され、twitterのURLが表示されます。

このURLをブラウザで呼び出すとアクセス許可を促す画面が表示されます。ここで、botとして呟かせたいtwitterアカウントでログインする必要があります。

投稿データを作る

認証が終わったら実際に投稿を行うのですが、投稿用のデータを作る必要があります。

データは最初に作ったスプレッドシートに記入していきます。

今回は、スプレッドシートに

  • A列:投稿内容
  • B列:投稿URL
  • C列:投稿回数

を用意しました。投稿回数が同じになるように上から順番にTwitterにつぶやきを書き込むようなプログラムになっています。

つぶやきには、「投稿内容」と「投稿URL」の文字列を連結したものを書き込みます。

最後に postUpdateStatus を実行して実際に投稿されているのを確認できれば成功です!

自動的に投稿するように設定を行う

最後に自動でBotが動くように設定を行います。

スクリプトエディタのタイマーボタンを選択してトリガーを作成します。

遷移したあと右下に「トリガーを追加」というボタンが出ていると思うので選択して以下のダイアログを表示させます。

イベントのソースを選択を時間主導型に設定しておくことで時間経過による実行が可能です。

今回は、4時間おきにつぶやきをするような設定にしました。

手順は以上です!これで4時間おきに、スプレッドシートに書かれた文章を自動で呟くようにすることができました。

-GAS

© 2022 かずのアプリときどきキャンプ飯 Powered by AFFINGER5