スプレッドシートの順番通りにツイートするTwitterBotの作り方

GAS/TwitterBot
two 3d humans give their hand for handshake
この記事は約6分で読めます。

以前、公開したTwitterBotの作り方ですが、おかげさまでたくさんの反響を頂きました!

その中で先日ある要望を頂きました。

2つほど追加したBotを作製したいのですが、参考になるサイトや記事がうまく見つけられません。

追加したい機能は①ランダムにツイートするものでなく、上から順番に自動で予約投稿できる機能。②Googleドライブから引っ張った画像を付けてのツイート機能です。

もし、可能でしたら記事などにしていただけないでしょうか?

ということで、今回は2つの要望を答えたものを作っていきたいと思います。

順番に投稿するツイートを取得する機能の作り方

どんな処理をしたらうまくいきそうか想像する

コードを書く前にどんな処理をしたら実現できそうか考えてみましょう。

今回は「順番に」処理を行っていくので、これまで何回実行されたかをそれぞれが覚えておき実行の時に確認して回るのが良さそうです。

順番にツイートを取得する処理のイメージは以下の通り。

やっていることはシンプルかと思います!

今回は過去記事のpickUpTweet()を差し替えて行きます。

プログラムを書く

Twitterの認証やツイートのAPI実行は過去の記事を参考にするようお願いします。

pickUpTweetは以下のように書き換えましょう!

※ シートの形式が前回は「重み」だったところが「投稿回数」になっているので書き換えてください…!

画像の処理の照らし合わせると

①のチェックが 22行目の for に当たる場所
②の一番少ないものを探すのが 24行目の if の中身
③の+1する処理は33行目のsetValue

に当たります。

pickUpTweetだけで動作確認が出来、動画のようにpickUpTweetを選択した状態で実行すると投稿回数が増えていくことを確認できるかと思います。

今回はpickUpTweetの中身だけ変えてしまえば投稿も上手くいくと思うので順番で投稿内容を取得する方法はこれで終わりとします!(関数を分けるのって大事…!)

Googleドライブから引っ張った画像を付けてツイート

Googleドライブの画像をTwitterから閲覧できるようにする

こちらはプログラミングは不要です。

まずTwitterで画像を付けたツイートする場合、Twitterからアクセス出来る状態で画像をおいておく必要があります。

そのため下記手順で画像を『リンクを知っている全員』に公開します

その後、表示されているリンクをコピーしてツイートすればOKです。

※ https://drive.google.com/drive/u/0/my-drive ではないので注意してください

正しく表示されるか確認する

Card Validator | Twitter Developers

を使ってどんな表示になるか確認してみましょう!

上手く表示が出来たら、Card URLに載せたリンクを投稿内容に含ませれば投稿に画像が含まれるようになります。

Twitterで画像を表示させるにはOGPの設定が必要

今回はGoogleドライブにアップロードした画像を使ってTwitterに表示することが出来ました。

が、このようにTwitterで画像を表示できるのは一部のサービスだけです。

Twitterで画像が見れるようになるには2種類の方法があります。

① Twitterでツイートと一緒に画像を添付する
② OGP設定がされたページのリンクが含まれている

Twitterでツイートと一緒に画像を添付する

①について解説すると、Twitterではツイート時に画像を添付すると、pbs.twimg.com というサーバーにアップロードされた後、元ツイートに紐付いた /photo/~ というリンクに紐づけて見れるようにしています。

【元ツイートに紐付いた画像ページ】
べるつ on X
注文してた噂の「ママー」届いた
【元ツイートが参照している画像】
https://pbs.twimg.com/media/EYwe8s2VcAEpF9i?format=jpg&name=large

そのため①の形式で画像を表示した場合、Twitter上で画像を閲覧したり、ページ送りしながら画像を見ることが可能になります。

OGPが設定されたページのリンクが含まれている

②について解説すると、TwitterではOGP(Open Graph protocol)という設定がされたページを読み込むと画像やタイトルが表示される仕組みを持っています。

OGPが設定されている環境は以下の例があります。

  • Googleドライブ
  • TwitterやFacebookなどのSNSの画像リンク
  • OGP設定がされたブログ
  • その他の画像提供サービス http://twitpic.com/ など

こちらはリンク先を説明することが目的なのでクリックをすると、Twitter上で画像を閲覧したりページ送りすることは出来ず、リンク先に遷移します。

今回Googleドライブの画像を添付しましたが、画像が思ったより小さかったかと思います。

それはOGPの設定で大きな画像の表示設定になっていないためで、WordPressなどの自分で設定できる環境だと大きな画像の表示に変更することが出来ます。

つまりGoogleドライブでは左の画像の小さい表示形式にしかなりません。

どうしても画像を大きく表示したい場合はAPIを使ってプログラムを書いて①の方法のようにツイートする必要があります。

画像を添付するツイートをするならAPIを使う必要がある

2種類の画像の表示について説明をしましたが、今回は後半のOGPを利用して画像を表示しました。

こちらを採用した理由は「楽だから」なのですが、もし今回の要望が前者の画像が直接添付されたツイートを作りたいというものであれば「画像をTwitterのサーバーにアップロード」して「紐付いたツイートを作る」という手順が発生します。

APIを使った画像のアップロードの解説も出来るはずですので機会があれば書こうと思いますが、やらない気がする…リクエストくればやります… _(:3」∠)_

リクエスト大歓迎です(記事ネタになるのでありがたい)

というわけで今回は頂いたリクエストを元に記事を書きました!

普通に読んでくれるだけでも嬉しいのですが、書いている側としてはいつもどこまで需要があるかは分からずいつも不安はあります。

少なくともリクエストが来たものは最低1人以上の需要があるので書いていて少し安心しながら書けるんですよね。

自分は天才エンジニアじゃないので難しい要望には応えかねることもありますが、なぜ難しいかを伝えることも出来るのでお気軽にリクエスト投げてもらえればと思います。

ここまで読んで頂きありがとうございました〜〜〜

コメント

  1. 記事を読んでbotを完成させることが出来ました。
    他の記事を読んでもなかなか進まなかったのでとっても参考になりました。ありがとうございます。
    リクエストがあるのですが、タイムラインのツイートにいいねやリツイートをしたり、フォローしているアカウントのツイートを取得して自動でツイートするなどのようなリアルタイムで動くbotをつくってみたいと考えています。
    可能ならば記事にしてくださるとありがたいです。
    よろしくお願いします。

    • そう言っていただけると大変励みになります!
      ありがとうございます!

      またリクエストもありがとうございます。
      いいねやRTってまだ実装したことがないので今度試作してみます(`・ω・´)

      完成したら記事化しますのでよろしくお願いいたします🙏

  2. とてもわかりやすい記事のおかげで素人の僕でも自分専用のBotが完成しました。
    ありがとうございます。
    次は複数アカウントでBotを運用したいと思っています。
    そこで以下の機能を実装したいです。
    ・同じシートから順番に複数アカウントで投稿する
    ・同時に同じツイートを複数アカウントで投稿することはTwitterの規約に引っかかるので回避したい
    (時間をずらすか、違うツイートを投稿する)
    もし可能でしたら記事にしていただけたら幸いです。
    よろしくお願いいたします。

    • 参考にしてくださり、ありがとうございます!
      自分専用のBotを作れたようで何よりですε-(´∀`*)ホッ

      「複数アカウントで投稿する」ですか…🤔
      面白そうなアイディアなので記事化目指してみたいと思います!
      ご要望ありがとうございます!!

  3. とても分かりやすい記事ありがとうございます!私も記事通りにやってBotを作れました!
    『複数アカウントで投稿する』いいですね!
    それと複数アカウントで指定した人(一人)をフォローも欲しいです…
    こちらもTwitterの規約に引っかかるので時間をずらすなど必要みたいです…
    こちらも可能であれば記事にしていただけたら泣いて喜びます。
    よろしくお願いします。(o*。_。)oペコッ

    • コメントありがとうございます!
      また、TwitterBotの作成をお試し頂きありがとうございます!
      「複数アカウントで指定した人をフォローする」について承知しました!
      今、「複数アカウントでの投稿」の記事を書いているので、その記事に追記する形で記事化しようと思います!

      目標は今週末。。遅くなったらすみません。。(´・ω・)

  4. おぉ、楽しみにしています!
    知り合いにも複数アカウントでの投稿と指定した人をフォローを欲しがっていたので教えようと思います!
    頑張ってください!ふぁいとー(๑•̀ㅂ•́)و✧

  5. pickuptweetが上手くいきません。質問させてください。

    postupdatastatusを実行すると順番通り投稿されるのですが、ピックアップだと出来ません。エラーは出ませんでした。シートの投稿回数はカウント増加してるのですが…

    • コメントありがとうございます!

      > シートの投稿回数はカウント増加してるのですが…
      結論を言うと、今の処理で上手く行っています!

      原因は postUpdataStatus と pickUpTweet はそれぞれ役割が違っているからです。
      ・postUpdataStatus はTwitterに投稿する機能
      ・pickUpTweet は投稿するツイートを取得する機能
      となっているのですが、 pickUpTweet は”取得しているだけ”なので外からは何も起きていないように見えます

      本当に動いているか気になる場合、 pickUpTweet の最後の1行に以下のコードを追加してログを確認してみてください!

      Logger.log(postMessage) // ←追加
      return postMessage;

      こちらで回答になりますかね…?

  6. うまくいきました!ありがとうございます!

  7. […] スプレッドシートの順番通りにツイートするTwitterBotの作り方 […]

  8. 記事を拝見し、無事にbotを作成することができました。分かりやすい解説でスムーズに作ることができました。
    複数運用したく考え、作ったスプレッドシート【A】をトリガー設定で投稿運用したまま
    googleDrive上でコピーしてスプレッドシート【B】を作成。【B】の承認作業を行いトリガー設定。
    投稿まで確認出来たのですが、【B】が投稿できた途端【A】の投稿が出来なくなるエラーが発生しました。
    【A】を再承認し、投稿すると【B】が動かなくなる…分かりづらい説明で申し訳ありません。
    これは何が原因でしょうか?もし原因がわかればご教授お願い致します。

    • 大丈夫です。状況わかります。
      というのも過去に同じ経験したことがきっかけで自分でライブラリを作成したためです。

      原因ですが、簡単に言うと「処理の裏側で認証情報をシート毎ではなくアカウント毎に保存していること」が原因です。
      こちらの記事ではTwitterWebServiceというライブラリを使っているのですが、ライブラリの中で『認証情報を保存するデータ名』が固定になっているため複数のシートで使おうとするとブッキングしてしまうんですよね。。。

      具体的な対策ですが、その問題を解決するためのライブラリを作っているのでそちらをご利用ください。
      https://belltree.life/twitterbot-library の記事が参考になると思います。
      ちなみに『認証情報を保存するデータ名』にシートのURLを含めるようにしているのでシート毎に認証されるって仕組みです😉

      順番通りにツイートする方法であれば、記事内で紹介している サンプルシート と pickUpTweetInOrder をそのまま使えますので記事通りに作って頂ければと思います。
      わからなければまたご質問ください!

  9. 返信ありがとうございました。
    ライブラリを変更しエラーが解消できました!これで無事に運用することが出来そうです。
    細かくご教授いただきありがとうございました。

    ブログ拝見しております。これからも素敵な記事の執筆期待しております。

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