media.go 2.5 KB

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