Created
October 16, 2016 09:59
-
-
Save utahta/762279c5463bbbd69397c131016a1a45 to your computer and use it in GitHub Desktop.
video tweet with anaconda
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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