Skip to content

Instantly share code, notes, and snippets.

@patrick91
Created May 23, 2017 15:34
Show Gist options
  • Save patrick91/725b15c249c6149c3cd41c7a82bb7280 to your computer and use it in GitHub Desktop.
Save patrick91/725b15c249c6149c3cd41c7a82bb7280 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"html"
"log"
"net/http"
"github.com/dghubble/go-twitter/twitter"
"github.com/dghubble/oauth1"
"github.com/docopt/docopt-go"
)
func makeDemux() twitter.SwitchDemux {
// Convenience Demux demultiplexed stream messages
demux := twitter.NewSwitchDemux()
demux.Tweet = func(tweet *twitter.Tweet) {
fmt.Println("tweet", tweet.Text)
}
demux.Event = func(event *twitter.Event) {
fmt.Printf("%#v\n", event)
}
return demux
}
func startStream(client *twitter.Client) *twitter.Stream {
fmt.Println("Starting Stream...")
// FILTER
filterParams := &twitter.StreamFilterParams{
Track: []string{"patrick"},
StallWarnings: twitter.Bool(true),
}
stream, err := client.Streams.Filter(filterParams)
if err != nil {
log.Fatal(err)
}
demux := makeDemux()
// Receive messages until stopped or stream quits
go demux.HandleChan(stream.Messages)
return stream
}
func startServer() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
})
http.ListenAndServe(fmt.Sprintf(":%d", 8888), nil)
}
func main() {
usage := `Twitter Realtime.
Usage:
tr <TWITTER_CONSUMER_KEY> <TWITTER_CONSUMER_SECRET> <TWITTER_ACCESS_TOKEN> <TWITTER_ACCESS_TOKEN_SECRET>
tr -h | --help
tr --version
Options:
-h --help Show this screen.
--version Show version.`
arguments, _ := docopt.Parse(usage, nil, true, "Twitter Realtime 1.0", false)
fmt.Println(arguments)
fmt.Println(arguments["<TWITTER_CONSUMER_KEY>"].(string))
config := oauth1.NewConfig(
arguments["<TWITTER_CONSUMER_KEY>"].(string),
arguments["<TWITTER_CONSUMER_SECRET>"].(string),
)
token := oauth1.NewToken(
arguments["<TWITTER_ACCESS_TOKEN>"].(string),
arguments["<TWITTER_ACCESS_TOKEN_SECRET>"].(string),
)
httpClient := config.Client(oauth1.NoContext, token)
client := twitter.NewClient(httpClient)
stream := startStream(client)
defer stream.Stop()
startServer()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment