自分専用の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の機能を呼び出す便利関数をまとめたライブラリをインストールします。

プロジェクトキーは

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 という題材を見つけました。ただ、もっと一番シンプルなサンプルを練習用に作ろうということで、手動で…

投稿データを作る

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

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

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

最後に 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. めちゃくちゃ助かりました。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. こちらのサイトを参考に作らせてもらいました!
    ですがスプレッドシートに書き込みそこから投稿する方法はいまいち理解できません
    教えていただけたら助かります

  9. こんにちは、参考にさせていただいております。ありがとうございます。
    一つ質問があるのですが、<実際に動かしてみよう>の「投稿データを作る」まで進んだのですが、postUpdateStatusを実行しようとしたときに、以下のエラーが出ます。

    https://api.twitter.com のリクエストに失敗しました(エラー: 401)。サーバー応答の一部: {“request”:”\/1.1\/statuses\/update.json”,”error”:”Read-only application cannot POST.”}(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 443、ファイル「Service」、プロジェクト「OAuth1」)

    AppがRead-onlyの設定になっているため、自動ツイートできないという意味だと思いますが、Twitter DevelopersのページでAppの設定をRead and writeに変更しても、エラーが変わりません。アクセストークンを更新しても同じです。

    他に更新すべき箇所があるのでしょうか?教えていただけると幸いです。

    • 参考にして頂きありがとうございます!

      > Read and writeに変更しても、エラーが変わりません。
      対応はあっています。その後に一度 reset で認証を解除して、もう一度 authorize して頂けますか?

      一度認証すると、認証した “その時のアプリ” の鍵をスプレッドシート側で保存してしまうため、アプリ側を更新しても反映してくれなかったのだと思います。
      お試し頂いて上手く動かなかった場合、またご連絡ください!

  10. お返事いただきありがとうございます。
    resetしてauthorizeし直したら、無事動くようになりました。
    ありがとうございます!

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

  12. 認証して直後は普通にツイートできるのですが、一度ブラウザを閉じると数分後にエラー401が出てきます

    • もう少し詳しい状況が欲しいですね。。

      念の為確認したいのですが、別のシートで認証&トリガーの設定を行っていませんか?
      もし他にも動いているシートがあれば、エラーが出ているシートで『reset』を実行したあと、もう一度『authorize』を行って認証してみて頂けませんか?

  13. とても丁寧でわかりやすかったです!本当にありがとうございます!!

    ランダムでツイートを投稿するbotはできたのですが、画像添付ツイートをランダムで投稿する機能と、画像無しツイートをランダムで投稿する機能の2つを混ぜたbotを作りたいのですがなかなか難しいです。。。

    2つの機能を同一のトリガー15分おきで発動させて、画像添付ツイートを投稿するときは画像無しツイートを投稿しないといった感じにしたいのですが難しいでしょうか。

    どうかお時間がありましたらでいいのでご伝授いただけませんか。

    • 参考にしてくださりありがとうございます。

      『画像添付ツイートをランダムで投稿する機能』ですが、サンプルシートにある『Google Drive URL_○』の欄に何も記入がなければ画像なしツイートになります。
      よろしければお試しください!

      やりたいことが違っていたり、もう少し細かい設定が必要な場合はまたご連絡ください!

  14. 素早いご返信ありがとうございます!(送信ボタンが隠れてしまいしばらく返信できませんでしたすいません)
    すいません、できました!!私の確認不足でした。。ごめんなさい。

    申し訳ないのですがもう一つ質問なのですが、犬の画像(10枚)と猫の画像(10枚)を用意して、さらに、犬に関する本文(10種類)と猫に関する本文(10種類)を用意し、犬か猫の画像をランダムで1枚とってきて、そこに本文をランダムでとってくる際に、犬の時は犬、猫の時は猫に関する本文を取ってくる・・・といった機能ってできますか?

    画像と本文をそれぞれランダムで組み合わせられたら、沢山のツイートが自動で生成できるのではないかと考えており、試行錯誤しておりますが力不足でなかなかできません・・

    • 出来るか出来ないかと言われれば出来ます
      紹介しているプログラムだけでは出来ないので少しプログラミングが必要ではありますが…!

      サンプルになるような記事を書いてみようと思いますので少々お待ち下さい〜

    • 書いてみたので参考にどうぞー(久しぶりの記事すぎて説明めっちゃ雑になってますがw)

      https://belltree.life/twitterbot-auto-generate/

  15. こんにちは。勉強させていただいているのですが、authorizeを実行した際
    メッセージの詳細
    サーバー エラーが発生しました。しばらくしてからもう一度試してください。(行 527、ファイル「Service」、プロジェクト「OAuth1」)
    となり、時間がたっても解消されません。シークレットモードやcookie削除などは試したのですが、何か他の解決法はありますでしょうか。

    • うーん。。見たことないですね。。
      GASはブラウザのデータを使わないのでシークレットモードやCookie削除は効果なかったりします。
      とりあえず一度 reset を行ってから authorize を実行して頂けますか?

      もしこれで改善しなかった場合は
      https://belltree.life/twitterbot-library
      に私が作ったライブラリがあるのでこちらを試して頂きたいです。

  16. 返信ありがとうございます。
    新しいエディタを使用したら無事動かすことができました。^^

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

  18. こんにちは、質問失礼いたします。動画投稿もこの内容でBot化出来ますか?お手すきの際に返信いただけるとありがたいです。

    • 返信遅れてすみません。
      動画投稿ですが、このコメントを書いて頂いた記事のライブラリでは出来ないですね。
      以前、オリジナルで作成したTwitterClientを使うと動画なども簡単にアップロードできます。

      具体的な説明は出来てないのですが、
      https://belltree.life/twitterbot-library/
      を参考にライブラリを設定して、
      https://belltree.life/twitterbot-library/#comment-1226
      のコメントに書いているシートとコードを参考に作っていただけるとです。

  19. はじめまして!
    わかりやすい説明ありがとうございました。
    素人の私でもBotを作ることができて感動しています!

    1点、5分毎のツイートをトリガーで実行すると
    40%くらいエラーになっています。

    これは何が原因の可能性がありますでしょうか?

    • んー情報が少ないのでわからないです。。
      エラーの内容とか分かる範囲で教えていただけますか?

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