func main() { var ( err error client *twittergo.Client req *http.Request resp *twittergo.APIResponse tweet *twittergo.Tweet ) client, err = LoadCredentials() if err != nil { fmt.Printf("Could not parse CREDENTIALS file: %v\n", err) os.Exit(1) } body, header, err := GetBody() if err != nil { fmt.Printf("Problem loading body: %v\n", err) os.Exit(1) } endpoint := "/1.1/statuses/update_with_media.json" req, err = http.NewRequest("POST", endpoint, body) if err != nil { fmt.Printf("Could not parse request: %v\n", err) os.Exit(1) } req.Header.Set("Content-Type", header) resp, err = client.SendRequest(req) if err != nil { fmt.Printf("Could not send request: %v\n", err) os.Exit(1) } tweet = &twittergo.Tweet{} err = resp.Parse(tweet) if err != nil { fmt.Printf("Problem parsing response: %v\n", err) os.Exit(1) } fmt.Printf("ID: %v\n", tweet.Id()) fmt.Printf("Tweet: %v\n", tweet.Text()) fmt.Printf("User: %v\n", tweet.User().Name()) if resp.HasRateLimit() { fmt.Printf("Rate limit: %v\n", resp.RateLimit()) fmt.Printf("Rate limit remaining: %v\n", resp.RateLimitRemaining()) fmt.Printf("Rate limit reset: %v\n", resp.RateLimitReset()) } else { fmt.Printf("Could not parse rate limit from response.\n") } if resp.HasMediaRateLimit() { fmt.Printf("Media Rate limit: %v\n", resp.MediaRateLimit()) fmt.Printf("Media Rate limit remaining: %v\n", resp.MediaRateLimitRemaining()) fmt.Printf("Media Rate limit reset: %v\n", resp.MediaRateLimitReset()) } else { fmt.Printf("Could not parse media rate limit from response.\n") } }
func main() { var ( err error client *twittergo.Client apiResp *twittergo.APIResponse mediaResp twittergo.MediaResponse mediaId string mediaBytes []byte ) client, err = LoadCredentials() if err != nil { fmt.Printf("Could not parse CREDENTIALS file: %v\n", err) os.Exit(1) } if mediaBytes, err = ioutil.ReadFile("video_upload/twitter_media_upload.mp4"); err != nil { fmt.Printf("Error reading media: %v\n", err) os.Exit(1) } if mediaResp, err = SendMediaRequest( client, "https://upload.twitter.com/1.1/media/upload.json", map[string]string{ "command": "INIT", "media_type": "video/mp4", "total_bytes": fmt.Sprintf("%d", len(mediaBytes)), }, nil, ); err != nil { fmt.Printf("Problem sending INIT request: %v\n", err) os.Exit(1) } mediaId = fmt.Sprintf("%v", mediaResp.MediaId()) if mediaResp, err = SendMediaRequest( client, "https://upload.twitter.com/1.1/media/upload.json", map[string]string{ "command": "APPEND", "media_id": mediaId, "segment_index": "0", }, mediaBytes, ); err != nil { fmt.Printf("Problem sending APPEND request: %v\n", err) os.Exit(1) } if mediaResp, err = SendMediaRequest( client, "https://upload.twitter.com/1.1/media/upload.json", map[string]string{ "command": "FINALIZE", "media_id": mediaId, }, nil, ); err != nil { fmt.Printf("Problem sending FINALIZE request: %v\n", err) os.Exit(1) } if apiResp, err = SendApiRequest( client, "/1.1/statuses/update.json", map[string]string{ "status": fmt.Sprintf("Media! %v", time.Now()), "media_ids": mediaId, }, ); err != nil { fmt.Printf("Problem sending Tweet request: %v\n", err) os.Exit(1) } var ( tweet *twittergo.Tweet = &twittergo.Tweet{} ) if err = apiResp.Parse(tweet); err != nil { fmt.Printf("Problem parsing Tweet response: %v\n", err) os.Exit(1) } fmt.Printf("ID: %v\n", tweet.Id()) fmt.Printf("Tweet: %v\n", tweet.Text()) fmt.Printf("User: %v\n", tweet.User().Name()) fmt.Printf("Media Id: %v\n", mediaResp.MediaId()) if apiResp.HasRateLimit() { fmt.Printf("Rate limit: %v\n", apiResp.RateLimit()) fmt.Printf("Rate limit remaining: %v\n", apiResp.RateLimitRemaining()) fmt.Printf("Rate limit reset: %v\n", apiResp.RateLimitReset()) } else { fmt.Printf("Could not parse rate limit from response.\n") } if apiResp.HasMediaRateLimit() { fmt.Printf("Media Rate limit: %v\n", apiResp.MediaRateLimit()) fmt.Printf("Media Rate limit remaining: %v\n", apiResp.MediaRateLimitRemaining()) fmt.Printf("Media Rate limit reset: %v\n", apiResp.MediaRateLimitReset()) } else { fmt.Printf("Could not parse media rate limit from response.\n") } }