自分専用のTwitterBotを作り方を完全公開します【コピペOK】

GAS/TwitterBot
この記事は約10分で読めます。

お盆の期間、皆さんはいかがお過ごしでしたでしょうか?

私は実家に1週間帰省し、その間8月前半できなかったブログの方に注力していました。

少しずつ記事が溜まってきたということで、自分の記事が埋もれないように定期的にツイートする自作ツイートBotを作りました。

今回はその作り方を完全公開していこうと思います!

【2020/7/24追記】オリジナルライブラリ作りました!

たった30行以下のコードでTwitterBotを作れるライブラリを作りました。

本記事でもBotは作れますが、初心者向けに作りやすく加工しているので是非こちらも参考にしてみてください!

【2020/3/7追記】Property store is required. が出た場合の対応

2020/02/06にGoogle Apps Scriptがアップデートされました。

具体的には「V8ランタイム」というプログラムが動くようになり、機能が拡張されました。

それによって色々とコードに修正が必要になり、現在のコードでは動きません。

このページの方法でTwitterBotを作る場合は、以下の手順で設定を直してください。

ただこれは一時的な対応になります。

いつかサポートが切れる可能性はあるので早めに手を打っておこうと思います〜💪

では、本編をどうぞ!

TwitterBotとは

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

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

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

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

そのため、自作のBotを作り、印象を少しでも良くしようと思い今回自作してみようと思い、今回行動に移しました。

今回作成したTwitterBotの構成

Googleスプレッドシートに書いた投稿内容を、定期的にGoogle Apps Scriptを使ってランダムで取得して、投稿を行います。

Googleのサービスを使用するため、Googleアカウントを用意してください。

「① 時間になったら実行」はGoogleAppsScriptに最初からある機能を使用しています。

「やること」ではコードを書くことになりますが、認証や投稿内容抽選などのプログラムは紹介するコードをコピペしてもらえればOKです!

TwitterBotを作る上で用意すること

Twitter開発者用アカウント

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

以前、Twitterの開発者アカウントを作成した記事を書いているので参考にどうぞ!

Googleアカウント

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

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

作成手順

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

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

同じ記事になるのですが、3章でキーの場所を説明していますのでメモをしておいてください。

シートを用意する

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

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

スプレッドシートが表示されたらツールからスクリプトエディタを選択します。

エディタ画面が表示されたらコード.gsに以下のコードをコピペします。

// 認証用インスタンス
var twitter = TwitterWebService.getInstance(
  'ここにTwitterのConsumerKeyを入れる',       // 作成したアプリケーションのConsumer Key
  'ここにTwitterのConsumerSecretKeyを入れる'  // 作成したアプリケーションの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 cells = sheetData.getRange(2, 1, sheetData.getLastRow() - 1, 2).getValues();
  var weightSum = 0;
  for (var i = 0, il = cells.length; i < il; i++ ) {
    weightSum += cells[i][1];
  }
  if (weightSum == 0) {
    return "";
  }
  var randomValue = weightSum * Math.random();

  var postMessage = "";
  for (var i = 0, il = cells.length; i < il; i++ ) {
    randomValue -= cells[i][1];
    if (randomValue < 0) {
      postMessage = cells[i][0];
      break;
    }
  }
  return postMessage;
}

こちらのコードは以下の記事を参考にしました。認証周りはコピペです🙏

Google Apps Script (GAS) でTwitterへ投稿するだけの機能を実装してみる - Qiita
はじめに GASを使ってみたくて何か良い題材が無いかなーと探していたところ、Twitter Bot という題材を見つけました。 ただ、もっと一番シンプルなサンプルを練習用に作ろうということで、手動でTwitterに投稿するだけ、...

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

プロジェクトキーは

1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTF

です。

Twitterアプリを編集する

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

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

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

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

CallbackURLsですが、

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

になります。スクリプトIDは「ファイル」→「プロジェクトのプロパティ」から

「情報」タブの「スクリプトID」に記載されています。

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

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

実際に動かしてみよう

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

Twitterの認証を行う

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

認証の方法は先程の記事を参考にしてください

Google Apps Script (GAS) でTwitterへ投稿するだけの機能を実装してみる - Qiita
はじめに GASを使ってみたくて何か良い題材が無いかなーと探していたところ、Twitter Bot という題材を見つけました。 ただ、もっと一番シンプルなサンプルを練習用に作ろうということで、手動でTwitterに投稿するだけ、...

投稿データを作る

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

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

今回はコピペを前提としているので、セルの場所などを細かく指定していますが、コードを書き換えて使用する際は、適宜調整してください。

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

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

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

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

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

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

今回は頻度を多くするとウザいので6時間おきに設定してみました。

まとめ

ということで今回はTwitter自動投稿botの作成方法を紹介しました。

極力画像を多めで説明したのでエンジニアではない人でも出来る内容になっていると思います。

今回自作したBotの強みは投稿に重みを付けられることです。

このおかげで、最近投稿したあの記事を多めに流したいといった調整や、リンクばかりだとウザがられるから啓蒙ツイートを8割、リンクを2割で流したいといった調整が可能です。

ぜひ挑戦してみてください〜

ここまで読んでくださりありがとうございました!

おまけ

(2020/05/25追記)順番通りにツイートするBotの作り方書きました

順番に投稿する方法が知りたいという要望にお応えして、順番通りにツイートしたい場合の作り方をまとめました。

基本はこの記事で作ったBotですが記事取得の処理を解説しております。

よろしければ参考にどうぞ〜〜

(2020/06/09追記)「いいね」や「RT」を行うBotの作り方書きました

頂いた要望に応えて「いいね」や「RT」を行うTweetBotの作り方を書きました。

ここでTwitterAPIの使い方を解説しているので参考にどうぞ!

(2020/07/05追記)複数アカウントでツイートするBotの作り方書きました

頂いた要望に応えて複数アカウントでツイートするTweetBotの作り方を書きました。

OAuthの仕組みなどにも触れているので興味があれば御覧ください!

コメント

  1. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa より:

    めちゃくちゃ助かりました。

    Property store is required. の問題が発生しており困っておりました。

    GASの知識がほぼないのですが、bot完成しました。

    ただ、一時的な対応ということで、この先が不安ですがw

    ありがとうございました。

  2. belltree より:

    Property store is required. 焦りますよね。。。
    Botを1つ作ったら十分凄いと思います!

    私もちゃんとGASの知識をつけて、一時的な対応じゃなく正しい方法を紹介できるようにしたいと思います。
    参考にして頂きありがとうございました!

  3. Shima より:

    こちらの記事を参考に自動投稿Botを作製しました。
    プログラミングの知識が疎い自分でも作成できました。ありがとうございます。
    しかし、機能をあと2つほど追加したBotを作製したいのですが、参考になるサイトや記事がうまく見つけられません。
    追加したい機能は①ランダムにツイートするものでなく、上から順番に自動で予約投稿できる機能。②Googleドライブから引っ張った画像を付けてのツイート機能です。
    もし、可能でしたら記事などにしていただけないでしょうか?
    突然の依頼に大変恐縮ですがご検討の程、よろしくお願いいたします。

    • 𝕊𝕦𝕫𝕦𝕜𝕚 より:

      ご意見ありがとうございます!
      ①ランダムにツイートするものでなく、上から順番に自動で予約投稿できる機能
      ②Googleドライブから引っ張った画像を付けてのツイート機能
      どちらも作れると思います。
      早ければ今週末に書こうと思いますので少々お待ち下さい〜

  4. saladbowl より:

    すみません。botを作成したときに、エラーが出ているのか投稿できません。
    どのようにしたらいいでしょうか」?
    Service not authorized.(行 292、ファイル「Service」、プロジェクト「OAuth1」)

    • 𝕊𝕦𝕫𝕦𝕜𝕚 より:

      自分も経験したのですが、以下の2つを試して頂きたいです。
      ① autherize() を実行してログに 『Already authorized』 が出てくるかを確認して頂きたいです!
      『Already authorized』 が出てくるようであれば、他のスプレッドシートで既に認証がされている可能性があるので、
      ② 今実行しようとしているシートで一度 reset() を実行して再度 autherize() を実行して頂きたいです。
      ①でも②でも解決しない場合、またご連絡ください〜

  5. s より:

    この様なページを作ってくれてありがとうございます。bot作りサイトはどこも有料だったりするので…。因みにですが、画像を一緒にツイートする時はどの様にすれば良いでしようか?

    • 𝔹𝕖𝕝𝕥𝕫 より:

      え、他のBot作りサイトって有料なんですか…(;´Д`)
      まぁこちらも有料ではない分、そこまで責任は追わないのでご了承ください。。(きっと有料なサイトはサポートが手厚いのでしょう…!)
      この程度でよろしければ是非今後もご活用ください!ちなみに今後も無料で情報提供していきます!

      画像を一緒にツイートする方法はまだ書いていないですね…
      ↓を参考にすれば出来ると思うのですが、複雑になりそうなので記事化検討します〜
      https://developer.twitter.com/ja/docs/media/upload-media/api-reference/post-media-upload

  6. […] 自分専用のTwitterBotを作り方を完全公開します【コピペOK】 […]

  7. […] 自分専用のTwitterBotを作り方を完全公開します【コピペOK】 […]

タイトルとURLをコピーしました