arnaucube
arnaucube/argosPublic Self-hosted repository
show detected bots retweeting a tweet
arnaucode idoctnef@openmailbox.org
Thu, 22 Jun 2017 13:27:22 +0200
commit

657dd9b80545081fb2ae204033870c38b0653804

parent

2716285451c44073a3c1cef5001e086d6018682f

6 files changed, 92 insertions(+), 6 deletions(-)

jump to
M README.md → README.md

@@ -32,6 +32,8 @@ 4. Delete Tweets

5. Delete Favs (Likes) 6. Random tweet - post a tweet with content from a selected account +7. Tweet analyzer + - analyze the retweets and detect Bots ![screen](https://raw.githubusercontent.com/arnaucode/argos/master/screen3.png "screen")
M analyzeDates.go → analyzeDates.go

@@ -37,6 +37,32 @@ }

fmt.Print("\x1b[0m") //defaultColor fmt.Println(" ") } +func printBarRetweets(n int, lowest int, highest int) { + bar := int((float64(n) / float64(highest)) * 40) + + if n == lowest { + fmt.Print("\x1b[36;1m") //cyan + } + if n == highest { + fmt.Print("\x1b[31;1m") //red + } + + for i := 0; i < bar; i++ { + fmt.Print("█") + } + + if bar == 0 && n > 0 { + fmt.Print("█") + } + if n == lowest { + //fmt.Print(" lowest") + } + if n == highest { + fmt.Print(" possible bots") + } + fmt.Print("\x1b[0m") //defaultColor + fmt.Println(" ") +} func getHigherValueOfMap(m map[string]int) (int, int) { var values []int for _, v := range m {

@@ -106,3 +132,24 @@ fmt.Println(" ")

fmt.Println("Daily activity distribution (per hour)") analyzeHours(tweets) } + +func printTimeRetweets(dates map[string]int) { + lowest, highest := getHigherValueOfMap(dates) + + for k, v := range dates { + fmt.Print(k + " - " + strconv.Itoa(v) + "tw") + fmt.Print(" ") + printBarRetweets(v, lowest, highest) + } +} + +func analyzeTimeRetweets(tweets []twitter.Tweet) { + var dates = make(map[string]int) + for _, v := range tweets { + /*time := strings.Split(v.CreatedAt, " ")[3] + hour := strings.Split(time, ":")[0]*/ + dates[v.CreatedAt]++ + } + printTimeRetweets(dates) + //printSortedMapStringInt(dates, 0) +}
M argos → argos

          
M main.go → main.go

@@ -7,7 +7,7 @@ "os"

"strings" ) -const version = "0.3-beta" +const version = "0.4-beta" const minNumWords = 10 const minNumHashtag = 2 const minNumUserInteractions = 2
M optionAnalyzeTweet.go → optionAnalyzeTweet.go

@@ -10,6 +10,10 @@

"github.com/dghubble/go-twitter/twitter" ) +type DateRT struct { + Retweets []twitter.Tweet +} + func optionAnalyzeTweet(client *twitter.Client) { newcommand := bufio.NewReader(os.Stdin) fmt.Print("enter link of the tweet: ")

@@ -25,11 +29,44 @@ tweetId, err := strconv.ParseInt(tweetIdStr, 10, 64)

if err != nil { fmt.Println(err) } - tweets := getRetweets(client, tweetId) - for _, tweet := range tweets { - source := strings.Split(strings.Split(tweet.Source, ">")[1], "<")[0] - fmt.Println(tweet.CreatedAt + " @" + tweet.User.ScreenName + ", source: " + source) + + tweet, _, err := client.Statuses.Show(tweetId, nil) + if err != nil { + fmt.Println(err) + } + fmt.Print("tweet text: ") + c.Yellow(tweet.Text) + + retweets := getRetweets(client, tweetId) + + var dates = make(map[string]DateRT) + for _, retweet := range retweets { + retws := dates[retweet.CreatedAt].Retweets + retws = append(retws, retweet) + var currDate DateRT + currDate.Retweets = retws + dates[retweet.CreatedAt] = currDate } fmt.Print("total of: ") - fmt.Println(len(tweets)) + fmt.Println(len(retweets)) + + for k, v := range dates { + printDateRT(k, v) + } + c.Purple("Warning: Twitter API only gives the last 100 Retweets") +} +func printDateRT(k string, v DateRT) { + fmt.Print("\x1b[32;1m" + k + "\x1b[0m") + fmt.Println(" " + strconv.Itoa(len(v.Retweets)) + " Retweets at this date:") + for _, retweet := range v.Retweets { + source := strings.Split(strings.Split(retweet.Source, ">")[1], "<")[0] + if len(v.Retweets) > 1 { + fmt.Print("\x1b[31;1m") //red + } + fmt.Print(" @" + retweet.User.ScreenName) + fmt.Print("\x1b[0m") //defaultColor + fmt.Println(", source: " + source) + + } + }