Skip to content

Instantly share code, notes, and snippets.

@hiroosak
Created December 10, 2014 05:55
Show Gist options
  • Save hiroosak/dec0017bd4baa3fef021 to your computer and use it in GitHub Desktop.
Save hiroosak/dec0017bd4baa3fef021 to your computer and use it in GitHub Desktop.
package main
import (
"bytes"
"encoding/base64"
"encoding/json"
"fmt"
"net/http"
"net/http/httputil"
"github.com/davecgh/go-spew/spew"
)
// GetAccessToken is fetch application-only authentication access_token.
func GetAccessToken(consumerKey, consumerSecret string) string {
bearer := fmt.Sprintf("%s:%s", consumerKey, consumerSecret)
bearerBase64 := base64.StdEncoding.EncodeToString([]byte(bearer))
client := &http.Client{}
r := bytes.NewReader([]byte(`grant_type=client_credentials`))
req, _ := http.NewRequest("POST", "https://api.twitter.com/oauth2/token", r)
req.Header.Set("Authorization", fmt.Sprintf("Basic %s", bearerBase64))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8")
resp, err := client.Do(req)
if err != nil {
panic(err)
}
var i map[string]string
dec := json.NewDecoder(resp.Body)
if err = dec.Decode(&i); err != nil {
panic(err)
}
spew.Dump(i)
return i["access_token"]
}
func request(req *http.Request) *http.Response {
client := &http.Client{}
dump, _ := httputil.DumpRequestOut(req, true)
fmt.Printf("%s\n", dump)
resp, err := client.Do(req)
if err != nil {
panic(err)
}
dumpResp, _ := httputil.DumpResponse(resp, true)
fmt.Printf("%s\n", dumpResp)
return resp
}
func GetUserTimeline(token, screenName string) interface{} {
url := fmt.Sprintf("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=%s", screenName)
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
req.Header.Set("Content-Type", "application/json")
resp := request(req)
var i interface{}
dec := json.NewDecoder(resp.Body)
if err := dec.Decode(&i); err != nil {
panic(err)
}
return i
}
func GetRateLimit(token string) interface{} {
url := "https://api.twitter.com/1.1/application/rate_limit_status.json?resources=statuses"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
req.Header.Set("Content-Type", "application/json")
resp := request(req)
var i interface{}
dec := json.NewDecoder(resp.Body)
if err := dec.Decode(&i); err != nil {
panic(err)
}
return i
}
func main() {
key := "<consumer-key>"
secret := "<consumer-secret>"
accessToken := GetAccessToken(key, secret)
GetUserTimeline(accessToken, "kikoxxx")
GetRateLimit(accessToken)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment