1package anaconda 2 3import ( 4 "net/url" 5 "strconv" 6) 7 8type Media struct { 9 MediaID int64 `json:"media_id"` 10 MediaIDString string `json:"media_id_string"` 11 Size int `json:"size"` 12 Image Image `json:"image"` 13} 14 15type Image struct { 16 W int `json:"w"` 17 H int `json:"h"` 18 ImageType string `json:"image_type"` 19} 20 21type ChunkedMedia struct { 22 MediaID int64 `json:"media_id"` 23 MediaIDString string `json:"media_id_string"` 24 ExpiresAfterSecs int `json:"expires_after_secs"` 25} 26 27type Video struct { 28 VideoType string `json:"video_type"` 29} 30 31type VideoMedia struct { 32 MediaID int64 `json:"media_id"` 33 MediaIDString string `json:"media_id_string"` 34 Size int `json:"size"` 35 ExpiresAfterSecs int `json:"expires_after_secs"` 36 Video Video `json:"video"` 37} 38 39func (a TwitterApi) UploadMedia(base64String string) (media Media, err error) { 40 v := url.Values{} 41 v.Set("media_data", base64String) 42 43 var mediaResponse Media 44 45 response_ch := make(chan response) 46 a.queryQueue <- query{UploadBaseUrl + "/media/upload.json", v, &mediaResponse, _POST, response_ch} 47 return mediaResponse, (<-response_ch).err 48} 49 50func (a TwitterApi) UploadVideoInit(totalBytes int, mimeType string) (chunkedMedia ChunkedMedia, err error) { 51 v := url.Values{} 52 v.Set("command", "INIT") 53 v.Set("media_type", mimeType) 54 v.Set("total_bytes", strconv.FormatInt(int64(totalBytes), 10)) 55 56 var mediaResponse ChunkedMedia 57 58 response_ch := make(chan response) 59 a.queryQueue <- query{UploadBaseUrl + "/media/upload.json", v, &mediaResponse, _POST, response_ch} 60 return mediaResponse, (<-response_ch).err 61} 62 63func (a TwitterApi) UploadVideoAppend(mediaIdString string, 64 segmentIndex int, base64String string) error { 65 66 v := url.Values{} 67 v.Set("command", "APPEND") 68 v.Set("media_id", mediaIdString) 69 v.Set("media_data", base64String) 70 v.Set("segment_index", strconv.FormatInt(int64(segmentIndex), 10)) 71 72 var emptyResponse interface{} 73 74 response_ch := make(chan response) 75 a.queryQueue <- query{UploadBaseUrl + "/media/upload.json", v, &emptyResponse, _POST, response_ch} 76 return (<-response_ch).err 77} 78 79func (a TwitterApi) UploadVideoFinalize(mediaIdString string) (videoMedia VideoMedia, err error) { 80 v := url.Values{} 81 v.Set("command", "FINALIZE") 82 v.Set("media_id", mediaIdString) 83 84 var mediaResponse VideoMedia 85 86 response_ch := make(chan response) 87 a.queryQueue <- query{UploadBaseUrl + "/media/upload.json", v, &mediaResponse, _POST, response_ch} 88 return mediaResponse, (<-response_ch).err 89} 90