Twitter(X)予約投稿ツール(GASとスプレッドシート)

【GAS】ツリー投稿・動画投稿・画像複数枚投稿(media upload)で予約投稿するやり方【Twitter API】

Twitter(X)予約投稿ツール(GASとスプレッドシート)

Gasで画像投稿、動画投稿、ツリー投稿、全部実装済みしたため知見がたまりました。

ただ、ツールとして販売することにしてしまったため、うまくいかなった方法だけ記載しておきます…。よかったらヒントにしてください。

コードは改版自由で販売しています。ノンプログラマの方もこちらがおすすめです。

Twitter API の画像、動画サイズ

動画サイズは15mbなの?512mbなの?

日本語マニュアルみるとこう書いているのですよ。

画像 5MB

GIF 15MB

動画 15MB

https://developer.twitter.com/ja/docs/media/upload-media/overview

開発者がこのマニュアルみて15MBの検証をして終わらせてしまう人がいるかもですね。

でも、英語のマニュアルみるとこう書いているのですよね。これに気付ける情報力は必要ですね。

File size must not exceed 512 mb
Duration must be between 0.5 seconds and 140 seconds

Frame rate must be 60 FPS or less

https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/uploading-media/media-best-practices

gifは15mbで一緒なのですけどね。

mp4は512gb、動画の長さは最大140秒です。

Twitterのドキュメントってちょっと更新が追い付いているのか怪しいのですよ。日本法人はイーロンがかなり解雇していますからね…。(´・ω・`)

リファレンスは自動翻訳ではないサイトは要注意です。こういうのって危険ですよね。だからTwitter APIは英文のマニュアルをみることをおすすめします。

Firebaseなどは大丈夫なのです。

15mbと512mbはぜんぜん違いますからね。34倍ぐらい差があるのに15mbでサイズ上限のコードをかいたらもったいないですよね。

ただ512mbアップロードできるのかというと、ほぼ無理で実際は40MBもアップロードできれば上出来でます。動画投稿はちょっとややこしいですね。

スポンサーリンク

【GAS】Twitter API v2で画像複数枚投稿(media upload)の実装

これではうまくいかきません。chatGPT4君はこう書きたがるけど…、GPT君それは違うんだよ…。

"status": "ツイート.",
"attachments": {
  "media_keys": mediaIds
}
スポンサーリンク

【GAS】Twitter API v2で動画投稿の実装

基礎知識が必要です。

Twitterのチャンクトメディアアップロードでは、大きなファイルを”チャンク”と呼ばれる小さな部分に分割し、それらを個別にアップロードします。これにはINIT(初期化)、APPEND(追加)、FINALIZE(終了)の3つのステップが必要です。

  1. INIT: これはメディアのアップロードを開始するためのステップです。ここでTwitterにアップロードするメディアの全体的な情報(ファイルサイズ、ファイルのタイプなど)を提供します。Twitterからは、後続のAPPENDとFINALIZEステップで使用するメディアIDが返されます。
  2. APPEND: このステップで、実際にメディアのデータ(チャンク)をアップロードします。INITで取得したメディアIDと、アップロードするデータのチャンクをパラメータとして送信します。大きなファイルは複数のチャンクに分割され、それぞれが個別のAPPENDリクエストでアップロードされます。
  3. FINALIZE: すべてのチャンクがアップロードされた後、FINALIZEステップを実行します。これにより、Twitterはアップロードされたチャンクを1つのメディアファイルに組み立てます。

boothなどでツールとして販売することにしてしまったため、詳しい実装方法は控えさせてもらいます。

転売・転載だけは禁止しているため販売目的な人には使えませんが、個人的にプログラミングの勉強のためにほしいならお買い上げしてもらってもOKです。

改変はOKなので、販売や転載さえしなければ、こっそりとカスタマイズしてもらってもかまわないというゆるいライセンスにしています。アフィリエイトもできるようにしたいため応援してもらえれば幸いです。

message: ‘Video frame rate 65.0 (fps) exceeds max frame rate of 60.0 (fps)’ } } }

こちらはフレームレートエラーです。

{ state: 'in_progress',
     progress_percent: 99,
     error: 
      { code: 3,
        name: 'UnsupportedMedia',
        message: 'Video frame rate 65.0 (fps) exceeds max frame rate of 60.0 (fps)' } } }

Twitterの仕様は60フレームまでです。

PC画面録画ソフトは固定フレームレートで書き出さないとこのようなことが起きます。

デモクリエイターやBandicamで固定フレームレートで録画しなおしましょう!

スポンサーリンク

【GAS】Twitter API v2でツリー投稿の実装

referenced_tweets,conversation_id,in_reply_to_user_idどれ?

投稿者のscreenNameからuserIDを割り出し、referenced_tweetsでツリー投稿できるのではないかと軽く実装しましたね。ただし、よくよくみると、このreferenced_tweetsはRetweetなども含まれているし、エラーなどをみているとfreeプランではうまくいかないのではないかと10分ぐらいで止めました。

const payload = {
  referenced_tweets: [
    {
      type: "replied_to",
      id: preTweetId
    }
  ]
}

ちなみに、conversation_idはスレッドを取得するものです。

もうひとつのアイデアがあったため、そちらに切り替えたらあっさりとスレッド投稿が実行できました。boothなどでツールとして販売することにしてしまったため、詳しい実装方法は控えさせてもらいます。

ヒントだけだしておくとin_reply_to_user_idで実装しました。ただ、v1.1みたいなやり方ではうまくいきません。。

解決するためにTwitterDevが書いたソースコードの中身などをあさりました。

スポンサーリンク

【GAS】Twitter APIの画像投稿・動画投稿でよくでるエラー

Twitter API v2 endpoints and limited v1.1 endpoints (e.g. media post, oauth) only. …

このエラーはTwitter API 1.1で使えないもの。V2を使いましょう。

メディアなどVer1.1で利用可能なものはv2に橋渡しすればよいです。

Exception: Request failed for https://api.twitter.com returned code 403. Truncated server response: {"errors":[{"message":"You currently have access to a subset of Twitter API v2 endpoints and limited v1.1 endpoints (e.g. media post, oauth) only. ... (use muteHttpExceptions option to examine full

“message”:”$.media_keys: is not defined in the schema and the schema

このエラーは型が違います。

{"errors":[{"message":"$.media_keys: is not defined in the schema and the schema does not allow additional properties"}],"title":"Invalid Request","detail":"One or more parameters to your request was invalid.","type":"https://api.twitter.com/2/problems/invalid-request"}
スポンサーリンク

Access TokenとAccess Token Secret

Access TokenとAccess Token Secretは、OAuth 1.0aの認証に必要。 OAuth 1.0aを使うとTwitter API1.1を利用できて、メディアのアップロードで画像投稿ができます! 今はメディアのアップロード以外で使いません!

スポンサーリンク

Bearer Token(ベアラートークン)

Bearer Token(ベアラートークン)はApplication-only authentication(アプリケーション専用認証)の一部として使用され、主に公開情報の取得に使われます。たとえば、一般的な検索や公開ツイートの取得などに使用されます。 厳密には書き込み専用のアプリでは不要なはずですが、アプリが拡張された場合や仕様変更に備えてAPIキーは全部いれておく方が安全策という気がします。

プログラマ初心者でツールをご購入の方は改変は自由です。時短したい方はよかったらどうぞ!(再販売と転載は禁止していますのでご了承ください。)

スポンサーリンク

chatGPT4君はTwitter Botツールを開発できるスキルがない!? (番外編コラム)

chatGPT4君、落ち込んじゃダメだよ(´;ω;`)

今回のプロジェクトではchatGPT君とはじめてくみました。

chatGPT4を使っています、1番賢いやつです。

しかし、Twitterの予約投稿ツールの開発は肝心なポイントでGPT君はすべて自覚なき嘘をついてしまいましたね。画像投稿、画像複数枚投稿、動画投稿、ツリー投稿などの肝心なコードはかけませんでした。しかも、GPTが劣化する前のやつ…。

全部自力で実装して解決です。

うーん、こんなもんかな(´・ω・`)。

誰でもかける簡単なコードをかいてもらう分にはタイピングなどは早いから使いどころはあります。僕よりかなりタイピングは早いです。むしろ、ChatGPTは使っていない人は損をしています。ただ、僕レベルでそう感じてしまったため、ベテランプログラマさんにはまだまだ叶う領域に達していませんね。

中級者以上のエンジニアはぐぐって、答えがなくても軽々解決してきますからね。

初心者エンジニアでぐぐって絶対に答えがないとわかっている人(このレベルまではできるようになります)は、そのようなエンジニアさんに会うとびっくりする人もいますね。

最近、AIを過剰に評価している人はどちらかというとちゃんと検証していない情報弱者?なのかなと気になりましすね。

初心者プログラマーさんでAIを過剰に評価している方は変な方向にハマってしまいます。適切な説明をして2回ぐらい試しても実装できなかったら、GPT君のコードをひきとって自分で書いた方が解決も早いはずです。

結論としてはプログラミングをちゃんと勉強しましょう(´・ω・`)という当たり前のところにおちつきました。

ただ、chatGPT君がいると開発工数が短くできますね。はじめてさわる言語などではかなり頼りになります。

やっぱGPT君すごい!(褒めてのばす)(`・ω・´)

【GAS】ツリー投稿・画像投稿・動画投稿で予約投稿するやり方【Twitter API】
Craft Twix(クラフトツイックス)のロゴ公開!

短期プロジェクトとなりましたが、Craft Twixもよろしくお願いします。

ほかにもいろいろと開発しています。ブログだけはなく、Twitterなどでも個人開発の話をしていきたいですね。

ご参考になれば幸いです。

スポンサーリンク
neruをフォローする
スポンサーリンク

コメント

  1. 楓子 より:

    はじめまして。
    突然のコメント失礼いたします。

    自身もX(旧Twitter)の自動投稿ツールを開発しておりますが、画像/動画付き投稿について1点お聞きしたいことがございます。

    v1で画像/動画アップロード→v2で投稿という形で実行できていた画像/動画付き投稿処理が、2023/11/20以降、機能しなくなってしまいました。
    (Expired tokenのエラー)

    タイミング的に、v1の「/1.1/statuses/update_with_media」が終了したことが原因と考えたのですが、検索すると未だに画像/動画付き投稿ができているとの投稿が散見され、不思議に思っています。

    https://developer.twitter.com/en/docs/twitter-api/migrate/twitter-api-endpoint-map
    上記のEndpoint mapでも、v2での media機能は「2024 Q1/Q2」のリリース予定とされており、まだ実装されていないようなのですが、neru様のツールでも未だ問題なく画像/動画付き投稿ができていますでしょうか?

    ツール販売中のため詳細は公開できないとのことですが、可能な範囲で構いませんのでご回答いただけると嬉しいです。
    どうぞよろしくお願いいたします。

    • neru neru より:

      申し訳ありません。気付くのが遅れました。

      画像投稿と動画投稿は特に問題なく投稿できています(本日確認済)。

      もしかしたら他が原因ではないでしょうか。Expired tokenエラーとは89エラーでしょうか。それであれば、APIを作り直せば改善できるはずです。
      このエラーはTwitter APIを使っていると起こる定番のエラーで、Expired tokenという訳のとおりなのですが、突然、トクーンが期限切れになる場合があります。
      運が悪いとでちゃうエラーで、改善方法は個人的に知る限り、APIの再作成しかありません。

      • 楓子 より:

        丁寧なご回答ありがとうございます。
        おっしゃる通り、API再作成で無事に画像/動画投稿の機能が復活しました!
        本当に助かりました、ありがとうございます!!

        • neru neru より:

          X(Twitter)社の管理の影響を受けて、こちらではどうしようもないみたいです。ちょっと面倒に巻き込まれてしまった感じのエラーです。
          Twitter APIと付き合っていくために、個人的にも何度か作り直しています。

          無事、伝わって解決したようでよかったです!

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