separate user filters for home and mentions
This commit is contained in:
parent
b21bc5825d
commit
0f83e34c84
|
@ -27,7 +27,7 @@ type credentials struct {
|
|||
accessTokenSecret string
|
||||
}
|
||||
|
||||
func (c *credentials) writeToAppDir(appDir string) {
|
||||
func (c *credentials) writeCredentials(appDir string) {
|
||||
write := func(file string, s string) {
|
||||
optLogFatal("writeToAppDir", ioutil.WriteFile(path.Join(appDir, file), []byte(s), 0640))
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ func (c *credentials) writeToAppDir(appDir string) {
|
|||
write(fileAccessTokenSecret, c.accessTokenSecret)
|
||||
}
|
||||
|
||||
func readFromAppDir(appDir string) *credentials {
|
||||
func readCredentials(appDir string) *credentials {
|
||||
read := func(f string) string {
|
||||
s, err := goutil.ReadFile(path.Join(appDir, f))
|
||||
optLogFatal("readFromAppDir", err)
|
||||
|
@ -65,11 +65,11 @@ func createAppDir(appDir string) {
|
|||
at := ask("Access Token")
|
||||
ats := ask("Access Token Secret")
|
||||
c := credentials{ck, cs, at, ats}
|
||||
c.writeToAppDir(appDir)
|
||||
c.writeCredentials(appDir)
|
||||
}
|
||||
|
||||
func loadCredentials() *credentials {
|
||||
log := func(err error) { optLogFatal("loadCredentials", err) }
|
||||
func appDir() string {
|
||||
log := func(err error) { optLogFatal("appDir", err) }
|
||||
currentUser, err := user.Current()
|
||||
log(err)
|
||||
homeDir := currentUser.HomeDir
|
||||
|
@ -77,12 +77,11 @@ func loadCredentials() *credentials {
|
|||
if !goutil.PathExists(appDir) {
|
||||
createAppDir(appDir)
|
||||
}
|
||||
c := readFromAppDir(appDir)
|
||||
return c
|
||||
return appDir
|
||||
}
|
||||
|
||||
func getClient() *http.Client {
|
||||
c := loadCredentials()
|
||||
c := readCredentials(appDir())
|
||||
config := oauth1.NewConfig(c.consumerKey, c.consumerSecret)
|
||||
token := oauth1.NewToken(c.accessToken, c.accessTokenSecret)
|
||||
return config.Client(oauth1.NoContext, token)
|
||||
|
|
67
drivel.go
67
drivel.go
|
@ -12,6 +12,7 @@ import (
|
|||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
@ -588,12 +589,14 @@ func (m Status) String() string {
|
|||
return s
|
||||
}
|
||||
|
||||
func PrintTweets(tweets []Status) {
|
||||
func PrintTweets(tweets []Status, userFilter hashset) {
|
||||
for _, tweet := range tweets {
|
||||
if !userFilter.contains(tweet.User.Screen_name) {
|
||||
fmt.Println(tweet)
|
||||
fmt.Println("---------")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (m Status) URL() string {
|
||||
return "https://twitter.com/" + m.User.Screen_name + "/status/" + m.Id_str
|
||||
|
@ -619,29 +622,28 @@ func lookup(args []string) error {
|
|||
os.Exit(-1)
|
||||
}
|
||||
tweets := _lookup(args)
|
||||
PrintTweets(tweets)
|
||||
PrintTweets(tweets, nil)
|
||||
return nil
|
||||
}
|
||||
|
||||
func timeline(endpoint string, quiet bool) []Status {
|
||||
func timeline(endpoint string) []Status {
|
||||
log := func(err error) { optLogFatal("timeline", err) }
|
||||
body := get(endpoint)
|
||||
var tweets []Status
|
||||
err := json.Unmarshal(body, &tweets)
|
||||
log(err)
|
||||
if !quiet {
|
||||
PrintTweets(tweets)
|
||||
}
|
||||
return tweets
|
||||
}
|
||||
|
||||
func mentions(args []string) error {
|
||||
timeline(MENTIONS_ENDPOINT, false)
|
||||
tweets := timeline(MENTIONS_ENDPOINT)
|
||||
PrintTweets(tweets, mentionsFilter)
|
||||
return nil
|
||||
}
|
||||
|
||||
func home(args []string) error {
|
||||
timeline(HOME_ENDPOINT, false)
|
||||
tweets := timeline(HOME_ENDPOINT)
|
||||
PrintTweets(tweets, homeFilter)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -650,7 +652,8 @@ func UserTimelineParameters(screenName string) string {
|
|||
}
|
||||
|
||||
func userTimeline(args []string) error {
|
||||
timeline(TIMELINE_ENDPOINT+UserTimelineParameters(args[0]), false)
|
||||
tweets := timeline(TIMELINE_ENDPOINT + UserTimelineParameters(args[0]))
|
||||
PrintTweets(tweets, nil)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -747,7 +750,7 @@ func wipeTimeline(likes bool, keepDays int) {
|
|||
}
|
||||
n := 0
|
||||
now := time.Now()
|
||||
tweets := timeline(endpoint, true)
|
||||
tweets := timeline(endpoint)
|
||||
for {
|
||||
for _, tweet := range tweets {
|
||||
daysSince := now.Sub(tweet.Created_at.Time).Hours() / 24
|
||||
|
@ -764,7 +767,7 @@ func wipeTimeline(likes bool, keepDays int) {
|
|||
}
|
||||
}
|
||||
}
|
||||
newTweets := timeline(endpoint, true)
|
||||
newTweets := timeline(endpoint)
|
||||
if !equals(newTweets, tweets) {
|
||||
tweets = newTweets
|
||||
} else {
|
||||
|
@ -791,10 +794,52 @@ func wipeCommand() (goutil.CommandFlagsInit, goutil.CommandFunc) {
|
|||
return flagsInit, func([]string) error { return wipe(f) }
|
||||
}
|
||||
|
||||
type hashset map[string]interface{}
|
||||
|
||||
func makeHashset() hashset {
|
||||
return make(map[string]interface{})
|
||||
}
|
||||
|
||||
func (s hashset) add(member string) {
|
||||
if s != nil {
|
||||
s[member] = nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s hashset) contains(member string) bool {
|
||||
if s == nil {
|
||||
return false
|
||||
}
|
||||
if _, ok := s[member]; ok {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func setFilters(appDir string) {
|
||||
getHashset := func(s string, err error) hashset {
|
||||
set := makeHashset()
|
||||
if err == nil {
|
||||
for _, id := range strings.Split(s, "\n") {
|
||||
if strings.TrimSpace(id) != "" {
|
||||
set.add(id)
|
||||
}
|
||||
}
|
||||
}
|
||||
return set
|
||||
}
|
||||
homeFilter = getHashset(goutil.ReadFile(path.Join(appDir, "FilterHome")))
|
||||
mentionsFilter = getHashset(goutil.ReadFile(path.Join(appDir, "FilterMentions")))
|
||||
}
|
||||
|
||||
var client *http.Client
|
||||
var homeFilter hashset
|
||||
var mentionsFilter hashset
|
||||
|
||||
func main() {
|
||||
client = getClient()
|
||||
setFilters(appDir())
|
||||
commands := []goutil.Command{
|
||||
goutil.NewCommand("status", status, "post a status with message and/or media"),
|
||||
goutil.NewCommand("home", home, "get your home timeline"),
|
||||
|
|
Loading…
Reference in New Issue
Block a user