add subcommand 'following'
This commit is contained in:
parent
a39bdae46b
commit
268bc13b79
|
@ -55,6 +55,12 @@ To lookup tweets with specific IDs:
|
||||||
drivel lookup TWEET_ID1 [TWEET_ID2 TWEET_ID3 ...]
|
drivel lookup TWEET_ID1 [TWEET_ID2 TWEET_ID3 ...]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To get a list of the people you follow:
|
||||||
|
|
||||||
|
```
|
||||||
|
drivel following
|
||||||
|
```
|
||||||
|
|
||||||
To wipe your timeline and likes (keepDays defaults to 10, can only reach back as far as the result of the timeline):
|
To wipe your timeline and likes (keepDays defaults to 10, can only reach back as far as the result of the timeline):
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
34
drivel.go
34
drivel.go
|
@ -32,6 +32,7 @@ const (
|
||||||
LOOKUP_ENDPOINT = "https://api.twitter.com/1.1/statuses/lookup.json?tweet_mode=extended"
|
LOOKUP_ENDPOINT = "https://api.twitter.com/1.1/statuses/lookup.json?tweet_mode=extended"
|
||||||
RETWEET_ENDPOINT = "https://api.twitter.com/1.1/statuses/retweet/"
|
RETWEET_ENDPOINT = "https://api.twitter.com/1.1/statuses/retweet/"
|
||||||
LIKE_ENDPOINT = "https://api.twitter.com/1.1/favorites/create.json"
|
LIKE_ENDPOINT = "https://api.twitter.com/1.1/favorites/create.json"
|
||||||
|
FOLLOWING_ENDPOINT = "https://api.twitter.com/1.1/friends/list.json?count=200"
|
||||||
DESTROY_STATUS_ENDPOINT = "https://api.twitter.com/1.1/statuses/destroy/"
|
DESTROY_STATUS_ENDPOINT = "https://api.twitter.com/1.1/statuses/destroy/"
|
||||||
DESTROY_LIKE_ENDPOINT = "https://api.twitter.com/1.1/favorites/destroy.json"
|
DESTROY_LIKE_ENDPOINT = "https://api.twitter.com/1.1/favorites/destroy.json"
|
||||||
)
|
)
|
||||||
|
@ -418,6 +419,38 @@ func like(args []string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func _following() (following hashset) {
|
||||||
|
log := func(err error) { optLogFatal("following", err) }
|
||||||
|
following = makeHashset()
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, r)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
var cursor int64 = -1
|
||||||
|
var err error
|
||||||
|
for cursor != 0 && err == nil {
|
||||||
|
body := get(FOLLOWING_ENDPOINT + FollowingParameters(cursor))
|
||||||
|
var response FollowingResponse
|
||||||
|
err = json.Unmarshal(body, &response)
|
||||||
|
log(err)
|
||||||
|
for _, user := range response.Users {
|
||||||
|
following.add(user.Screen_name)
|
||||||
|
}
|
||||||
|
cursor = response.Next_cursor
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func following(args []string) error {
|
||||||
|
checkUsage(args, 0, 0, "following")
|
||||||
|
set := _following()
|
||||||
|
for user, _ := range set {
|
||||||
|
fmt.Println(user)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func unlike(id string) {
|
func unlike(id string) {
|
||||||
log := func(err error) { optLogFatal("unlike", err) }
|
log := func(err error) { optLogFatal("unlike", err) }
|
||||||
body := post(DESTROY_LIKE_ENDPOINT, UnlikeRequest(id))
|
body := post(DESTROY_LIKE_ENDPOINT, UnlikeRequest(id))
|
||||||
|
@ -579,6 +612,7 @@ func main() {
|
||||||
goutil.NewCommandWithFlags("quote", wrapCommand(quote), "quote retweet a tweet with a specific ID"),
|
goutil.NewCommandWithFlags("quote", wrapCommand(quote), "quote retweet a tweet with a specific ID"),
|
||||||
goutil.NewCommandWithFlags("retweet", wrapCommand(retweet), "retweet a tweet with a specific ID"),
|
goutil.NewCommandWithFlags("retweet", wrapCommand(retweet), "retweet a tweet with a specific ID"),
|
||||||
goutil.NewCommandWithFlags("like", wrapCommand(like), "like a tweet with a specific ID"),
|
goutil.NewCommandWithFlags("like", wrapCommand(like), "like a tweet with a specific ID"),
|
||||||
|
goutil.NewCommand("following", following, "try to get the list of users you are following"),
|
||||||
goutil.NewCommandWithFlags("wipe", wipeCommand, "wipe your timeline and likes"),
|
goutil.NewCommandWithFlags("wipe", wipeCommand, "wipe your timeline and likes"),
|
||||||
}
|
}
|
||||||
_ = goutil.Execute(commands)
|
_ = goutil.Execute(commands)
|
||||||
|
|
10
requests.go
10
requests.go
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -58,3 +59,12 @@ func UnlikeRequest(id string) url.Values {
|
||||||
func DestroyParameters(id string) string {
|
func DestroyParameters(id string) string {
|
||||||
return id + ".json?tweet_mode=extended"
|
return id + ".json?tweet_mode=extended"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func FollowingParameters(cursor int64) string {
|
||||||
|
return "&skip_status=true&include_user_entities=false&cursor=" + strconv.FormatInt(cursor, 10)
|
||||||
|
}
|
||||||
|
|
||||||
|
type FollowingResponse struct {
|
||||||
|
Users []StatusUser
|
||||||
|
Next_cursor int64
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user