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  }