プログラミング学習

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

プログラミング学習

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で画像複数枚投稿の実装

これではうまくいかきません。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などでも個人開発の話をしていきたいですね。

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

コメント