github.com/bitcubate/cryptojournal@v1.2.5-0.20171102134152-f578b3d788ab/src/lib/twitter/twitter.go (about) 1 // Package twitter providers a wrapper calling the twitter v1.1 API via https 2 package twitter 3 4 import ( 5 "fmt" 6 "io/ioutil" 7 "net/http" 8 9 "github.com/mrjones/oauth" 10 ) 11 12 // See https://dev.twitter.com/rest/reference/post/statuses/update 13 14 // Twitter config keys - set in the config file or in environment 15 // these should be set once with setup on app startup, before any request 16 // assumes caller doesn't want to send with multiple details 17 var key, secret, accessToken, accessTokenSecret string 18 19 // Setup sets our secret keys 20 func Setup(k, s, at, ats string) error { 21 if len(k) == 0 || len(s) == 0 || len(at) == 0 || len(ats) == 0 { 22 return fmt.Errorf("#error setting secrets, null value") 23 } 24 25 key = k 26 secret = s 27 accessToken = at 28 accessTokenSecret = ats 29 30 return nil 31 } 32 33 // Tweet sends a status update to twitter - returns the response body or error 34 func Tweet(s string) ([]byte, error) { 35 consumer := oauth.NewConsumer(key, secret, oauth.ServiceProvider{}) 36 //consumer.Debug(true) 37 token := &oauth.AccessToken{Token: accessToken, Secret: accessTokenSecret} 38 39 url := "https://api.twitter.com/1.1/statuses/update.json" 40 data := map[string]string{"status": s} 41 42 response, err := consumer.Post(url, data, token) 43 if err != nil { 44 return nil, err 45 } 46 defer response.Body.Close() 47 fmt.Println("Response:", response.StatusCode, response.Status) 48 body, err := ioutil.ReadAll(response.Body) 49 if err != nil { 50 return nil, err 51 } 52 53 // Check for unexpected status codes, and report them 54 if response.StatusCode != http.StatusOK { 55 return nil, fmt.Errorf("#error sending tweet, unexpected status:%d\n\n%s\n", response.StatusCode, body) 56 } 57 58 return body, nil 59 }