自作のTwitterBotでGoogleドライブの画像をアップロードする方法

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

そろそろTwitterBotの記事に一区切りしようと思っていた折、こんなコメントを頂きました。

画像を一緒にツイートする時はどの様にすれば良いでしようか?

確かにTwitterBotを運用する上で画像の投稿は必要不可欠ですね…!!(コメント助かります😭)

今回は画像をアップロードする機能を作ったので、紹介&解説をしたいと思います!

【関連記事】
自分専用のTwitterBotを作り方を完全公開します【コピペOK】
全ての始まり
スプレッドシートの順番通りにツイートするTwitterBotの作り方
今回の記事のベースになっている「順番通り」の処理について解説しています
【爆速】自作のTwitterBotを簡単に作るライブラリを作った話【初心者向け】
今回はこちらのライブラリを利用しています。詳しい使い方はこちら。

画像をアップロードするTwitterBotの作り方

細かいことは気にせずに画像を投稿するTwitterBotを作りたい方向けにライブラリを改造しましたのでご利用ください。

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

新しいスプレッドシートを用意して以下のシートの内容をコピーしてください

画像を順番に投稿するためのサンプルスプレッドシート

  • A列 投稿内容
  • B列 回数(0でOK)
  • C~F列 一緒にアップロードしたい画像のGoogleドライブのURL

を入れてください。

投稿用の画像を用意する

GoogleドライブのURLは https://drive.google.com/drive/u/0/my-drive を入れがちですが、ファイルごとにちゃんとURLが存在します。

画像を開いたら右上のメニューから『新しいウィンドウで開く』を選択します。

表示されたページのURLが https://drive.google.com/file/d/****************/view の形式となっていると思うのでそのURLをスプレッドシートに貼り付けてください。

GASを用意する

ここからはいつものようにGASを用意してコードを書いていきます。

まずはGASを用意します。先程作ったスプレッドシートから『ツール』→『スクリプトエディタ』でGASを用意しましょう。

GASの編集ページが開かれたら以下の画像を参考にライブラリを登録していきます。

ライブラリのIDは以下をコピペしてください。

1fHCjI78BV3o7nGx2l0lJ7WXM49VFbobGDNdFGqAoVFZyRJ2kepQYzVLd

不具合の修正が含まれているのでver12以上をご利用ください。

下記コードをコピペする

コード.gsに以下のコードをコピペします。

cunsumerKeyとconsumerSecretは使用するTwitterアプリのものに上書きしてください。(初めての方はこちら

これで完成です!(使い方は こちら を参考に postTweetWithMedia を実行するように設定してください)

次の章からは具体的にどのような仕組みで動いているかの解説を行います。

単純に仕組みが気になる人、少し改造したい人、怪しい処理が行われていないか不安な人はもう少しお付き合いください!

画像をアップロードするTwitterBotの仕組み

大まかな流れ

4つの処理を順番に実行しています。

  1. 画像の場所(URL)を取得する
  2. Googleドライブの画像を取得する
  3. Twitterに画像をアップロードする
  4. アップロードした画像を含めてツイートする

人が画像を投稿する順番を代わりにプログラムが行っているようなものなのでそこまで複雑ではありません。

① 画像の場所を取得する

スプレッドシートからdriveURLを取ってきます。

これまでの投稿の処理と同じようにテキストとしてURLを取得すればOKです。

Googleのファイルの場所は

https://drive.google.com/file/d/******/view

の******の部分だけでファイルを識別しています。

******をGoogleドライブのFileIdと言い、これが今回必要です。

FileIdを直接シートに書いてもらってもいいのですが、今回は使いやすさを重視してURLから抽出するようにしました。

Utility.gs のpickUpTweetInOrderに処理を書いているので参考にどうぞ。

② Googleドライブの画像を取得する

ここからは TwitterClient.gs の postTweetWithMedia の内部の処理の説明になります。

GoogleドライブのFileIdを取得したら、次に投稿する画像を取得します。

GASではGoogleのサービスと連携するためのAPIが用意されているのでそれを利用しましょう。

// ファイルのデータをドライブから取得
const fileByApp = DriveApp.getFileById(fileId)
Drive Service  |  Apps Script  |  Google Developers

上記のリンクに細かい使い方が解説されていますが、その中で『DriveApp』というクラスの『getFileById』を使ってファイルの情報を取ってきます。

新しい画像を作ってGoogleドライブに保存したり、Googleドライブ以外のGoogleのサービス(カレンダーやメールなど)と連携することも出来るので興味のある方はここから色んなものをアレンジして作ってみてください!

③ Twitterに画像をアップロードする

次にTwitterAPIを実行してファイルをアップロードします。

Twitterに画像をアップロードするAPIを実行することになります。

media か media_data をパラメータにセットしてアップロードするのですが、Googleドライブでは画像そのものを取得できなかったので(やり方がわからなかった…)、base64という形式の文字列のデータに変換して送ります。

// ファイルのデータをbase64形式に変換
const base64Data = Utilities.base64Encode(fileByApp.getBlob().getBytes());

// 画像アップロードのAPIを実行
const uploadUrl = 'https://upload.twitter.com/1.1/media/upload.json'

const uploadParam = {
    media_data: base64Data // base64形式なので media_data にデータを入れる
}

// uploadResult にアップロードした画像の参照IDなどが入っている
const uploadResult = this.postRequest(uploadUrl, uploadParam)

④ アップロードした画像を含めてツイートする

③でアップロードした際にuploadResultにアップロードされた画像の参照IDが含まれています。

ツイートのAPIを実行時にそのIDを入れると③でアップロードした画像を紐付けてツイートされます。

// アップロードしたファイルを添付して投稿
const postUrl = 'https://api.twitter.com/1.1/statuses/update.json'
const postParam = {
    status: postData.message, // 画像と一緒に投稿する文章
    media_ids: mediaIds // カンマ区切りで書く
}

const postResult = this.postRequest(postUrl, postParam)

これで画像を付けて投稿するTwitterBotの処理は完成です。

あとは時間の設定などを行えば自動で画像を投稿することも出来るようになります。

この方法を使えばTwitterで画像を予約投稿することも

某TwitterBotサービスでは画像をアップロードすることが出来ないようで、小技として一度画像をアップロードした際のリンクをBotで投稿することで画像つきツイートをしているようです。

確かに参照先が一致していれば画像は表示されますが、日付が変わる瞬間に情報を開示したい場合などにあらかじめ画像を投稿しておくのは難しいので実用性はイマイチです。

今回紹介した方法であれば処理の中で画像のアップロードを行うので、元のツイートを用意する必要はなく、事前に投稿内容がバレることはありません。

画像を知らない外部のサーバーに置かないのでセキュリティ的にも安心ですね!

Twitterに予約投稿機能は付いたのですが、1つ1つ設定する必要がなく、スプレッドシートなので簡単に大量に作れるので色々とメリットはこちらのほうが多そう(*´∀`)

めっちゃ良い!と思った方は是非参考に作ってみてください!

投げ銭・拡散頂けると喜びます\(^o^)/

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

コメント

  1. Ryo_e235 より:

    TwitterBotの記事全て読みました!初心者にもとてもわかりやすくて感謝してます、ありがとうございます!
    ただ、画像付きのツイートをしようとしたら、「ReferenceError: uploadTwitterForDriveMedia is not defined at postTweetWithMedia(TwitterClient:135:23)」とエラーが出て、ツイートができなくて困っております。
    ↓確認したこと、やってみたこと↓
    ・サンプルコードをそのままコピペして、APIキーを入れて使っている。認証は完了している
    ・ライブラリのバージョンは4
    ・シート1のA列2行目に投稿する内容、B列2行目に0、C列2行目に「https://drive.google.com/file/d/ほにゃらららら/view」のURLを書いている(ちゃんとかけてるはず…)
    ・「【爆速】自作のTwitterBotを簡単に作るライブラリを作った話【初心者向け】」に書かれていたコードで、文章のみのツイートをすることはできた
    ・一応、投稿する画像をリンクを知っていれば誰でも見れる共有設定にして、一応DriveAPIはonにした
    ・postTweetWithMediaを実行するたびに投稿回数の数字は+1されている
    ・スプレッドシートを新しく作り直してやってみたけど結果は同じだった
    たすけてドラえも~ん(血涙)
    きっと僕がどこかでなにかをやらかしているのですが、原因がちっともわからないので、もし何が原因がわかれば教えていただけると嬉しいです。長文失礼しましたm(_ _)m

    • 𝔹𝕖𝕝𝕥𝕫 より:

      すみませんんん!!!!ライブラリ側の不具合です!!
      諸々調査して頂いて心苦しいです、、、
      修正完了しました!!! 『5 画像投稿の not defined を修正』 というバージョンをリリースしたのでこちらをお使いください。

      TwitterClient:xxx:xx というエラーが出たら99%私なのでコメントで『エラーが出てるぞ!!』とご指摘頂けるとありがたいです。。

      「自分のやり方が間違っているかも」と思うこともあるかもしれませんが、このブログにおいては「迷わせる記事を書いた方も責任がある」覚悟で書いています
      もっとわかりやすい記事を書けるきっかけになるのでどしどしコメントください!!

  2. Ryo_e235 より:

    めっちゃ早い対応ありがとうございます!画像付きツイートできました!
    GASについて調べてる間に色々な情報を知れたので、結果的には良かったと思ってますw
    わかりました、また何かあったらコメントしますね(`・ω・´)ゞ

  3. kakurenbo より:

    スプレッドシートから画像をTwitterに投稿したいと思い、こちらのページにたどり着きました。GASの私にも初心者にもとてもわかりやすくて感謝申し上げます。本当にありがとうございます!
    ただ、画像付きのツイートをしようとしたら、「TypeError: Cannot read property ‘length’ of undefined(行 134、ファイル「TwitterClient」)」とエラーが出て、ツイートができなくて困っております。
    ↓確認したこと、やってみたこと↓
    ・サンプルコードをそのままコピペして、APIキーを入れて使っている。認証は完了している
    ・ライブラリのバージョンは『5 画像投稿の not defined を修正』
    ・「【爆速】自作のTwitterBotを簡単に作るライブラリを作った話【初心者向け】」に書かれていたコードで、文章のみのツイートをすることはできた
    ・一応、投稿する画像をリンクを知っていれば誰でも見れる共有設定にして、一応DriveAPIはonにした
    ・postTweetWithMediaを実行するたびに投稿回数の数字は+1されている
    ・スプレッドシートを新しく作り直してやってみたけど結果は同じでした。
    お忙しいところ大変恐縮ではございますが、ご教授いただけますと幸いです。よろしくお願い申し上げます。

    • 𝔹𝕖𝕝𝕥𝕫 より:

      参考にしてくださりありがとうございます!
      そして、ご迷惑おかけして申し訳ございません。。

      今、確認をおこなっているのですが、再現しないため時間がかかっております。。
      エラーの箇所をみたところ、スプレッドシートからdriveのURLを取得する部分で正しくデータを取れていないようです。。

      原因は掴めていないのですが以下の事を試して頂きたいです
      ・バージョンを最新(2021/2/5時点だとver11)にして実行
      ・シートの形式をサンプルと比較

      まだこれだけでは解決には繋がらないと思うのですが、エラーログに変化がある可能性があるのでよろしくお願い致します。
      何か状況が変わりましたらコメントでもメールでもTwitterのDMでも大丈夫なのでご連絡ください!

  4. kakurenbo より:

    早速ご返信誠にありがとうございます。
    ご助言いただいた通り、『・バージョンを最新(2021/2/5時点だとver11)』で実行しました。
    また、シートについてはサンプルと同じ形式にいたしました、
    上記を実行したうえで『postTweetWithMedia』を実行したところ以下のエラーが出ました。
    1回目
    Exception: https://upload.twitter.com のリクエストに失敗しました(エラー: 401)。サーバー応答の一部: {“request”:”\/1.1\/media\/upload.json”,”error”:”Read-only application cannot POST.”}(応答の全文を見るには muteHttpExceptions オプションを使用してください)
    at Service_.fetchInternal_(Service:457:22)
    at Service_.fetch(Service:305:15)

    2回目
    TypeError: Cannot read property ‘split’ of undefined
    at pickUpTweetDataInOrder(Utility:153:23)
    at postTweetWithMedia(TwitterClient:139:22)

    3回目
    投稿内容を上手く取得できませんでした。以下のシートを参考にしてください。
    エラー TypeError: Cannot read property ‘length’ of undefined
    at postTweetWithMedia(TwitterClient:143:47)

    1回目、2回目を実行した際にはスプレッドシート上の投稿回数は1ずつ追加されるのですが、3回目は追加されず。
    3回目のエラー「TypeError: Cannot read property ‘length’ of undefined at postTweetWithMedia(TwitterClient:143:47)」がでて4回目以降は3回目のエラー「TypeError: Cannot read property ‘length’ of undefined at postTweetWithMedia(TwitterClient:143:47)」になります。

    Consumer Keysを再発行してコードのほうも更新したのですがエラーの内容は変わらないです。
    ご助言いただけますと幸いです。
    お忙しいところ大変恐縮ではございますが、よろしくお願い申し上げます。

    • 𝔹𝕖𝕝𝕥𝕫 より:

      詳細にエラー内容をまとめて頂きありがとうございます!
      おかげさまで原因を掴むことが出来ました。

      【1回目のエラー】
      『Read-only application cannot POST』ということでTwitterアプリのWrite権限が足りないようです。
      おそらく試行錯誤の中で新しくアプリを作ったりした影響かと思うので、以前ツイートに成功したアプリに切り替えるか、権限を付与してみてください!
      (なおKeyを再発行したり権限やアプリを切り替えた後はGASからreset&authrizeで再認証が必要です)
       
      【2回目のエラー】
      付与しようとしているGoogleDriveのURLが意図した形式ではないようです。。
      投稿用の画像URLを作る方法をまとめているのでご確認ください!

      【3回目のエラー】
      私のコードに原因がありました。。
      参考にして頂いたスプレッドシートの右側に『参考記事』の記述があると思うのですが、そこが投稿と間違えて読み込まれてエラーになっていました。

      不具合を修正した『バージョン12』を公開しましたので、そちらで試していただければと思います!
      動かないなどありましたらお手数ですがご連絡頂けると幸いです!よろしくお願い致します!

  5. kakurenbo より:

    早速のご返信誠にありがとうございます。また、適切なご助言誠にありがとうございます。
    ご助言いただいたように
    『バージョン12』に変更し、Developer Portalの『App permissions』が『Read』になっていたので『Read and Write』にし、GASからreset&authrizeを実施した結果、無事にスプレッドシートからツイッターに投稿することができました。
    本当にありがとうございました。
    スプレッドシート上で指定した時間に投稿できるように工夫してみたいと考えています。
    今後とも勉強させていただきます。
    記事の更新、大変かと存じますが、応援しています。頑張ってください。

  6. 右きき より:

    はじめまして。
    初めてこちらを試したところお蔭様でなんとか成功し、
    https://belltree.life/twitter-bot-order/

    今度はこのページの方法で画像付き投稿をやってみたく、同じツイッターアカウントと同じApps Scriptの画面で、ライブラリとファイル(.gs)を、前のものを消して入れ替えたものの、実行すると以下のエラーが出ます。

    ステートメントの前に ; がありません。
    (匿名)@TwitterClient.gs:5

    よろしければアドバイスをいただけると有り難いです。どうぞ宜しくお願い致します。

    • 𝔹𝕖𝕝𝕥𝕫 より:

      原因は V8ライブラリ がオフになっているからですね…
      V8ライブラリを『オン』に戻すと動くようになりますのでお試しください!

  7. 右きき より:

    ありがとうございました!色んな記事で、記事によっては「オフに」と書いてあった気がして、教えていただくまで分かりませんでした。お蔭様で動くようになりました!!嬉しいです。

    実は自作方法を探してこちらへ辿り着いた理由が、今まであったツイッターbotサービスが終了したり動かなくなったりしていて、残ったツイッターbotサービスもいつ動かなくなったり終了したりするか心許ないと思ったためです。

    Beltzさまの私見で充分なのですが、ここで作り方を教えていただいているツイッターbotと、一部でまだ残っているツイッターbotサービスを比べて、強いて言えばおそらくどちらが長く使えるであろうと推測されますか。あくまで参考までにお聞かせいただけると有り難いです。

    • 𝔹𝕖𝕝𝕥𝕫 より:

      この作り方のBotのほうが圧倒的に長く使えると思いますよ。

      というのもサービスが終了するパターンは主に以下の2つがあるからです。

      ① 金銭的な問題があった時(運用しているサーバー費用が赤字になった等)
      ② 技術的な問題があった時(Twitterで提供しているAPIが対応しなくなった/規約違反で規制された等)

      今まであったTwitterBotサービスはサーバーを立てる必要があるので、管理者がサーバー代を支払い続ける形になっていたのですが、
      ここで紹介しているスプレッドシートの方法は一切お金が掛かっていないので、Googleが突然スプレッドシートを有料化しない限りはずっと使えます。

      また②の規約違反に関しても、今みなさんに『自分でアプリを申請して』作ってもらっているので、ある意味公式から認められている状態です。
      自己責任ではあるものの、正しく使っていれば半永久的に使えるのでそこも自作の良さですね。

      唯一の懸念点はライブラリで使っているAPIが古くなって対応されなくなることですが、そこは他のサービスでも同じなので結果的にこの方法の方が長く使えるかなと思っています。
      ちなみにAPIが対応しなくなりそうになっても、今のところは頑張って修正する気持ちでいるので安心してください!

      最後に一点だけ。
      この記事読んで作ってくれた人はもう利用者ではなく提供者なので、ライブラリが万が一動かなくなったとしても努力次第で自分で復旧することも出来ます。
      ライブラリはちょっとしたお手伝いをするツールなだけで、右ききさんのアイディア次第でもっと長く使うことも、もっと便利なBotを作ることも出来るので色々楽しんでほしいと思います、
      困ったことがあったらサポートも出来るのでお気軽にご相談ください〜

  8. 右きき より:

    とても丁寧なご返信、本当にありがとうございます。(返信が遅くなり失礼致しました。)

    最後のライブラリの件、いじりながら勉強してみたいと思ったのですが、どこからかコピーしたりできるのでしょうか。

    たとえば今は「シート1」から読み込むコードになっているのを「シート2」に切り替えるなど、
    (そのレベルからですが)コツコツ理解していこうと思っています。

  9. 右きき より:

    あ、ここですね。失礼しました。
    https://github.com/belltreeSzk/TwitterClient

    いじりたい場合は、(githubの使い方が分からないので)
    Apps ScriptのライブラリのTwitterClientを一度消して、上記ページのコードを1つ1つコピーして
    ファイル⇒スクリプトから追加し、動いたら少しずついじっていくと、色々実験ができますでしょうか。^^;

    • 𝔹𝕖𝕝𝕥𝕫 より:

      申し訳ない。。。自己解決したのかなと思っていたら最後に質問があったの見逃していました。。。

      最新のコードはこちらです
      GitHubは気まぐれで更新しているので若干古いです…(´ε`;)
      https://script.google.com/u/1/home/projects/1fHCjI78BV3o7nGx2l0lJ7WXM49VFbobGDNdFGqAoVFZyRJ2kepQYzVLd/edit

      実験の方法ですが、まずはごっそりコピーして、処理を追っていくのがおすすめです。

      ごっそりコピーした際は、ライブラリを使わないため、

      const client = TwitterClient.getInstance(consumerKey, consumerSecret)
      

      という処理は

      const client = getInstance(consumerKey, consumerSecret)
      

      というように 『TwitterClient.』 を消すと呼び出せます。

      「ここの処理がどうなっているのかわからない」とかあれば質問してもらえれば回答するのでお気軽にどうぞ!(今度は見逃さない)

  10. カワ より:

    はじめまして。
    こちらを試したところ投稿に成功したり、エラーになったりになってます。
    お時間あるときで良いのでエラー回避方法あれば教えていただけると幸いです!

    エラー Exception: Request failed for https://upload.twitter.com returned code 405
    at Service_.fetchInternal_(Service:457:22)
    at Service_.fetch(Service:305:15)

    • 𝔹𝕖𝕝𝕥𝕫 より:

      申し訳ありません。まだ原因わかっていません。。
      というのも 『returned code 405』 はライブラリを使う上では起きないはずのエラーなのでもう少し詳しい情報が知りたいです。

      成功した時と失敗した時を比較した際に違いやルールがあったりしますか?
      「文章が多かった」「添付ファイルが多かった」「アップロードするファイルの拡張子が違っていた」「同じ投稿でもエラーが起きることがある」
      など些細なことでも構いませんので教えていただけると幸いです!

  11. カワ より:

    早速コメントありがとうございます!
    確かにTwitterのAPIからのエラーですのでこちらからの送信情報に問題がありますね。
    一旦以下を試しました。
    ・文章の長さ変更(より短く)
    ・添付ファイルの画像サイズの見直し
    (Twitterアプリから直接できていた画像のサイズをより小さくする(2MB⇒300kくらい)
    の対処をし、うまく動き始めました。

    「ルールの比較」というヒントで見直すことができました。
    ご丁寧にご案内ありがとうございました!

    • 𝔹𝕖𝕝𝕥𝕫 より:

      おー!良かったです。
      また分からない点があったらお気軽にコメントください〜

  12. pon より:

    はじめまして、とても勉強になっております。
    こちらのブログを参考に、「ライブラリからbotを作成」に無事成功しました。ありがとうございます!

    ただ、可能であれば以下の仕様で運用したいと思っています。
    ・画像付きのツイート(Google Driveから添付する)と、画像を添付しないツイートの混ざったリストから、ランダムにツイートする
    ・できれば完全ランダム(現在の「ランダム」のように投稿済みを記録せず、ツイートが重複しても構わないとする)にしたい

    自力での改造を試みたのですが、なにぶん初心者のためうまくいかず……
    勝手ながら、よろしければお力添えいただけますと幸いです。

    何卒よろしくお願いいたします。

    • 𝔹𝕖𝕝𝕥𝕫 より:

      返信遅くなってすみません。。

      > ・画像付きのツイート(Google Driveから添付する)と、画像を添付しないツイートの混ざったリストから、ランダムにツイートする
      https://gist.github.com/belltreeSzk/605b405003746a0a5e16828e114de227

      ランダム版の画像つきツイートが出来るように改修したので↑のページを参考に作ってみてください(ライブラリのバージョンを最新にしてください)
      シートは以下のようなランダムと画像URLが合体したようなシートになっているのでご注意ください!
      https://docs.google.com/spreadsheets/d/1Xr1G4FTglcE68j7eylcrwJgQtzfN0AB3K7EKZMIFQ8I/edit#gid=945036492

      > ・できれば完全ランダム(現在の「ランダム」のように投稿済みを記録せず、ツイートが重複しても構わないとする)にしたい
      現在のランダムで投稿済みのチェックをしているのはTwitterの仕様で『連続したツイートはエラーになる』ためなんです。
      これまでのランダム投稿も前述した画像ランダム投稿シートも一度投稿されたら使えなくなるのではなく、『前回投稿したものを除いてランダムで選ぶ』という処理なのでそのまま使っていただいて大丈夫だと思います。

      何かわからないことがあればまたご連絡ください!

  13. pon より:

    ご返答ありがとうございます。

    改修までありがとうございます…!無事動作確認できました。
    こちらをもとに制作していきたいと思います!

    丁寧に対応いただき、ありがとうございました!

  14. sachi より:

    はじめまして。素晴らしい記事をありがとうございます。

    上記の「画像付きのツイート(Google Driveから添付する)と、画像を添付しないツイートの混ざったリストから、ランダムにツイートする」を参考(というか、完全にコピペですが)させていただき、bot作成できました。

    ほぼ希望通りなのですが、以下を追加で実現したく https://github.com/belltreeSzk/TwitterClient この辺背景んしているのですが私のレベルじゃ解読しきれず助言いただければ嬉しいです。

    ・H列に投稿回数を入れたい
    ・(これは関数で対応)重みを50-H列にして、投稿した行は重みを軽くしてランダムだけど平均的にツイートできるようにしたい

    順番にツイートする方にあるプログラム
    // 投稿する内容の投稿回数の部分のセルだけ取得して、+1して更新する
    この辺がヒントになるかなと思ったんですけどよくわからず・・・。

    お手隙の時にお返事いただけると嬉しいです。

    PS:娘さんお大事になさってください><

    • 𝔹𝕖𝕝𝕥𝕫 より:

      参考にしてくださりありがとうございます!
      まだまだ未熟なものでコードが汚くてすみません。。

      回答いたします。

      TwitterClient.pickUpTweetDataRandom();
      

      この処理ですが、サンプルのシートを元に作っているので、投稿回数を取得して、重みを変更して投稿するということは出来ません。。

      上記の要望を満たすように作るとすると、
      投稿回数を記録して重みを変更するサンプル
      のようにgithubのコードをコピーしてきて書き換えて代わりに呼び出す必要があります。

      ただ、やりたいことを察するに、B列の『重み』の数値を”実行するごとに減らしていけば”解決しませんかね?
      https://gist.github.com/belltreeSzk/8dcc0f8fbf2c27ce30dbed8200692f0e
      一応それもサンプル作ったので参考にしてみてください。

      娘の心配してくださりありがとうございます😭

  15. sachi より:

    早速ありがとうございますっっ。拙いコメント(誤字あり)なのに、要望を正確に汲み取っていただきありがとうございます。仕事できる人・・✨✨!!

    まさにそれです!
    ツイート回数も把握できるし、期待通りです!

    気持ち程度ですが、ドネーション送りましたm(_ _)m

    コロナもまだまだ先が見えず大変ですが、お体にお気をつけてお過ごしください(*´꒳`*)

    • 𝔹𝕖𝕝𝕥𝕫 より:

      期待通りのものになっていてよかったです!
      ドネーションもありがとうございます。大切に使わせて頂きます…🙏✨

  16. m より:

    すみません、こちらの記事を参考にbotを作成し、3ヶ月ほど運用していました。
    しかし、7/26の20時ごろを最後にすべてエラーになるようになってしまいました。
    このタイミングでなにかを変更したということはなく、いつの間にかこうなってしまいました。

    以下エラーメッセージです。
    「エラー 不明なエラーが発生しました。しばらくしてからもう一度お試しください。」

    こういう場合によくある、TwitterかGoogle側の仕様変更ではないかと思ったのですが、自分では調べ方がわからず…
    申し訳ないのですが、なにかご助言いただけるととても助かります。

    状況的に同じツールやライブラリを使っている方みなさんに出るエラーではないかと感じたのですが、自分にのみ発生しているものでしたら申し訳ありません。

  17. m より:

    すみません、こちらのエラーメッセージのほうがなにか参考になりますかね…
    下記が自動投稿のログに出ていたものです。

    TypeError: Cannot read property ‘length’ of undefined
    at postTweetWithDriveData(TwitterClient:149:47)

    上記日本語のエラーメッセージは、手動で実行した際に出たものです。
    (手動の実行は、posttweetに限らずすべて上記メッセージが出てしまっています…)

    • 𝔹𝕖𝕝𝕥𝕫 より:

      参考にして頂きありがとうございます!
      また不具合が出てしまっていて申し訳ないです。
      見たところこちらの不具合のようです。

      エラーメッセージとても参考になります。
      以前、似たようなエラーが発生したことがあり、修正を行っていたはずなのですが、現在のTwitterClientのバージョンを教えて頂いてもよろしいですか?

  18. m より:

    迅速なお返事ありがとうございます。
    TwitterClientは16を使用しています。

    また、今手動実行を試したところ、「不明なエラー」というなんの反応もない感じではなく
    自動投稿のログと同じものが出ていました。

    何卒よろしくお願いいたします。

    • 𝔹𝕖𝕝𝕥𝕫 より:

      回答ありがとうございます。

      取り急ぎ、

      TypeError: Cannot read property ‘length’ of undefined
      at postTweetWithDriveData(TwitterClient:149:47)
      

      が出ないようにする修正を入れました。TwitterClientのver17を公開したのでそちらで動くかご確認ください。

      ただ『いつの間にかこうなってしまった』というのが気になっています。
      今、ご利用になっているコードは postTweetWithMedia を使ってますか?
      それとも直接 postTweetWithDriveData を使っていますか?

  19. m より:

    修正ありがとうございます。更新しました。

    ただ、申し訳ありません。状況が変わり、
    「投稿内容を上手く取得できませんでした。以下のシートを参考にしてください。」というメッセージが出て、
    「undefined」というツイートがされるようになりました。

    また、上記の「投稿内容を上手く取得できませんでした。」というメッセージがいままでなかったのでわからなかったのですが、
    Excelの版を投稿できなくなる前に戻したところ無事投稿できるようになったので、
    どうやら私がシートの編集をしたことが原因だったようです……
    (スクリプトは動かし始めた当初から編集していなかったのですが、シートのほうはこまめに編集をしていました)
    こちらが原因だったようで、申し訳ありません。

    投稿内容はできれば編集後のものにしたいので、
    編集前と後を比べて、原因を探ってみようかと思います。

    編集した特定のツイートでエラーが出るわけではなくそこから一度も投稿が成功していないのってちょっと様子がヘンですかね…?
    シート全体の構造を変えたりはしていないはずなのですが…

    他、大きな編集点としては
    ・行数(元々250ほどあり、増やしたのは数行程度ですが、上限がある場合原因かも…と)
    ・一部のツイートに「動画を引用」を使用した(Twitterの機能である引用元を明記してUP済みの動画をツイートするもの、URLを載せるだけなので可能かと思い使用していた)
    があるのですが、これらが原因である可能性はありますかね…?

    postTweetWithMedia
    を使用しています。

    お手数をおかけして申し訳ございません。よろしければ、引き続きよろしくお願いいたします。

    • 𝔹𝕖𝕝𝕥𝕫 より:

      返信遅くなってしまい申し訳ありません。
      シートの編集で動くようになったようで一先ずはよかったです!

      ・行数(元々250ほどあり、増やしたのは数行程度ですが、上限がある場合原因かも…と)
      ・一部のツイートに「動画を引用」を使用した(Twitterの機能である引用元を明記してUP済みの動画をツイートするもの、URLを載せるだけなので可能かと思い使用していた)
      があるのですが、これらが原因である可能性はありますかね…?

      とのことですが、行数やツイート内容は関係ありません。

      行数の上限はありますが、250行程度では上限には達しませんし、ツイートにURLを含むことについてもTwitterで仮に禁止されていたとしてもシートから投稿内容を取得する部分は関係ないためです。

      確認していただきたい部分は2つあります。
      https://docs.google.com/spreadsheets/d/1Xr1G4FTglcE68j7eylcrwJgQtzfN0AB3K7EKZMIFQ8I/edit#gid=98578108
      のシートを参考にするように、というエラーが出ていると思いますが

      ・A列に投稿内容があるか
      ・投稿内容が空白になっているものがないか
      ・最後の行だと思っている行よりも下に何かデータが入っていないか

      を確認していただきたいです。

      一巡したタイミングで一番最初の行に戻るはずなのですが、何らかの原因で更に下にある存在しない投稿を取ろうとしてエラーになっているように見受けられます。
      もしくは、どこかの行の投稿文が消えてしまい、ツイートに必要な情報を参照できずに止まってしまったのかなと思っております。

      お手数ですがご確認ください!

  20. m より:

    ご返信ありがとうございます。

    空白がないか探したところ、重みの項目が一箇所抜けており、
    そちらを埋めると無事投稿できるようになりました…!

    こちらの凡ミスでお手数おかけしまして、申し訳ございませんでした。
    ありがとうございました!

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