diff --git a/cmd/fetch_tweet_to_stdout/main.go b/cmd/fetch_tweet_to_stdout/main.go deleted file mode 100644 index 863e4f0..0000000 --- a/cmd/fetch_tweet_to_stdout/main.go +++ /dev/null @@ -1,62 +0,0 @@ -package main - -import ( - "os" - "fmt" - "offline_twitter/scraper" - // "time" - "strconv" - "log" - "strings" -) - -const INCLUDE_REPLIES = true; - -// input: e.g., "https://twitter.com/michaelmalice/status/1395882872729477131" -func parse_tweet(url string) (scraper.TweetID, error) { - parts := strings.Split(url, "/") - if len(parts) != 6 { - return 0, fmt.Errorf("Tweet format isn't right (%d)", len(parts)) - } - if parts[0] != "https:" || parts[1] != "" || parts[2] != "twitter.com" || parts[4] != "status" { - return 0, fmt.Errorf("Tweet format isn't right") - } - id, err := strconv.Atoi(parts[5]) - if err != nil { - return 0, err - } - return scraper.TweetID(id), nil -} - -func main() { - if len(os.Args) < 2 { - log.Fatal("Must provide tweet! Exiting...") - } - - tweet_id, err := parse_tweet(os.Args[1]) - if err != nil { - log.Fatal(err.Error()) - } - - if INCLUDE_REPLIES { - tweets, retweets, users, err := scraper.GetTweetFull(tweet_id) - if err != nil { - log.Fatal(err.Error()) - } - for _, t := range tweets { - fmt.Printf("%v\n", t) - } - for _, t := range retweets { - fmt.Printf("%v\n", t) - } - for _, u := range users { - fmt.Printf("%v\n", u) - } - } else { - tweet, err := scraper.GetTweet(tweet_id) - if err != nil { - log.Fatal(err.Error()) - } - fmt.Printf("%v\n", tweet) - } -} diff --git a/cmd/fetch_user_feed_to_stdout/main.go b/cmd/fetch_user_feed_to_stdout/main.go deleted file mode 100644 index 43aebc3..0000000 --- a/cmd/fetch_user_feed_to_stdout/main.go +++ /dev/null @@ -1,128 +0,0 @@ -package main - -import ( - "os" - "fmt" - "offline_twitter/scraper" - "log" - "sort" -) - -func main() { - if len(os.Args) < 2 { - log.Fatal("Must provide a user handle! Exiting...") - } - handle := scraper.UserHandle(os.Args[1]) - - user, err := scraper.GetUser(handle) - if err != nil { - log.Fatal("Error getting user profile: " + err.Error()) - } - - tweets, retweets, users, err := scraper.GetUserFeedFor(user.ID, 1) - if err != nil { - log.Fatal("Error getting user feed: " + err.Error()) - } - - display_feed(user, tweets, retweets, users) - - fmt.Printf("Got a total of %d tweets, %d retweets, from %d users\n", len(tweets), len(retweets), len(users)) -} - -func display_feed(user scraper.User, tweets []scraper.Tweet, retweets []scraper.Retweet, users []scraper.User) { - sort.Slice(tweets, func(i, j int) bool { return !tweets[i].PostedAt.Before(tweets[j].PostedAt) }) - tweet_map := make(map[scraper.TweetID]scraper.Tweet) - for _, t := range tweets { - tweet_map[t.ID] = t - } - - sort.Slice(retweets, func(i, j int) bool { return !retweets[i].RetweetedAt.Before(retweets[j].RetweetedAt) }) - users_dict := make(map[scraper.UserID]scraper.User) - for _, u := range users { - users_dict[u.ID] = u - } - - i := 0 - j := 0 - for i < len(tweets) && j < len(retweets) { - if !tweets[i].PostedAt.Before(retweets[j].RetweetedAt) { - tweet := tweets[i] - if tweet.UserID != user.ID { - i += 1 - continue - } - - user, ok := users_dict[tweet.UserID] - if !ok { - log.Fatalf("User not found: %q", tweet.UserID) - } - - print_tweet(tweets[i], user) - i += 1 - } else { - retweet := retweets[j] - if retweet.RetweetedByID != user.ID { - j += 1 - continue - } - tweet, ok := tweet_map[retweet.TweetID] - if !ok { - log.Fatalf("Tweet not found: %q", retweet.TweetID) - } - original_poster, ok := users_dict[tweet.UserID] - if !ok { - log.Fatalf("User not found: %q", tweet.UserID) - } - retweeter, ok := users_dict[retweet.RetweetedByID] - if !ok { - log.Fatalf("User not found: %q", retweet.RetweetedByID) - } - print_retweet(retweet, tweet, original_poster, retweeter) - j += 1 - } - } - for i < len(tweets) { - tweet := tweets[i] - if tweet.UserID != user.ID { - i += 1 - continue - } - - user, ok := users_dict[tweet.UserID] - if !ok { - log.Fatalf("User not found: %q", tweet.UserID) - } - - print_tweet(tweets[i], user) - i += 1 - } - for j < len(retweets) { - retweet := retweets[j] - if retweet.RetweetedByID != user.ID { - j += 1 - continue - } - tweet, ok := tweet_map[retweet.TweetID] - if !ok { - log.Fatalf("Tweet not found: %q", retweet.TweetID) - } - original_poster, ok := users_dict[tweet.UserID] - if !ok { - log.Fatalf("User not found: %q", tweet.UserID) - } - retweeter, ok := users_dict[retweet.RetweetedByID] - if !ok { - log.Fatalf("User not found: %q", retweet.RetweetedByID) - } - print_retweet(retweet, tweet, original_poster, retweeter) - j += 1 - } -} - -func print_tweet(tweet scraper.Tweet, user scraper.User) { - fmt.Printf("%s => %s\n Replies: %d Retweets: %d Likes: %d\n", user.DisplayName, tweet.Text, tweet.NumReplies, tweet.NumRetweets, tweet.NumLikes) -} - -func print_retweet(retweet scraper.Retweet, original_tweet scraper.Tweet, original_poster scraper.User, retweeter scraper.User) { - fmt.Printf("%s [retweet] %s => %s\n Replies: %d Retweets: %d Likes: %d\n", retweeter.DisplayName, original_poster.DisplayName, original_tweet.Text, original_tweet.NumReplies, original_tweet.NumRetweets, original_tweet.NumLikes) -} diff --git a/cmd/fetch_user_profile_to_stdout/main.go b/cmd/fetch_user_profile_to_stdout/main.go deleted file mode 100644 index 5342836..0000000 --- a/cmd/fetch_user_profile_to_stdout/main.go +++ /dev/null @@ -1,25 +0,0 @@ -package main - -import ( - "os" - "fmt" - "offline_twitter/scraper" - "log" -) - -// const INCLUDE_REPLIES = true; - -func main() { - if len(os.Args) < 2 { - log.Fatal("Must provide tweet!") - } - - user_handle := scraper.UserHandle(os.Args[1]) - - user, err := scraper.GetUser(user_handle) - if err != nil { - log.Fatal(err.Error()) - } - - fmt.Printf("%v\n", user) -}