home timeline functionality

This commit is contained in:
gutmet 2020-09-17 21:44:57 +02:00
parent cea0ee0938
commit 84e0b08eae
2 changed files with 48 additions and 31 deletions

View File

@ -1,7 +1,7 @@
drivel drivel
======== ========
drivel is a Twitter command line interface for status updates, media upload, mentions and replies. drivel is a Twitter command line interface for status updates, media upload, your home timeline, your mention timeline and replies.
My personal opinion is that you shouldn't be on Twitter in the first place, but My personal opinion is that you shouldn't be on Twitter in the first place, but
anyway... anyway...
@ -21,7 +21,13 @@ go build drivel.go credentials.go
usage usage
----- -----
To get your last 100 mentions: To get the last 100 tweets of your home timeline:
```
drivel home
```
To get the last 100 tweets of your mention timeline:
``` ```
drivel mentions drivel mentions

View File

@ -21,6 +21,7 @@ const (
UPLOAD_ENDPOINT = "https://upload.twitter.com/1.1/media/upload.json" UPLOAD_ENDPOINT = "https://upload.twitter.com/1.1/media/upload.json"
STATUS_ENDPOINT = "https://api.twitter.com/1.1/statuses/update.json" STATUS_ENDPOINT = "https://api.twitter.com/1.1/statuses/update.json"
MENTIONS_ENDPOINT = "https://api.twitter.com/1.1/statuses/mentions_timeline.json?tweet_mode=extended&count=100" MENTIONS_ENDPOINT = "https://api.twitter.com/1.1/statuses/mentions_timeline.json?tweet_mode=extended&count=100"
HOME_ENDPOINT = "https://api.twitter.com/1.1/statuses/home_timeline.json?tweet_mode=extended&count=100"
) )
func optLogFatal(decorum string, err error) { func optLogFatal(decorum string, err error) {
@ -369,34 +370,6 @@ func status(args []string) error {
return nil return nil
} }
type Mention struct {
Full_text string
Id_str string
User MentionUser
}
func (m Mention) String() string {
return m.User.Name + " " + "(" + m.Id_str + ")" + ":\n" + m.Full_text
}
type MentionUser struct {
Name string
}
func mentions(args []string) error {
log := func(err error) { optLogFatal("mentions", err) }
client := getClient()
body := get(client, MENTIONS_ENDPOINT)
var mentions []Mention
err := json.Unmarshal(body, &mentions)
log(err)
for _, mention := range mentions {
fmt.Println(mention)
fmt.Println("---------")
}
return nil
}
func reply(args []string) error { func reply(args []string) error {
if len(args) < 2 { if len(args) < 2 {
fmt.Fprintln(os.Stderr, "Usage: drivel reply TWEET_ID MESSAGE [FILE1, FILE2, ...]") fmt.Fprintln(os.Stderr, "Usage: drivel reply TWEET_ID MESSAGE [FILE1, FILE2, ...]")
@ -406,10 +379,48 @@ func reply(args []string) error {
return nil return nil
} }
type Status struct {
Full_text string
Id_str string
User StatusUser
}
func (m Status) String() string {
return m.User.Name + " " + "(" + m.Id_str + ")" + ":\n" + m.Full_text
}
type StatusUser struct {
Name string
}
func timeline(endpoint string) {
log := func(err error) { optLogFatal("timeline", err) }
client := getClient()
body := get(client, endpoint)
var tweets []Status
err := json.Unmarshal(body, &tweets)
log(err)
for _, tweet := range tweets {
fmt.Println(tweet)
fmt.Println("---------")
}
}
func mentions(args []string) error {
timeline(MENTIONS_ENDPOINT)
return nil
}
func home(args []string) error {
timeline(HOME_ENDPOINT)
return nil
}
func main() { func main() {
commands := []goutil.Command{ commands := []goutil.Command{
goutil.NewCommand("status", status, "post a status with message and/or media"), goutil.NewCommand("status", status, "post a status with message and/or media"),
goutil.NewCommand("mentions", mentions, "get your mentions"), goutil.NewCommand("home", home, "get your home timeline"),
goutil.NewCommand("mentions", mentions, "get your mention timeline"),
goutil.NewCommand("reply", reply, "reply to a tweet with a specific ID"), goutil.NewCommand("reply", reply, "reply to a tweet with a specific ID"),
} }
err := goutil.Execute(commands) err := goutil.Execute(commands)