new retweet subcommand

This commit is contained in:
gutmet 2020-09-19 22:31:09 +02:00
parent d3632b9b4a
commit b3b14e615e
2 changed files with 37 additions and 6 deletions

View File

@ -2,7 +2,7 @@ drivel
========
drivel is a Twitter command line interface for status updates, media upload,
your home timeline, your mention timeline, replies, quotes and likes.
your home timeline, your mention timeline, replies, quotes, retweets and likes.
My personal opinion is that you shouldn't be on Twitter in the first place, but
anyway...
@ -40,21 +40,27 @@ To like a tweet with a specific ID:
drivel like TWEET_ID
```
To update your status with optional media upload...
To retweet a tweet with a specific ID:
```
drivel retweet TWEET_ID
```
To update your status with optional media upload:
```
drivel status STATUS [FILE1, FILE2, ...]
```
...reply to a tweet with a specific ID...
To reply to a tweet with a specific ID:
```
drivel reply TWEET_ID MESSAGE [FILE1, FILE2, ...]
```
...or quote a tweet with a specific ID...
To quote a tweet with a specific ID:
```
drivel quote TWEET_ID MESSAGE [FILE1, FILE2, ...]
@ -112,4 +118,4 @@ with id 1013200061533171712
final note
----------
You can buy me a beer [here](http://paypal.me/AlexanderWeinhold).
You can buy me a beer [here](http://paypal.me/AlexanderWeinhold).

View File

@ -25,6 +25,7 @@ const (
MENTIONS_ENDPOINT = "https://api.twitter.com/1.1/statuses/mentions_timeline.json?tweet_mode=extended&count=200"
HOME_ENDPOINT = "https://api.twitter.com/1.1/statuses/home_timeline.json?tweet_mode=extended&count=200"
LOOKUP_ENDPOINT = "https://api.twitter.com/1.1/statuses/lookup.json?tweet_mode=extended"
RETWEET_ENDPOINT = "https://api.twitter.com/1.1/statuses/retweet/"
LIKE_ENDPOINT = "https://api.twitter.com/1.1/favorites/create.json"
)
@ -479,7 +480,6 @@ func updateStatus(args []string, previous ObjectID, embedTweet ObjectID) {
d.status[0] += " " + tweets[0].URL()
}
}
d.push(httpClient, previous)
}
@ -557,6 +557,30 @@ func home(args []string) error {
return nil
}
func RetweetParameters(id string) string {
return id + ".json"
}
func retweet(args []string) error {
log := func(err error) { optLogFatal("retweet", err) }
if len(args) != 1 {
fmt.Fprintln(os.Stderr, "USAGE: drivel retweet TWEET_ID")
os.Exit(-1)
}
client := getClient()
id := args[0]
tweets := lookup(client, []string{id})
if len(tweets) != 1 {
log(errors.New("Could not find tweet " + id))
}
body := send(client, RETWEET_ENDPOINT+RetweetParameters(id), nil)
var retweet Status
err := json.Unmarshal(body, &retweet)
log(err)
fmt.Println("Retweeted", tweets[0])
return nil
}
func LikeRequest(id string) url.Values {
return map[string][]string{
"id": {id},
@ -586,6 +610,7 @@ func main() {
goutil.NewCommand("mentions", mentions, "get your mention timeline"),
goutil.NewCommand("reply", reply, "reply to a tweet with a specific ID"),
goutil.NewCommand("quote", quote, "quote retweet a tweet with a specific ID"),
goutil.NewCommand("retweet", retweet, "retweet a tweet with a specific ID"),
goutil.NewCommand("like", like, "like a tweet with a specific ID"),
}
err := goutil.Execute(commands)