Skip to content

Instantly share code, notes, and snippets.

@utahta
Created October 16, 2016 09:59
Show Gist options
  • Save utahta/762279c5463bbbd69397c131016a1a45 to your computer and use it in GitHub Desktop.
Save utahta/762279c5463bbbd69397c131016a1a45 to your computer and use it in GitHub Desktop.
video tweet with anaconda
package main
import (
"encoding/base64"
"io/ioutil"
"log"
"net/url"
"github.com/ChimeraCoder/anaconda"
)
func main() {
anaconda.SetConsumerKey("consumer key")
anaconda.SetConsumerSecret("consumer secret")
api := anaconda.NewTwitterApi("access token", "access token secret")
bytes, err := ioutil.ReadFile("/path/to/video.mp4")
if err != nil {
log.Fatal("Failed to read mp4 file")
}
// ビデオアップロードの準備
// anaconda は media_category に未対応の模様
// 仮にこのパラメーターを指定すると、アップロードが非同期になる模様
// see https://dev.twitter.com/rest/reference/post/media/upload-finalize
totalBytes := len(bytes)
media, err := api.UploadVideoInit(totalBytes, "video/mp4")
if err != nil {
log.Fatal("Failed to UploadVideoInit")
}
// 1度に Append 出来るのは 5MB まで。
// よしなに分割してあげる必要がある
// see https://dev.twitter.com/rest/reference/post/media/upload-append
mediaMaxLen := 5 * 1024 * 1024
segment := 0
for i := 0; i < totalBytes; i += mediaMaxLen {
var mediaData string
if i+mediaMaxLen < totalBytes {
mediaData = base64.StdEncoding.EncodeToString(bytes[i : i+mediaMaxLen])
} else {
mediaData = base64.StdEncoding.EncodeToString(bytes[i:])
}
if err = api.UploadVideoAppend(media.MediaIDString, segment, mediaData); err != nil {
break
}
segment += 1
}
if err != nil {
log.Fatal("Failed to UploadVideoAppend")
}
// ビデオアップロード完ということを伝える
video, err := api.UploadVideoFinalize(media.MediaIDString)
if err != nil {
log.Fatal("Failed to UploadVideoFinalize")
}
// media_category を指定している場合は、processing_info の存在をみて必要があればN秒待機といったことをしないといけない
// が、anaconda は未対応なので、そもそもそのようなレスポンスは返してこない
// ツイート
params := url.Values{}
params.Add("media_ids", video.MediaIDString)
if _, err := api.PostTweet("text text.", params); err != nil {
log.Fatal("Failed to PostTweet")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment