Go
Latest commit b2574bf Sep 3, 2017 @ChimeraCoder committed on GitHub Add race detector to tests in CI build (#208)
* Add race detector to tests in Travis CI build

* Add race detector to tests in AppVeyor build
Permalink
Failed to load latest commit information.
json Support the new `extended tweet_mode` API (#200) Sep 2, 2017
vendor/github.com Add gofmt check to build (#202) Sep 2, 2017
.appveyor.yml Add race detector to tests in CI build (#208) Sep 3, 2017
.gitignore Add anaconda.test (test binary) to .gitignore Dec 24, 2014
.travis.yml Add race detector to tests in CI build (#208) Sep 3, 2017
COPYING Add LICENSE (symlinked from COPYING). MIT/X11. Mar 4, 2013
Gopkg.lock Add support for dep (#201) Sep 2, 2017
Gopkg.toml Add support for dep (#201) Sep 2, 2017
LICENSE Add LICENSE (symlinked from COPYING). MIT/X11. Mar 4, 2013
README Fixed formatting of Error Handling subheaders Apr 7, 2017
README.md Add README Mar 4, 2013
account.go Use cleanValues more consistently (#204) Sep 2, 2017
backoff.go Update streaming funcs for latest version of azr/backoff Jan 15, 2016
blocks.go Use client baseUrl instead of constant BaseUrl Nov 17, 2015
configuration.go Use client baseUrl instead of constant BaseUrl Nov 17, 2015
directmessage.go Change TwitterUser->User and remove unnecessary logging statements Dec 29, 2013
directmessages.go Implement DeleteDirectMessage (direct_messages/destroy) May 6, 2017
errors.go Add error code that Twitter sometimes returns Feb 6, 2015
example_test.go Add Go 1.5 and 1.6 to build (#139) May 9, 2016
favorites.go Use client baseUrl instead of constant BaseUrl Nov 17, 2015
friends_followers.go Close channel in GetFriendsListAll on non-nil error (#186) Sep 3, 2017
geosearch.go Use client baseUrl instead of constant BaseUrl Nov 17, 2015
list.go Allow additional values to be passed in to /list endpoints via url.Va… Dec 24, 2014
lists.go Add method to fetch list tweets by slug and owner_screen_name (#207) Sep 3, 2017
log.go Update documentation for logging Mar 30, 2015
media.go Run gofmt (#140) Jun 3, 2016
mutes.go Use client baseUrl instead of constant BaseUrl Nov 17, 2015
oembed.go Use cleanValues more consistently (#204) Sep 2, 2017
oembed_test.go Update URL field returned by OEmbed test Jun 4, 2016
place.go Differentiate between GeoSearch PlaceResult and Tweet Place Jul 19, 2015
rate_limit_status.go Add application/rate_limit_status (#205) Sep 3, 2017
relationship.go Use client baseUrl instead of constant BaseUrl Nov 17, 2015
search.go Use client baseUrl instead of constant BaseUrl Nov 17, 2015
streaming.go Fix streaming parsing for delete/direct_message (#162) Sep 3, 2017
timeline.go Use cleanValues more consistently (#204) Sep 2, 2017
trends.go Use cleanValues more consistently (#204) Sep 2, 2017
tweet.go Support the new `extended tweet_mode` API (#200) Sep 2, 2017
tweets.go Implement unretweet support which return back the status normal tweet. Jun 15, 2017
twitter.go Automatically deflate based on Content-Encoding (#179) Sep 3, 2017
twitter_entities.go JSON tags for entities (#183) Sep 3, 2017
twitter_test.go JSON tags for entities (#183) Sep 3, 2017
twitter_user.go Updated Twitter API entities Mar 6, 2017
users.go Add users/report_spam endpoint (#198) Sep 3, 2017
webhook.go Use cleanValues more consistently (#204) Sep 2, 2017

README.md

Anaconda

Build Status Build Status GoDoc

Anaconda is a simple, transparent Go package for accessing version 1.1 of the Twitter API.

Successful API queries return native Go structs that can be used immediately, with no need for type assertions.

Examples

Authentication

If you already have the access token (and secret) for your user (Twitter provides this for your own account on the developer portal), creating the client is simple:

anaconda.SetConsumerKey("your-consumer-key")
anaconda.SetConsumerSecret("your-consumer-secret")
api := anaconda.NewTwitterApi("your-access-token", "your-access-token-secret")

Queries

Queries are conducted using a pointer to an authenticated TwitterApi struct. In v1.1 of Twitter's API, all requests should be authenticated.

searchResult, _ := api.GetSearch("golang", nil)
for _ , tweet := range searchResult.Statuses {
    fmt.Println(tweet.Text)
}   

Certain endpoints allow separate optional parameter; if desired, these can be passed as the final parameter.

//Perhaps we want 30 values instead of the default 15
v := url.Values{}
v.Set("count", "30")
result, err := api.GetSearch("golang", v)

(Remember that url.Values is equivalent to a map[string][]string, if you find that more convenient notation when specifying values). Otherwise, nil suffices.

Endpoints

Anaconda implements most of the endpoints defined in the Twitter API documentation. For clarity, in most cases, the function name is simply the name of the HTTP method and the endpoint (e.g., the endpoint GET /friendships/incoming is provided by the function GetFriendshipsIncoming).

In a few cases, a shortened form has been chosen to make life easier (for example, retweeting is simply the function Retweet)

Error Handling, Rate Limiting, and Throttling

Error Handling

Twitter errors are returned as an ApiError, which satisfies the error interface and can be treated as a vanilla error. However, it also contains the additional information returned by the Twitter API that may be useful in deciding how to proceed after encountering an error.

If you make queries too quickly, you may bump against Twitter's rate limits. If this happens, anaconda automatically retries the query when the rate limit resets, using the X-Rate-Limit-Reset header that Twitter provides to determine how long to wait.

In other words, users of the anaconda library should not need to handle rate limiting errors themselves; this is handled seamlessly behind-the-scenes. If an error is returned by a function, another form of error must have occurred (which can be checked by using the fields provided by the ApiError struct).

(If desired, this feature can be turned off by calling ReturnRateLimitError(true).)

Throttling

Anaconda now supports automatic client-side throttling of queries to avoid hitting the Twitter rate-limit.

This is currently off by default; however, it may be turned on by default in future versions of the library, as the implementation is improved.

To set a delay between queries, use the SetDelay method:

    api.SetDelay(10 * time.Second)

Delays are set specific to each TwitterApi struct, so queries that use different users' access credentials are completely independent.

To turn off automatic throttling, set the delay to 0:

    api.SetDelay(0 * time.Second)

Query Queue Persistence

If your code creates a NewTwitterApi in a regularly called function, you'll need to call .Close() on the API struct to clear the queryQueue and allow the goroutine to exit. Otherwise you could see goroutine and therefor heap memory leaks in long-running applications.

Google App Engine

Since Google App Engine doesn't make the standard http.Transport available, it's necessary to tell Anaconda to use a different client context.

	api = anaconda.NewTwitterApi("", "")
	c := appengine.NewContext(r)
	api.HttpClient.Transport = &urlfetch.Transport{Context: c}

License

Anaconda is free software licensed under the MIT/X11 license. Details provided in the LICENSE file.