Skip to content

Instantly share code, notes, and snippets.

@zaltoprofen
Created December 17, 2015 02:36
Show Gist options
  • Save zaltoprofen/619cfbfe6cb5af29440e to your computer and use it in GitHub Desktop.
Save zaltoprofen/619cfbfe6cb5af29440e to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"log"
"net/url"
"os"
"github.com/ChimeraCoder/anaconda"
"github.com/deckarep/golang-set"
"github.com/joho/godotenv"
)
func check(s *string, dict map[string]string, key string) bool {
str, ok := dict[key]
if ok {
*s = str
}
return ok
}
func main() {
env, err := godotenv.Read(os.Getenv("HOME") + "/.env")
if err != nil {
log.Fatal(err)
}
var ck, cs, at, as string
if !check(&ck, env, "CONSUMER_KEY") || !check(&cs, env, "CONSUMER_SECRET") ||
!check(&at, env, "ACCESS_TOKEN") || !check(&as, env, "ACCESS_TOKEN_SECRET") {
log.Fatal("Cannot construct twitter api object")
}
anaconda.SetConsumerKey(ck)
anaconda.SetConsumerSecret(cs)
api := anaconda.NewTwitterApi(at, as)
v := url.Values{}
v.Set("count", "5000")
c, err := api.GetFollowersIds(v)
if err != nil {
log.Fatal(err)
}
followers := mapset.NewSet()
for _, u := range c.Ids {
followers.Add(u)
}
c, err = api.GetFriendsIds(v)
if err != nil {
log.Fatal(err)
}
friends := mapset.NewSet()
for _, u := range c.Ids {
friends.Add(u)
}
var diff []int64
for d := range friends.Difference(followers).Iter() {
diff = append(diff, d.(int64))
}
var users []anaconda.User
for len(diff) > 0 {
if us, err := api.GetUsersLookupByIds(diff[:100], url.Values{}); err == nil {
users = append(users, us...)
} else {
log.Println("Skip")
}
if len(diff) <= 100 {
break
}
diff = diff[100:]
}
for _, u := range users {
fmt.Printf("%s\n", u.ScreenName)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment