ウラガミ・ライフ

空欄に書く気持ち良さとか。

botからTwitterの動画投稿するのに、どハマりした件について

ニチアサは見てますよー。

ハミィ可愛いし、ナーガよくわかんないしw

そしてたかみー……バグルドライバー欲しくなったんですが、完全に再販待ちですw


さて、最近Pythonを使ったTwitter botを作っているのですが、今日は初めてローカルではなく、実際のTwitterを使って動作させてみました。

ローカルではTwitterに投稿するところとかは省いてテストしていたんですが、実際の環境じゃないとわからないことっていっぱいありますね;;;

まー、当たり前っちゃ当たり前w



そんな中でハマってしまったのが動画の投稿です。

ライブラリは「python-twitter」を使いましたが、もしかしたら「Tweepy」などの別なライブラリであればこの辺りハマることないのかもしれませんw



動画を1つリストに入れると怒られる

今回は各投稿に使う投稿のテキスト、および画像や動画のパスをJSONに持って、投稿時をそれを読み込んでPostするという形式をとったのですが…

ただの画像であれば、4つまでのパスをリストに入れ、

api.PostUpdates(status=text, media=media_list)

これでOKでした。


もちろん画像が1件でも、0件でもこれでOKでした。
ただ、画像ではなく動画だと、リストに入れただけで怒られる。
動画は1件じゃないとあかんやでって言われます。
入れてるの1件なんですけどね;;;


なので、

if len(media_list) == 1:
    api.PostUpdates(status=text, media=media_list[0])
else:
    api.PostUpdates(status=text, media=media_list)

謎にこんなコードを書かないといけない状態でした;;

※ 5/25追記
ちぃといつさんのコメントの通り、上記対応が必要なのはバージョン3.2.1のpython-twitterになります。
最新バージョンの「3.3」ではこのバグは修正されておりますので

api.PostUpdates(status=text, media=media_list)

こちらで全てのパターンが動作することになります。

動画のレギュレーション?

なんかまずMP4じゃないとダメらしいです。
あと10MB以下じゃないとダメ。
さらに30秒未満じゃないとダメらしい。


今30秒以上の動画なんてがっつり上がってるじゃないー!


って思ってたんですが、もし30秒以上の場合は分割してアップしないとダメなんだとか。
ここら辺はせっかくライブラリ使ってるんだからやって欲しいところですが;;;

さらに動画のエンコード形式??

これ正直自分でも狐につままれたような感覚なのですが……


まず私が動画の形式変換に使ったのが「Adapter」というもの。
Gifとかにもしてくれるので、職場でも重宝しています。


んで……
このツールの場合、mp4には、Encoderが「libx264」っていうのと、「mpeg4」ってのがありました。
ここで「mpeg4」を選択した状態で.mp4を作ると、Twitter投稿時に「twitter.error.TwitterError: InvalidContent.」なんて言われます。
こう言われても何も対処できないっしょw


で「libx264」で.mp4を作ると、うまくいきました。
ここら辺の知識全くないので、なんでこんなことになったかわかりませんが;;;;

今日ほとんどこれにやられていました。




でも普段Twitterを使っている中でこんなこと意識したことないじゃないですか。
これって、使ってる側が意識しなくてもいいように、各アプリが作られているってことなんですよねー。
そんな気付きもちょっと手を動かすとあるものですねー。