質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Q&A

解決済

1回答

524閲覧

GASでtwitterの動画投稿をしたいが、APPEND/FINALIZEあたりがうまくいかない

tyr777

総合スコア1

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

0グッド

2クリップ

投稿2024/02/26 13:44

編集2024/02/26 13:45

実現したいこと

正常動作が行われ、APPENDが完了し、FINALIZEまで行きたい。

発生している問題・分からないこと

GASでtwitterに動画アップを行いたいのですが、base64化した動画が、ちゃんとFINALIZEで格納されない。

エラーメッセージ

error

1movieFinalize_json:{"request":"/1.1/media/upload.json","error":"Segments do not add up to provided total file size."}

該当のソースコード

GAS

1 //APPEND 2 const segment_index = 0; 3 const bytes_sent = 0; 4 const chunk_size = 1000000; 5 const chunk_num = Math.ceil(base64filesize / chunk_size); 6 for (let index = 0; index < chunk_num; index++) { 7 console.log("chunk_size*index:"+chunk_size*index) 8 const chunk = base64Data.slice(chunk_size * index, chunk_size * (index + 1)); 9 console.log("base64filesize:"+base64filesize) 10 console.log("chunk.length:"+chunk.length); 11 const movieAppendOption = { 12 'method' : "post", 13 'payload': { 14 'command':'APPEND', 15 'media_id':movieInit['media_id_string'], 16 'segment_index':index, 17 'media_data':chunk 18 } 19 }; 20 console.log("movieAppendOption:"+JSON.stringify(movieAppendOption)); 21 makeRequest2(uploadUrl, movieAppendOption) 22 .then(appendResult => { 23 console.log('appendResult:', appendResult); 24 }); 25 26 } 27 28 //FINALIZE 29 const movieFinalizeOption = { 30 'method' : "post", 31 "muteHttpExceptions" : true, 32 'payload': { 33 'command':'FINALIZE', 34 'media_id':movieInit['media_id_string'] 35 } 36 }; 37 console.log("movie_finalize_option_json:"+JSON.stringify(movieFinalizeOption)); 38 console.log("movie_finalize_option:"+movieFinalizeOption); 39 const movieFinalize = makeRequest(uploadUrl, movieFinalizeOption); 40 console.log("movieFinalize_json:"+JSON.stringify(movieFinalize)); 41 console.log("movieFinalize:"+movieFinalize); 42 43

GAS

1// API リクエストを送信するための関数(jsonパースしない) 2async function makeRequest2(url, options) { 3 const service = getService(); 4 const res = await service.fetch(url, options); // fetch() メソッドを待機 5 const result = res.getContentText(); 6 7 //console.log(JSON.stringify(result)); 8 return result; 9}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

参考サイトがあまり多くなく、いろいろと試行錯誤して一つずつ見てみたが、FINALIZEでエラーが出てるのは、うまくAPPENDできていないのではないかと思った。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YellowGreen

2024/02/27 06:46 編集

INITで設定したファイルサイズ(total_bytes)と APPENDするファイルのサイズ(base64エンコード前?)が合致しているか確認されましたか? または、 アップロードできる動画サイズ等の上限を超えてはいませんか?
tyr777

2024/02/27 10:03

コメントありがとうございます。 init側のファイルサイズを64base後のものを配置していたのが原因だったようです。 ありがとうございました。 ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
YellowGreen

2024/02/27 10:06

私は、質問しただけですから、 解決方法を見つけたのは質問者様ですので、 自己解決としていただけたらと思います。
tyr777

2024/02/27 12:08

承知いたしました。きっかけはYellowGreenさんの投稿でした。ありがとうございました。
guest

回答1

0

自己解決

init側のファイルサイズを64base後のものを配置していたのが原因で、
INITで設定したファイルサイズ(total_bytes)と
APPENDするファイルのサイズ(base64エンコード前?)
が一致しているか調べて調整して解決した。

投稿2024/02/27 12:08

tyr777

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問