🐕

[Unity]Twitterに投稿する

2022/08/20に公開

概要

HMDでVRコンテンツを体験していると、写真や動画を撮れますが、SNSで共有しようとすると、一度HMDを外して、アプリでファイルを取得して、投稿になり、手間だなと思っていました。
VRから直接SNSに投稿したいと思い、APIを使って動画を投稿できるようにしました
どのSNSを使うかについては、APIが整っているTwitterを採用しました

基本的な実装方針はこちらの方のを参考にしています
https://github.com/toofusan/Twity

バージョン

Unity Editor: 2021.3.5f1
Twitter API: v1.1

実装方針

Twitter APIで投稿する方法は、二パターンあります
一つ目はブラウザを開く必要があるため、今回は二つ目の方法で実装しました

ユーザー認証する

認証リクエストを送り、認証用画面を開き、認証できたアカウントで投稿します

認証済みユーザーのアカウントで投稿する

あらかじめ認証情報を取得しておき、そのアカウントで投稿します

実装

準備

TwitterのAPIを利用できるようにする

Twitter APIを利用するためには、Developer Portalにログインできるようにする必要があります
※本記事は、v1.1を対象にしています
※申請方法は、本記事では割愛します

動画撮影できるアセットをアタッチする

Twitter指定の形式の動画ファイルが保存できれば何でも良いです
私は、AVProというAssetを使いました

※注意
AVProは、そのままMeta Quest2で使うと、Twitter APIでエラーになりました
"Video tool throw an exception"

Video formatのCABACがNoになるのが問題のようでした。
https://twittercommunity.com/t/videotool-threw-an-exception-on-video-upload/72508/17

※こちらの対応方法が見つかったら、後日更新します
※Unity Editorからであれば、問題なく動作します(Macで検証)

Chunked uploadの実装

Twitterで動画を投稿するためには、Chunked uploadを利用する必要があります
Chunked uploadとは、動画ファイルのバイナリデータをchunkという単位に分割して、chunkごとにアップロードする方法です

Twitterでは動画を投稿するまでに、以下のように複数回APIを呼び出す必要があります

  1. INIT:データ送信の開始を伝える
  2. APPEND:バイナリーデータを送信する(chunkに分けて、複数回送信する)
  3. FINALIZE:データ送信の終了を伝える
  4. STATUS:ビデオの処理が完了したことを確認する
  5. statuses/update:動画付きで、投稿する

では、実際の実装内容を見ていきます

Init

まずは、データ送信の開始をTwitterに伝えます

API仕様

APPEND

chunkにして、データを送ります。サイズが大きい場合は、分割して複数回送信します
例では、1MBごとに送信をしています。5MBの動画であれば、5回APIを呼び出す必要があります

API仕様

FINALIZE

データ送信の終了をTwitterに伝えます

API仕様

STATUS

FINALIZEしても、Twitter側で投稿の準備ができていないため、準備完了できたか問い合わせをします
stateがSuccesedになっていないと、投稿ができないため、Succesedになるまで問い合わせを続けます

API仕様

statuses/update

最後に、アップロードした動画のmedi_idを指定して、動画付きでTweetします

API仕様

参考

https://qiita.com/toofu/items/075efed6ab1f23e94388
https://github.com/SnapStreamJason/TinyTwitter

Discussion