diff --git a/doc/curl requests b/doc/curl requests index 8ff69ba..90c4048 100644 --- a/doc/curl requests +++ b/doc/curl requests @@ -3,13 +3,25 @@ curl -X POST \ https://api.twitter.com/1.1/guest/activate.json +# +# A user profile: curl \ -H "Authorization: Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA" \ - -H "X-Guest-Token: 1391174194361217029" \ + -H "X-Guest-Token: 1396177150890348547" \ https://api.twitter.com/graphql/4S2ihIKfF3xhp-ENxvUAfQ/UserByScreenName?variables=%7B%22screen_name%22%3A%22michaelmalice%22%2C%22withHighlightedLabel%22%3Atrue%7D +# +# A user's feed: curl \ -H "Authorization: Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA" \ - -H "X-Guest-Token: 1391214296126967816" \ + -H "X-Guest-Token: 1396177150890348547" \ https://api.twitter.com/2/timeline/profile/44067298.json + + +# +# A tweet and replies (conversation): +curl \ + -H "Authorization: Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA" \ + -H "X-Guest-Token: 1396177150890348547" \ + https://twitter.com/i/api/2/timeline/conversation/1395881699142160387.json diff --git a/scraper/api_types.go b/scraper/api_types.go new file mode 100644 index 0000000..e4be34b --- /dev/null +++ b/scraper/api_types.go @@ -0,0 +1,114 @@ +package scraper + +import "time" + +type APITweet struct { + ID string `json:"id_str"` + ConversationIDStr string `json:"conversation_id_str"` + CreatedAt string `json:"created_at"` + FavoriteCount int `json:"favorite_count"` + FullText string `json:"full_text"` + Entities struct { + Hashtags []struct { + Text string `json:"text"` + } `json:"hashtags"` + Media []struct { + MediaURLHttps string `json:"media_url_https"` + Type string `json:"type"` + URL string `json:"url"` + } `json:"media"` + URLs []struct { + ExpandedURL string `json:"expanded_url"` + URL string `json:"url"` + } `json:"urls"` + Mentions []struct { + UserName string `json:"screen_name"` + UserID string `json:"id_str"` + } + } `json:"entities"` + ExtendedEntities struct { + Media []struct { + IDStr string `json:"id_str"` + MediaURLHttps string `json:"media_url_https"` + Type string `json:"type"` + VideoInfo struct { + Variants []struct { + Bitrate int `json:"bitrate,omitempty"` + URL string `json:"url"` + } `json:"variants"` + } `json:"video_info"` + } `json:"media"` + } `json:"extended_entities"` + InReplyToStatusIDStr string `json:"in_reply_to_status_id_str"` + InReplyToScreenName string `json:"in_reply_to_screen_name"` + ReplyCount int `json:"reply_count"` + RetweetCount int `json:"retweet_count"` + QuoteCount int `json:"quote_count"` + RetweetedStatusIDStr string `json:"retweeted_status_id_str"` + QuotedStatusIDStr string `json:"quoted_status_id_str"` + Time time.Time `json:"time"` + UserIDStr string `json:"user_id_str"` +} + +type TweetResponse struct { + GlobalObjects struct { + Tweets map[string]APITweet `json:"tweets"` + Users map[string]struct { + CreatedAt string `json:"created_at"` + Description string `json:"description"` + Entities struct { + URL struct { + Urls []struct { + ExpandedURL string `json:"expanded_url"` + } `json:"urls"` + } `json:"url"` + } `json:"entities"` + FavouritesCount int `json:"favourites_count"` + FollowersCount int `json:"followers_count"` + FriendsCount int `json:"friends_count"` + IDStr string `json:"id_str"` + ListedCount int `json:"listed_count"` + Name string `json:"name"` + Location string `json:"location"` + PinnedTweetIdsStr []string `json:"pinned_tweet_ids_str"` + ProfileBannerURL string `json:"profile_banner_url"` + ProfileImageURLHTTPS string `json:"profile_image_url_https"` + Protected bool `json:"protected"` + ScreenName string `json:"screen_name"` + StatusesCount int `json:"statuses_count"` + Verified bool `json:"verified"` + } `json:"users"` + } `json:"globalObjects"` +} + +type UserResponse struct { + Data struct { + User struct { + ID string `json:"rest_id"` + Legacy struct { + CreatedAt string `json:"created_at"` + Description string `json:"description"` + Entities struct { + URL struct { + Urls []struct { + ExpandedURL string `json:"expanded_url"` + } `json:"urls"` + } `json:"url"` + } `json:"entities"` + FavouritesCount int `json:"favourites_count"` + FollowersCount int `json:"followers_count"` + FriendsCount int `json:"friends_count"` + ListedCount int `json:"listed_count"` + Name string `json:"name"` + Location string `json:"location"` + PinnedTweetIdsStr []string `json:"pinned_tweet_ids_str"` + ProfileBannerURL string `json:"profile_banner_url"` + ProfileImageURLHTTPS string `json:"profile_image_url_https"` + Protected bool `json:"protected"` + ScreenName string `json:"screen_name"` + StatusesCount int `json:"statuses_count"` + Verified bool `json:"verified"` + } `json:"legacy"` + } `json:"user"` + } `json:"data"` +} diff --git a/scraper/test_responses/dave_smith_anarchist_handbook.json b/scraper/test_responses/dave_smith_anarchist_handbook.json new file mode 100644 index 0000000..c09f13a --- /dev/null +++ b/scraper/test_responses/dave_smith_anarchist_handbook.json @@ -0,0 +1 @@ +{"globalObjects":{"tweets":{"1395883913625604102":{"created_at":"Fri May 21 23:27:13 +0000 2021","id_str":"1395883913625604102","full_text":"@ComicDaveSmith @michaelmalice Any word on the audiobook?","display_text_range":[31,57],"entities":{"user_mentions":[{"screen_name":"ComicDaveSmith","name":"Dave Smith","id_str":"467661480","indices":[0,15]},{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[16,30]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","in_reply_to_status_id_str":"1395881699142160387","in_reply_to_user_id_str":"467661480","in_reply_to_screen_name":"ComicDaveSmith","user_id_str":"211890657","retweet_count":0,"favorite_count":0,"reply_count":1,"quote_count":0,"conversation_id_str":"1395881699142160387","lang":"en"},"1396167263473094658":{"created_at":"Sat May 22 18:13:09 +0000 2021","id_str":"1396167263473094658","full_text":"@ComicDaveSmith @PatriotPaladin7 @michaelmalice Have you read it? Can you say if it was (or not) better than the Jolly Rogers Cook Book?","display_text_range":[48,137],"entities":{"user_mentions":[{"screen_name":"ComicDaveSmith","name":"Dave Smith","id_str":"467661480","indices":[0,15]},{"screen_name":"PatriotPaladin7","name":"\u271f\ud83c\uddfa\ud83c\uddf8Patriot Paladin\ud83c\uddfa\ud83c\uddf8\u271f","id_str":"1226776770","indices":[16,32]},{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[33,47]}]},"source":"\u003ca href=\"https:\/\/mobile.twitter.com\" rel=\"nofollow\"\u003eTwitter Web App\u003c\/a\u003e","in_reply_to_status_id_str":"1395881699142160387","in_reply_to_user_id_str":"467661480","in_reply_to_screen_name":"ComicDaveSmith","user_id_str":"2907523067","retweet_count":0,"favorite_count":1,"reply_count":1,"quote_count":0,"conversation_id_str":"1395881699142160387","lang":"en"},"1395882162939858946":{"created_at":"Fri May 21 23:20:16 +0000 2021","id_str":"1395882162939858946","full_text":"@ComicDaveSmith @michaelmalice That's because they think they are buying the Anarchist Cookbook","display_text_range":[31,95],"entities":{"user_mentions":[{"screen_name":"ComicDaveSmith","name":"Dave Smith","id_str":"467661480","indices":[0,15]},{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[16,30]}]},"source":"\u003ca href=\"https:\/\/mobile.twitter.com\" rel=\"nofollow\"\u003eTwitter Web App\u003c\/a\u003e","in_reply_to_status_id_str":"1395881699142160387","in_reply_to_user_id_str":"467661480","in_reply_to_screen_name":"ComicDaveSmith","user_id_str":"1083578073356910593","retweet_count":0,"favorite_count":29,"reply_count":2,"quote_count":0,"conversation_id_str":"1395881699142160387","lang":"en"},"1395882702956498945":{"created_at":"Fri May 21 23:22:25 +0000 2021","id_str":"1395882702956498945","full_text":"@ComicDaveSmith @michaelmalice So... How do I order one that's not a Kindle copy?","display_text_range":[31,81],"entities":{"user_mentions":[{"screen_name":"ComicDaveSmith","name":"Dave Smith","id_str":"467661480","indices":[0,15]},{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[16,30]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","in_reply_to_status_id_str":"1395881699142160387","in_reply_to_user_id_str":"467661480","in_reply_to_screen_name":"ComicDaveSmith","user_id_str":"2319549492","retweet_count":0,"favorite_count":0,"reply_count":7,"quote_count":1,"conversation_id_str":"1395881699142160387","lang":"en"},"1395881699142160387":{"created_at":"Fri May 21 23:18:25 +0000 2021","id_str":"1395881699142160387","full_text":"The fact that @michaelmalice new book \u2018The Anarchist Handbook\u2019 is just absolutely destroying on the charts is the largest white pill I\u2019ve swallowed in years.","display_text_range":[0,157],"entities":{"user_mentions":[{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[14,28]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","user_id_str":"467661480","retweet_count":245,"favorite_count":2898,"reply_count":75,"quote_count":12,"conversation_id_str":"1395881699142160387","lang":"en"},"1395882526330302471":{"created_at":"Fri May 21 23:21:43 +0000 2021","id_str":"1395882526330302471","full_text":"@davidpumpkins1 @ComicDaveSmith @michaelmalice Is it anything like the cookbook?","display_text_range":[47,80],"entities":{"user_mentions":[{"screen_name":"davidpumpkins1","name":"david pumpkins","id_str":"1083578073356910593","indices":[0,15]},{"screen_name":"ComicDaveSmith","name":"Dave Smith","id_str":"467661480","indices":[16,31]},{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[32,46]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","in_reply_to_status_id_str":"1395882162939858946","in_reply_to_user_id_str":"1083578073356910593","in_reply_to_screen_name":"davidpumpkins1","user_id_str":"294860819","retweet_count":0,"favorite_count":1,"reply_count":4,"quote_count":0,"conversation_id_str":"1395881699142160387","lang":"en"},"1395884070375198720":{"created_at":"Fri May 21 23:27:51 +0000 2021","id_str":"1395884070375198720","full_text":"@ComicDaveSmith @michaelmalice Is it only available in hard copy or kindle?","display_text_range":[31,75],"entities":{"user_mentions":[{"screen_name":"ComicDaveSmith","name":"Dave Smith","id_str":"467661480","indices":[0,15]},{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[16,30]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","in_reply_to_status_id_str":"1395881699142160387","in_reply_to_user_id_str":"467661480","in_reply_to_screen_name":"ComicDaveSmith","user_id_str":"975151075","retweet_count":0,"favorite_count":1,"reply_count":2,"quote_count":0,"conversation_id_str":"1395881699142160387","lang":"en"},"1395884081754300416":{"created_at":"Fri May 21 23:27:54 +0000 2021","id_str":"1395884081754300416","full_text":"@ComicDaveSmith @michaelmalice Wait how many colored pills are there ?","display_text_range":[31,70],"entities":{"user_mentions":[{"screen_name":"ComicDaveSmith","name":"Dave Smith","id_str":"467661480","indices":[0,15]},{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[16,30]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","in_reply_to_status_id_str":"1395881699142160387","in_reply_to_user_id_str":"467661480","in_reply_to_screen_name":"ComicDaveSmith","user_id_str":"1331239458629431300","retweet_count":1,"favorite_count":16,"reply_count":5,"quote_count":0,"conversation_id_str":"1395881699142160387","lang":"en"},"1395909630946160649":{"created_at":"Sat May 22 01:09:25 +0000 2021","id_str":"1395909630946160649","full_text":"@ComicDaveSmith @michaelmalice I can\u2019t wait to read it! I\u2019m also very excited by how well it\u2019s doing. The world is ready for something different.","display_text_range":[31,145],"entities":{"user_mentions":[{"screen_name":"ComicDaveSmith","name":"Dave Smith","id_str":"467661480","indices":[0,15]},{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[16,30]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","in_reply_to_status_id_str":"1395881699142160387","in_reply_to_user_id_str":"467661480","in_reply_to_screen_name":"ComicDaveSmith","user_id_str":"562991391","retweet_count":0,"favorite_count":13,"reply_count":1,"quote_count":0,"conversation_id_str":"1395881699142160387","lang":"en"},"1395896172779163648":{"created_at":"Sat May 22 00:15:56 +0000 2021","id_str":"1395896172779163648","full_text":"@ComicDaveSmith @michaelmalice Wait, what\u2019s a white pill?","display_text_range":[31,57],"entities":{"user_mentions":[{"screen_name":"ComicDaveSmith","name":"Dave Smith","id_str":"467661480","indices":[0,15]},{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[16,30]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","in_reply_to_status_id_str":"1395881699142160387","in_reply_to_user_id_str":"467661480","in_reply_to_screen_name":"ComicDaveSmith","user_id_str":"19813284","retweet_count":0,"favorite_count":2,"reply_count":8,"quote_count":0,"conversation_id_str":"1395881699142160387","lang":"en"},"1395884614296686592":{"created_at":"Fri May 21 23:30:00 +0000 2021","id_str":"1395884614296686592","full_text":"@ReadOrwells1984 @ComicDaveSmith @michaelmalice Both","display_text_range":[48,52],"entities":{"user_mentions":[{"screen_name":"ReadOrwells1984","name":"Monster Truck Gun Cult","id_str":"975151075","indices":[0,16]},{"screen_name":"ComicDaveSmith","name":"Dave Smith","id_str":"467661480","indices":[17,32]},{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[33,47]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","in_reply_to_status_id_str":"1395884070375198720","in_reply_to_user_id_str":"975151075","in_reply_to_screen_name":"ReadOrwells1984","user_id_str":"54272936","retweet_count":0,"favorite_count":2,"reply_count":1,"quote_count":0,"conversation_id_str":"1395881699142160387","lang":"en"}},"users":{"19813284":{"id_str":"19813284","name":"Tom Mullen","screen_name":"ThomasMullen","location":"Middleport, NY","description":"The real libertarian.","url":"https:\/\/t.co\/W2FhvXUUqK","entities":{"url":{"urls":[{"url":"https:\/\/t.co\/W2FhvXUUqK","expanded_url":"http:\/\/tommullen.net","display_url":"tommullen.net","indices":[0,23]}]},"description":{}},"followers_count":2002,"fast_followers_count":0,"normal_followers_count":2002,"friends_count":3050,"listed_count":45,"created_at":"Sat Jan 31 12:14:06 +0000 2009","favourites_count":6585,"geo_enabled":true,"statuses_count":12998,"media_count":377,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1301498865825218567\/FLtp1Z3-_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/19813284\/1603201272","profile_image_extensions_media_color":{"palette":[{"rgb":{"red":2,"green":185,"blue":1},"percentage":55.18},{"rgb":{"red":46,"green":32,"blue":5},"percentage":18.35},{"rgb":{"red":241,"green":151,"blue":104},"percentage":11.8},{"rgb":{"red":254,"green":238,"blue":218},"percentage":8.15},{"rgb":{"red":37,"green":128,"blue":8},"percentage":1.55}]},"profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":183,"green":144,"blue":136},"percentage":54.12},{"rgb":{"red":76,"green":62,"blue":56},"percentage":35.68},{"rgb":{"red":107,"green":99,"blue":59},"percentage":7.47},{"rgb":{"red":119,"green":103,"blue":59},"percentage":3.18},{"rgb":{"red":165,"green":101,"blue":92},"percentage":0.89}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1DA1F2","default_profile":true,"pinned_tweet_ids":[1065234064553193472],"pinned_tweet_ids_str":["1065234064553193472"],"can_media_tag":true,"advertiser_account_type":"promotable_user","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"2319549492":{"id_str":"2319549492","name":"Bready","screen_name":"LDSBread","location":"\u26f3\ufe0f","description":"Free From Earth Stains. A True L-D-Saint \ud83c\udf5e\ud83c\udf5e\ud83c\udf5e #BrighamsBoys #DezNat #HossNation","url":"https:\/\/t.co\/jRof98IFZV","entities":{"url":{"urls":[{"url":"https:\/\/t.co\/jRof98IFZV","expanded_url":"https:\/\/www.albertsons.com\/shop\/product-details.296010840.html","display_url":"albertsons.com\/shop\/product-d\u2026","indices":[0,23]}]},"description":{}},"followers_count":373,"fast_followers_count":0,"normal_followers_count":373,"friends_count":377,"listed_count":1,"created_at":"Thu Jan 30 21:22:55 +0000 2014","favourites_count":32118,"statuses_count":5662,"media_count":884,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1391574286452756480\/4rT2UiP0_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/2319549492\/1620101055","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":255,"green":255,"blue":255},"percentage":87.38},{"rgb":{"red":36,"green":14,"blue":12},"percentage":9.44},{"rgb":{"red":128,"green":120,"blue":115},"percentage":3.38},{"rgb":{"red":55,"green":8,"blue":14},"percentage":0.48},{"rgb":{"red":133,"green":113,"blue":107},"percentage":0.38}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":243,"green":229,"blue":210},"percentage":91.57},{"rgb":{"red":96,"green":118,"blue":123},"percentage":8.43}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"4A913C","has_extended_profile":true,"pinned_tweet_ids":[1316492300759916544],"pinned_tweet_ids_str":["1316492300759916544"],"advertiser_account_type":"none","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"562991391":{"id_str":"562991391","name":"David Fite","screen_name":"DavidFite","location":"New York, NY","description":"I post on the internet and connect people #GoodShitCaucus - #LibertyUnity - @fite4liberty","url":"https:\/\/t.co\/SDzETpGnNd","entities":{"url":{"urls":[{"url":"https:\/\/t.co\/SDzETpGnNd","expanded_url":"https:\/\/linktr.ee\/Fite4Liberty","display_url":"linktr.ee\/Fite4Liberty","indices":[0,23]}]},"description":{}},"followers_count":3168,"fast_followers_count":0,"normal_followers_count":3168,"friends_count":1578,"listed_count":16,"created_at":"Wed Apr 25 14:07:56 +0000 2012","favourites_count":29591,"geo_enabled":true,"statuses_count":15593,"media_count":762,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1394361434423894018\/zXo-_SbF_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/562991391\/1615928879","profile_image_extensions_alt_text":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":155,"green":134,"blue":103},"percentage":42.52},{"rgb":{"red":68,"green":53,"blue":49},"percentage":41.51},{"rgb":{"red":115,"green":106,"blue":94},"percentage":9.21},{"rgb":{"red":77,"green":27,"blue":25},"percentage":4.68},{"rgb":{"red":205,"green":189,"blue":172},"percentage":0.49}]},"profile_image_extensions_media_availability":null,"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":209,"green":201,"blue":191},"percentage":85.05},{"rgb":{"red":56,"green":59,"blue":54},"percentage":8.43},{"rgb":{"red":178,"green":120,"blue":118},"percentage":2.69},{"rgb":{"red":125,"green":123,"blue":103},"percentage":2.18},{"rgb":{"red":168,"green":74,"blue":76},"percentage":0.58}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"B3000F","has_extended_profile":true,"pinned_tweet_ids":[1378465491229024260],"pinned_tweet_ids_str":["1378465491229024260"],"has_custom_timelines":true,"can_dm":true,"can_media_tag":true,"advertiser_account_type":"promotable_user","advertiser_account_service_levels":["analytics"],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"211890657":{"id_str":"211890657","name":"Luke","screen_name":"ProfeLuke","location":"Lincoln, NE","description":"Founder @companycam. \"You\u2019re doing a good job and I like working for you, but I still think you\u2019re a dumbass.\" - CompanyCam Employee","url":"https:\/\/t.co\/CwfdsgUihP","entities":{"url":{"urls":[{"url":"https:\/\/t.co\/CwfdsgUihP","expanded_url":"https:\/\/companycam.com","display_url":"companycam.com","indices":[0,23]}]},"description":{}},"followers_count":738,"fast_followers_count":0,"normal_followers_count":738,"friends_count":1604,"listed_count":47,"created_at":"Thu Nov 04 15:25:06 +0000 2010","favourites_count":23906,"geo_enabled":true,"statuses_count":9597,"media_count":761,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1344828715759501314\/IqF8D-Rt_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/211890657\/1609467127","profile_image_extensions_media_color":{"palette":[{"rgb":{"red":98,"green":91,"blue":73},"percentage":56.49},{"rgb":{"red":157,"green":164,"blue":171},"percentage":24.13},{"rgb":{"red":187,"green":141,"blue":113},"percentage":8.86},{"rgb":{"red":35,"green":28,"blue":18},"percentage":4.79},{"rgb":{"red":152,"green":146,"blue":121},"percentage":0.86}]},"profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":204,"green":183,"blue":168},"percentage":34.41},{"rgb":{"red":103,"green":66,"blue":59},"percentage":22.66},{"rgb":{"red":129,"green":9,"blue":40},"percentage":12.41},{"rgb":{"red":173,"green":117,"blue":107},"percentage":7.21},{"rgb":{"red":215,"green":178,"blue":140},"percentage":6.47}]},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"3B94D9","has_extended_profile":true,"pinned_tweet_ids":[],"pinned_tweet_ids_str":[],"has_custom_timelines":true,"can_dm":true,"can_media_tag":true,"advertiser_account_type":"promotable_user","advertiser_account_service_levels":["smb"],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"54272936":{"id_str":"54272936","name":"Dr.Yiorgo","screen_name":"George_Losh","location":"","description":"","entities":{"description":{}},"followers_count":11,"fast_followers_count":0,"normal_followers_count":11,"friends_count":229,"listed_count":1,"created_at":"Mon Jul 06 17:34:22 +0000 2009","favourites_count":3287,"geo_enabled":true,"statuses_count":9306,"media_count":309,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1155223849090396161\/g5xsUGO1_normal.jpg","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":20,"green":35,"blue":44},"percentage":47.02},{"rgb":{"red":226,"green":167,"blue":136},"percentage":14.23},{"rgb":{"red":34,"green":46,"blue":27},"percentage":12.29},{"rgb":{"red":78,"green":53,"blue":43},"percentage":8.09},{"rgb":{"red":55,"green":88,"blue":48},"percentage":5.83}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"2FC2EF","pinned_tweet_ids":[],"pinned_tweet_ids_str":[],"has_custom_timelines":true,"advertiser_account_type":"promotable_user","advertiser_account_service_levels":["analytics"],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"1083578073356910593":{"id_str":"1083578073356910593","name":"david pumpkins","screen_name":"davidpumpkins1","location":"California, USA","description":"The plural of anecdote is not data","entities":{"description":{}},"followers_count":362,"fast_followers_count":0,"normal_followers_count":362,"friends_count":490,"listed_count":1,"created_at":"Fri Jan 11 04:15:19 +0000 2019","favourites_count":56970,"statuses_count":27004,"media_count":566,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1135735778103795712\/nxX0ZF-q_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1083578073356910593\/1582916370","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":56,"green":14,"blue":24},"percentage":55.33},{"rgb":{"red":199,"green":90,"blue":67},"percentage":16.23},{"rgb":{"red":217,"green":95,"blue":121},"percentage":9.97},{"rgb":{"red":116,"green":24,"blue":58},"percentage":5.0},{"rgb":{"red":108,"green":14,"blue":24},"percentage":2.64}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":117,"green":112,"blue":118},"percentage":83.88},{"rgb":{"red":187,"green":182,"blue":186},"percentage":7.85},{"rgb":{"red":65,"green":60,"blue":66},"percentage":4.03},{"rgb":{"red":141,"green":132,"blue":77},"percentage":1.89},{"rgb":{"red":183,"green":176,"blue":57},"percentage":1.85}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1DA1F2","default_profile":true,"pinned_tweet_ids":[1295488311805575168],"pinned_tweet_ids_str":["1295488311805575168"],"has_custom_timelines":true,"can_media_tag":true,"advertiser_account_type":"promotable_user","advertiser_account_service_levels":["analytics"],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"2907523067":{"id_str":"2907523067","name":"Defe \ud83c\uddfa\ud83c\uddf8 \ud83c\uddef\ud83c\uddf5 \ud83c\udded\ud83c\uddf0 \ud83c\uddf9\ud83c\uddfc \ud83c\uddee\ud83c\uddf1","screen_name":"De80fenderJapan","location":"DA! I'm Ova here now! ","description":"\ud83d\udc96\u69d8\u3005\u306a\u30b8\u30e3\u30f3\u30eb\u306e\u30a2\u30cb\u30e1\u3001\u30de\u30f3\u30ac\u3001\u540c\u4eba\u8a8c\ud83c\udf38J-Drama\/K-Drama addict\u2694\ufe0f\u53e4\u6b66\u8853\u26e9\ufe0f\u5c45\u5408\u8853 \u958b\u696d\u533b \ud83d\udd1eI know what I like and I'm not ashamed of it\ud83c\ude32","entities":{"description":{}},"followers_count":173,"fast_followers_count":0,"normal_followers_count":173,"friends_count":237,"listed_count":0,"created_at":"Sat Dec 06 09:40:14 +0000 2014","favourites_count":93635,"statuses_count":27291,"media_count":500,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1331760039145697281\/Bk6wffMF_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/2907523067\/1580428355","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":53,"green":52,"blue":50},"percentage":29.82},{"rgb":{"red":115,"green":110,"blue":107},"percentage":26.18},{"rgb":{"red":224,"green":191,"blue":181},"percentage":25.99},{"rgb":{"red":251,"green":106,"blue":5},"percentage":9.17},{"rgb":{"red":190,"green":105,"blue":43},"percentage":1.64}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":72,"green":70,"blue":71},"percentage":31.14},{"rgb":{"red":101,"green":107,"blue":137},"percentage":22.42},{"rgb":{"red":184,"green":185,"blue":211},"percentage":18.82},{"rgb":{"red":114,"green":103,"blue":90},"percentage":13.59},{"rgb":{"red":95,"green":81,"blue":67},"percentage":2.4}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"4A913C","has_extended_profile":true,"pinned_tweet_ids":[1262149642952888322],"pinned_tweet_ids_str":["1262149642952888322"],"has_custom_timelines":true,"can_dm":true,"advertiser_account_type":"promotable_user","advertiser_account_service_levels":["analytics"],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"1331239458629431300":{"id_str":"1331239458629431300","name":"Bonslo","screen_name":"Bonslo3","location":"","description":"think on my face","entities":{"description":{}},"followers_count":14,"fast_followers_count":0,"normal_followers_count":14,"friends_count":100,"listed_count":0,"created_at":"Tue Nov 24 14:13:24 +0000 2020","favourites_count":11777,"statuses_count":160,"media_count":1,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1375545188790235137\/8VNvxneG_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1331239458629431300\/1616790565","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":21,"green":28,"blue":22},"percentage":36.87},{"rgb":{"red":185,"green":174,"blue":163},"percentage":11.36},{"rgb":{"red":136,"green":77,"blue":57},"percentage":10.58},{"rgb":{"red":146,"green":24,"blue":16},"percentage":8.01},{"rgb":{"red":204,"green":178,"blue":125},"percentage":6.38}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":21,"green":17,"blue":15},"percentage":37.55},{"rgb":{"red":239,"green":190,"blue":160},"percentage":21.18},{"rgb":{"red":90,"green":50,"blue":37},"percentage":18.82},{"rgb":{"red":154,"green":96,"blue":61},"percentage":7.34},{"rgb":{"red":190,"green":190,"blue":189},"percentage":4.2}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1DA1F2","has_extended_profile":true,"default_profile":true,"pinned_tweet_ids":[],"pinned_tweet_ids_str":[],"can_media_tag":true,"advertiser_account_type":"none","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"294860819":{"id_str":"294860819","name":"See Jay","screen_name":"cj4revolution","location":"United States","description":"US Elections are Theater. A Single Fascist Party is manufacturing opposition to an ignorant population unaware that US Democracy has been abolished.","entities":{"description":{}},"followers_count":107,"fast_followers_count":0,"normal_followers_count":107,"friends_count":159,"listed_count":20,"created_at":"Sat May 07 22:35:17 +0000 2011","favourites_count":3904,"statuses_count":5028,"media_count":148,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1277764682003038208\/mem60pTe_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/294860819\/1496578573","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":175,"green":175,"blue":174},"percentage":95.51},{"rgb":{"red":85,"green":85,"blue":85},"percentage":4.44}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":204,"green":202,"blue":188},"percentage":37.1},{"rgb":{"red":59,"green":60,"blue":58},"percentage":36.92},{"rgb":{"red":125,"green":126,"blue":127},"percentage":14.53},{"rgb":{"red":210,"green":207,"blue":170},"percentage":0.65},{"rgb":{"red":137,"green":134,"blue":114},"percentage":0.44}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"123456","pinned_tweet_ids":[1097912416409505792],"pinned_tweet_ids_str":["1097912416409505792"],"can_dm":true,"can_media_tag":true,"advertiser_account_type":"promotable_user","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"467661480":{"id_str":"467661480","name":"Dave Smith","screen_name":"ComicDaveSmith","location":"NYC","description":"Husband, Father, Comedian, libertarian, Host of Part Of The Problem, 1\/3 of LOS https:\/\/t.co\/anYukAHUy3","url":"https:\/\/t.co\/dqi1wTjwjn","entities":{"url":{"urls":[{"url":"https:\/\/t.co\/dqi1wTjwjn","expanded_url":"https:\/\/linktr.ee\/theproblemdavesmith","display_url":"linktr.ee\/theproblemdave\u2026","indices":[0,23]}]},"description":{"urls":[{"url":"https:\/\/t.co\/anYukAHUy3","expanded_url":"http:\/\/gasdigitalnetwork.com","display_url":"gasdigitalnetwork.com","indices":[80,103]}]}},"followers_count":121974,"fast_followers_count":0,"normal_followers_count":121974,"friends_count":795,"listed_count":663,"created_at":"Wed Jan 18 18:20:00 +0000 2012","favourites_count":14390,"statuses_count":12321,"media_count":160,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1019515212486053888\/YU1J4lDp_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/467661480\/1591624417","profile_image_extensions_media_color":{"palette":[{"rgb":{"red":18,"green":4,"blue":224},"percentage":35.9},{"rgb":{"red":26,"green":20,"blue":26},"percentage":24.43},{"rgb":{"red":46,"green":8,"blue":173},"percentage":18.27},{"rgb":{"red":2,"green":1,"blue":97},"percentage":7.51},{"rgb":{"red":48,"green":10,"blue":59},"percentage":5.6}]},"profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":1,"green":1,"blue":1},"percentage":78.25},{"rgb":{"red":224,"green":224,"blue":224},"percentage":6.76},{"rgb":{"red":8,"green":27,"blue":71},"percentage":5.07},{"rgb":{"red":129,"green":53,"blue":55},"percentage":1.16},{"rgb":{"red":205,"green":53,"blue":43},"percentage":0.91}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1DA1F2","default_profile":true,"pinned_tweet_ids":[1376665260455780353],"pinned_tweet_ids_str":["1376665260455780353"],"has_custom_timelines":true,"can_dm":true,"can_media_tag":true,"advertiser_account_type":"promotable_user","advertiser_account_service_levels":["analytics"],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"975151075":{"id_str":"975151075","name":"Monster Truck Gun Cult","screen_name":"ReadOrwells1984","location":"Texas ","description":"Anti-War 7th Generation Texan. Hater of Blood-Soaked Lizard People!","entities":{"description":{}},"followers_count":1998,"fast_followers_count":0,"normal_followers_count":1998,"friends_count":1725,"listed_count":47,"created_at":"Wed Nov 28 01:49:29 +0000 2012","favourites_count":14349,"geo_enabled":true,"statuses_count":26042,"media_count":798,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1337966890644361223\/JEAA6N3K_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/975151075\/1621559113","profile_image_extensions_media_color":{"palette":[{"rgb":{"red":109,"green":154,"blue":198},"percentage":34.78},{"rgb":{"red":33,"green":49,"blue":64},"percentage":18.41},{"rgb":{"red":63,"green":24,"blue":9},"percentage":11.39},{"rgb":{"red":217,"green":143,"blue":68},"percentage":10.46},{"rgb":{"red":120,"green":59,"blue":18},"percentage":7.67}]},"profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":5,"green":3,"blue":3},"percentage":74.04},{"rgb":{"red":204,"green":182,"blue":170},"percentage":17.61},{"rgb":{"red":149,"green":119,"blue":102},"percentage":4.16}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1DA1F2","default_profile":true,"pinned_tweet_ids":[],"pinned_tweet_ids_str":[],"advertiser_account_type":"promotable_user","advertiser_account_service_levels":["analytics"],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}}},"moments":{},"cards":{},"places":{},"media":{},"broadcasts":{},"topics":{},"lists":{}},"timeline":{"id":"Conversation-1395881699142160387","instructions":[{"addEntries":{"entries":[{"entryId":"tweet-1395881699142160387","sortIndex":"7827490337712615420","content":{"item":{"content":{"tweet":{"id":"1395881699142160387","displayType":"Tweet","hasModeratedReplies":false}}}}},{"entryId":"conversationThread-1395882702956498945","sortIndex":"7827490337712615410","content":{"timelineModule":{"items":[{"entryId":"tweet-1395882702956498945","item":{"content":{"tweet":{"id":"1395882702956498945","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4IYAeKBUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1396167263473094658","sortIndex":"7827490337712615400","content":{"timelineModule":{"items":[{"entryId":"tweet-1396167263473094658","item":{"content":{"tweet":{"id":"1396167263473094658","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4IogOCBUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1395896172779163648","sortIndex":"7827490337712615390","content":{"timelineModule":{"items":[{"entryId":"tweet-1395896172779163648","item":{"content":{"tweet":{"id":"1395896172779163648","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4JJAOCBUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1395884081754300416","sortIndex":"7827490337712615380","content":{"timelineModule":{"items":[{"entryId":"tweet-1395884081754300416","item":{"content":{"tweet":{"id":"1395884081754300416","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4KKAOCBUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1395883913625604102","sortIndex":"7827490337712615370","content":{"timelineModule":{"items":[{"entryId":"tweet-1395883913625604102","item":{"content":{"tweet":{"id":"1395883913625604102","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4MMAOCBUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1395882162939858946","sortIndex":"7827490337712615360","content":{"timelineModule":{"items":[{"entryId":"tweet-1395882162939858946","item":{"content":{"tweet":{"id":"1395882162939858946","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4IIAOKBUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}},{"entryId":"tweet-1395882526330302471","item":{"content":{"tweet":{"id":"1395882526330302471","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4QIAOCBEAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}},{"entryId":"conversationThread-1395882162939858946-show_more_cursor","item":{"content":{"timelineCursor":{"value":"TBwcFo7AvaHi8JXfJhUCAAAYJmNvbnZlcnNhdGlvblRocmVhZC0xMzk1ODgyMTYyOTM5ODU4OTQ2AAA=","cursorType":"ShowMore","displayTreatment":{"actionText":"Show replies"}}},"clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1395909630946160649","sortIndex":"7827490337712615350","content":{"timelineModule":{"items":[{"entryId":"tweet-1395909630946160649","item":{"content":{"tweet":{"id":"1395909630946160649","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4IIAOCBUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1395884070375198720","sortIndex":"7827490337712615340","content":{"timelineModule":{"items":[{"entryId":"tweet-1395884070375198720","item":{"content":{"tweet":{"id":"1395884070375198720","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4IIAOCBUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}},{"entryId":"tweet-1395884614296686592","item":{"content":{"tweet":{"id":"1395884614296686592","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4QIAOKBEAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}},{"entryId":"conversationThread-1395884070375198720-show_more_cursor","item":{"content":{"timelineCursor":{"value":"TBwcFoDAsumm6pbfJhUCAAAYJmNvbnZlcnNhdGlvblRocmVhZC0xMzk1ODg0MDcwMzc1MTk4NzIwAAA=","cursorType":"ShowMore","displayTreatment":{"actionText":"Show replies"}}},"clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"cursor-bottom-7827490337712615339","sortIndex":"7827490337712615339","content":{"operation":{"cursor":{"value":"LBmGgICziafLlt8mhMC+pdOul+AmgMC4pdLKlt8mgMCinYyLnN8mhMCs5c7bld8mgsCsnYb7ld8mksC9sbuaot8mjMCwtcLBlt8mJQISAAA=","cursorType":"Bottom"}}}}]}},{"terminateTimeline":{"direction":"Top"}}],"responseObjects":{"feedbackActions":{}}}} diff --git a/scraper/test_responses/midriffs_anarchist_cookbook.json b/scraper/test_responses/midriffs_anarchist_cookbook.json new file mode 100644 index 0000000..a2f3ac4 --- /dev/null +++ b/scraper/test_responses/midriffs_anarchist_cookbook.json @@ -0,0 +1 @@ +{"globalObjects":{"tweets":{"1396194922009661441":{"created_at":"Sat May 22 20:03:04 +0000 2021","id_str":"1396194922009661441","full_text":"sometimes they're too dimwitted to even get the wrong title right\nhttps:\/\/t.co\/EHCAHKpez0","display_text_range":[0,89],"entities":{"urls":[{"url":"https:\/\/t.co\/EHCAHKpez0","expanded_url":"https:\/\/twitter.com\/RvaTeddy\/status\/1396194494710788100","display_url":"twitter.com\/RvaTeddy\/statu\u2026","indices":[66,89]}]},"source":"\u003ca href=\"https:\/\/mobile.twitter.com\" rel=\"nofollow\"\u003eTwitter Web App\u003c\/a\u003e","in_reply_to_status_id_str":"1395882872729477131","in_reply_to_user_id_str":"44067298","in_reply_to_screen_name":"michaelmalice","user_id_str":"44067298","is_quote_status":true,"quoted_status_id_str":"1396194494710788100","quoted_status_permalink":{"url":"https:\/\/t.co\/EHCAHKpez0","expanded":"https:\/\/twitter.com\/RvaTeddy\/status\/1396194494710788100","display":"twitter.com\/RvaTeddy\/statu\u2026"},"retweet_count":1,"favorite_count":41,"reply_count":6,"quote_count":0,"conversation_id_str":"1395882872729477131","possibly_sensitive_editable":true,"lang":"en","self_thread":{"id_str":"1395882872729477131"}},"1395883914812706820":{"created_at":"Fri May 21 23:27:14 +0000 2021","id_str":"1395883914812706820","full_text":"@CMH_2019 @michaelmalice Why do dad's do dad jokes? Because they're low hanging fruit","display_text_range":[25,85],"entities":{"user_mentions":[{"screen_name":"CMH_2019","name":"Los Doyers","id_str":"258008641","indices":[0,9]},{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[10,24]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","in_reply_to_status_id_str":"1395883628132020226","in_reply_to_user_id_str":"258008641","in_reply_to_screen_name":"CMH_2019","user_id_str":"3264818434","retweet_count":0,"favorite_count":7,"reply_count":1,"quote_count":0,"conversation_id_str":"1395882872729477131","lang":"en"},"1395883628132020226":{"created_at":"Fri May 21 23:26:05 +0000 2021","id_str":"1395883628132020226","full_text":"@michaelmalice When the tweet is so clearly about the book that you wrote\/put together, what is this weird impulse to bring up a book that almost (I hope) everyone that follows you already knows exists?","display_text_range":[15,202],"entities":{"user_mentions":[{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[0,14]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","in_reply_to_status_id_str":"1395882872729477131","in_reply_to_user_id_str":"44067298","in_reply_to_screen_name":"michaelmalice","user_id_str":"258008641","retweet_count":0,"favorite_count":8,"reply_count":2,"quote_count":1,"conversation_id_str":"1395882872729477131","lang":"en"},"1395903436248453120":{"created_at":"Sat May 22 00:44:48 +0000 2021","id_str":"1395903436248453120","full_text":"@drewmueller @michaelmalice Absolutely lol","display_text_range":[28,42],"entities":{"user_mentions":[{"screen_name":"drewmueller","name":"Drew Mueller","id_str":"289435762","indices":[0,12]},{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[13,27]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","in_reply_to_status_id_str":"1395890026899070976","in_reply_to_user_id_str":"289435762","in_reply_to_screen_name":"drewmueller","user_id_str":"1159389310916972546","retweet_count":0,"favorite_count":1,"reply_count":0,"quote_count":0,"conversation_id_str":"1395882872729477131","lang":"en"},"1395883475127910403":{"created_at":"Fri May 21 23:25:29 +0000 2021","id_str":"1395883475127910403","full_text":"@michaelmalice the cookbook, aka The Nineties Edgelordnomicon","display_text_range":[15,61],"entities":{"user_mentions":[{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[0,14]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","in_reply_to_status_id_str":"1395882872729477131","in_reply_to_user_id_str":"44067298","in_reply_to_screen_name":"michaelmalice","user_id_str":"19284852","retweet_count":0,"favorite_count":9,"reply_count":0,"quote_count":0,"conversation_id_str":"1395882872729477131","lang":"en"},"1395882872729477131":{"created_at":"Fri May 21 23:23:05 +0000 2021","id_str":"1395882872729477131","full_text":"this saddens me every time https:\/\/t.co\/jSkwGsbKWv","display_text_range":[0,26],"entities":{"media":[{"id_str":"1395882862289772553","indices":[27,50],"media_url":"http:\/\/pbs.twimg.com\/media\/E18sEUrWYAk8dBl.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/E18sEUrWYAk8dBl.jpg","url":"https:\/\/t.co\/jSkwGsbKWv","display_url":"pic.twitter.com\/jSkwGsbKWv","expanded_url":"https:\/\/twitter.com\/michaelmalice\/status\/1395882872729477131\/photo\/1","type":"photo","original_info":{"width":593,"height":239,"focus_rects":[{"x":0,"y":0,"h":239,"w":427},{"x":14,"y":0,"h":239,"w":239},{"x":28,"y":0,"h":239,"w":210},{"x":73,"y":0,"h":239,"w":120},{"x":0,"y":0,"h":239,"w":593}]},"sizes":{"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":593,"h":239,"resize":"fit"},"medium":{"w":593,"h":239,"resize":"fit"},"small":{"w":593,"h":239,"resize":"fit"}},"features":{"large":{"faces":[]},"medium":{"faces":[]},"small":{"faces":[]},"orig":{"faces":[]}}}]},"extended_entities":{"media":[{"id_str":"1395882862289772553","indices":[27,50],"media_url":"http:\/\/pbs.twimg.com\/media\/E18sEUrWYAk8dBl.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/E18sEUrWYAk8dBl.jpg","url":"https:\/\/t.co\/jSkwGsbKWv","display_url":"pic.twitter.com\/jSkwGsbKWv","expanded_url":"https:\/\/twitter.com\/michaelmalice\/status\/1395882872729477131\/photo\/1","type":"photo","original_info":{"width":593,"height":239,"focus_rects":[{"x":0,"y":0,"h":239,"w":427},{"x":14,"y":0,"h":239,"w":239},{"x":28,"y":0,"h":239,"w":210},{"x":73,"y":0,"h":239,"w":120},{"x":0,"y":0,"h":239,"w":593}]},"sizes":{"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":593,"h":239,"resize":"fit"},"medium":{"w":593,"h":239,"resize":"fit"},"small":{"w":593,"h":239,"resize":"fit"}},"features":{"large":{"faces":[]},"medium":{"faces":[]},"small":{"faces":[]},"orig":{"faces":[]}},"media_key":"3_1395882862289772553","ext_alt_text":null,"ext_media_availability":{"status":"available"},"ext_media_color":{"palette":[{"rgb":{"red":232,"green":245,"blue":254},"percentage":98.18},{"rgb":{"red":112,"green":127,"blue":140},"percentage":1.44},{"rgb":{"red":109,"green":60,"blue":81},"percentage":0.15},{"rgb":{"red":165,"green":169,"blue":164},"percentage":0.15}]},"ext":{"mediaStats":{"r":"Missing","ttl":-1}}}]},"source":"\u003ca href=\"https:\/\/mobile.twitter.com\" rel=\"nofollow\"\u003eTwitter Web App\u003c\/a\u003e","user_id_str":"44067298","retweet_count":4,"favorite_count":317,"reply_count":27,"quote_count":3,"conversation_id_str":"1395882872729477131","possibly_sensitive_editable":true,"lang":"en","self_thread":{"id_str":"1395882872729477131"}},"1396203663434010624":{"created_at":"Sat May 22 20:37:48 +0000 2021","id_str":"1396203663434010624","full_text":"@michaelmalice Back in highschool my brother was out sick one day. When the school secretary went to get his books out of his locker to send home, the cookbook fell out of his locker. He had some explaining to do after that.","display_text_range":[15,224],"entities":{"user_mentions":[{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[0,14]}]},"source":"\u003ca href=\"https:\/\/mobile.twitter.com\" rel=\"nofollow\"\u003eTwitter Web App\u003c\/a\u003e","in_reply_to_status_id_str":"1395882872729477131","in_reply_to_user_id_str":"44067298","in_reply_to_screen_name":"michaelmalice","user_id_str":"1025061800927064065","retweet_count":0,"favorite_count":0,"reply_count":0,"quote_count":0,"conversation_id_str":"1395882872729477131","lang":"en"},"1396194494710788100":{"created_at":"Sat May 22 20:01:22 +0000 2021","id_str":"1396194494710788100","full_text":"@michaelmalice I always liked \"The Anarchist's Cookbook.\"","display_text_range":[15,57],"entities":{"user_mentions":[{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[0,14]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","in_reply_to_status_id_str":"1395978577267593218","in_reply_to_user_id_str":"44067298","in_reply_to_screen_name":"michaelmalice","user_id_str":"1215108366411931653","retweet_count":0,"favorite_count":1,"reply_count":2,"quote_count":1,"conversation_id_str":"1395978577267593218","lang":"en"},"1395894683507646464":{"created_at":"Sat May 22 00:10:01 +0000 2021","id_str":"1395894683507646464","full_text":"@michaelmalice Uhm... that was one of the first DL's on Napster","display_text_range":[15,63],"entities":{"user_mentions":[{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[0,14]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","in_reply_to_status_id_str":"1395882872729477131","in_reply_to_user_id_str":"44067298","in_reply_to_screen_name":"michaelmalice","user_id_str":"903428926302814208","retweet_count":0,"favorite_count":3,"reply_count":0,"quote_count":0,"conversation_id_str":"1395882872729477131","lang":"en"},"1396199264976621571":{"created_at":"Sat May 22 20:20:19 +0000 2021","id_str":"1396199264976621571","full_text":"@michaelmalice Yes, but I am sure you anticipated it","display_text_range":[15,52],"entities":{"user_mentions":[{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[0,14]}]},"source":"\u003ca href=\"https:\/\/mobile.twitter.com\" rel=\"nofollow\"\u003eTwitter Web App\u003c\/a\u003e","in_reply_to_status_id_str":"1395882872729477131","in_reply_to_user_id_str":"44067298","in_reply_to_screen_name":"michaelmalice","user_id_str":"1322539016919621638","retweet_count":0,"favorite_count":0,"reply_count":0,"quote_count":0,"conversation_id_str":"1395882872729477131","lang":"en"},"1395890026899070976":{"created_at":"Fri May 21 23:51:31 +0000 2021","id_str":"1395890026899070976","full_text":"@michaelmalice You've gotta think they're trolling you now, well some anyway. I know I had the impulse myself","display_text_range":[15,109],"entities":{"user_mentions":[{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[0,14]}]},"source":"\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e","in_reply_to_status_id_str":"1395882872729477131","in_reply_to_user_id_str":"44067298","in_reply_to_screen_name":"michaelmalice","user_id_str":"289435762","retweet_count":0,"favorite_count":6,"reply_count":1,"quote_count":0,"conversation_id_str":"1395882872729477131","lang":"en"},"1395887949678579715":{"created_at":"Fri May 21 23:43:16 +0000 2021","id_str":"1395887949678579715","full_text":"@michaelmalice I bought the \"cookbook\" at a head shop in ~1980 when I was in college. It was a fun read, but dangerous if taken seriously.\n\nWho would combine a broomstick, shotgun, and molotov cocktail? #HoldMyBeer","display_text_range":[15,216],"entities":{"hashtags":[{"text":"HoldMyBeer","indices":[205,216]}],"user_mentions":[{"screen_name":"michaelmalice","name":"Michael Malice","id_str":"44067298","indices":[0,14]}]},"source":"\u003ca href=\"https:\/\/mobile.twitter.com\" rel=\"nofollow\"\u003eTwitter Web App\u003c\/a\u003e","in_reply_to_status_id_str":"1395882872729477131","in_reply_to_user_id_str":"44067298","in_reply_to_screen_name":"michaelmalice","user_id_str":"1257372016488964102","retweet_count":0,"favorite_count":6,"reply_count":0,"quote_count":0,"conversation_id_str":"1395882872729477131","lang":"en"}},"users":{"1025061800927064065":{"id_str":"1025061800927064065","name":"FreeTradesman","screen_name":"FreeTradesman","location":"Las Vegas, NV","description":"Professional carpenter, small business owner, history and economics nerd, free-market individualist, US politics is a train wreck and I can't look away","entities":{"description":{}},"followers_count":53,"fast_followers_count":0,"normal_followers_count":53,"friends_count":359,"listed_count":1,"created_at":"Thu Aug 02 16:52:32 +0000 2018","favourites_count":14893,"statuses_count":4980,"media_count":232,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1025501404218028032\/wXbaPobj_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1025061800927064065\/1540264763","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":73,"green":49,"blue":38},"percentage":62.96},{"rgb":{"red":141,"green":101,"blue":78},"percentage":29.16},{"rgb":{"red":111,"green":74,"blue":55},"percentage":5.12},{"rgb":{"red":82,"green":79,"blue":61},"percentage":1.49},{"rgb":{"red":138,"green":137,"blue":119},"percentage":0.79}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":17,"green":8,"blue":3},"percentage":38.74},{"rgb":{"red":89,"green":51,"blue":12},"percentage":35.01},{"rgb":{"red":243,"green":179,"blue":81},"percentage":14.7},{"rgb":{"red":143,"green":84,"blue":20},"percentage":6.01},{"rgb":{"red":221,"green":178,"blue":124},"percentage":2.87}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1DA1F2","has_extended_profile":true,"default_profile":true,"pinned_tweet_ids":[1371608002633953284],"pinned_tweet_ids_str":["1371608002633953284"],"has_custom_timelines":true,"can_dm":true,"can_media_tag":true,"advertiser_account_type":"none","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"19284852":{"id_str":"19284852","name":"Hugh MFB","screen_name":"hughknowit","location":"Texas, USA","description":"\u201cIs everything a joke to you, Fletch?\u201d \u201cEverything, Sam.\u201d","entities":{"description":{}},"followers_count":1110,"fast_followers_count":0,"normal_followers_count":1110,"friends_count":2814,"listed_count":22,"created_at":"Wed Jan 21 11:57:52 +0000 2009","favourites_count":64097,"geo_enabled":true,"statuses_count":48701,"media_count":4488,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1284482053912825856\/OrC7Apkj_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/19284852\/1620213053","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":39,"green":39,"blue":39},"percentage":74.6},{"rgb":{"red":231,"green":231,"blue":231},"percentage":20.98}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":169,"green":135,"blue":130},"percentage":49.93},{"rgb":{"red":20,"green":17,"blue":15},"percentage":27.62},{"rgb":{"red":146,"green":91,"blue":83},"percentage":12.32},{"rgb":{"red":209,"green":209,"blue":182},"percentage":3.11},{"rgb":{"red":79,"green":37,"blue":45},"percentage":0.29}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"2FC2EF","pinned_tweet_ids":[885920768529494017],"pinned_tweet_ids_str":["885920768529494017"],"has_custom_timelines":true,"advertiser_account_type":"none","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"3264818434":{"id_str":"3264818434","name":"RetroGames HQ","screen_name":"RetroGamesHQ","location":"Tennessee, USA","description":"RetroGames HQ - a retro and MonTaming focused channel | PFP by Bisloba | Host of MonCon @ https:\/\/t.co\/V9McOgE8O9","url":"https:\/\/t.co\/QZKzOWM19O","entities":{"url":{"urls":[{"url":"https:\/\/t.co\/QZKzOWM19O","expanded_url":"https:\/\/www.youtube.com\/RetroGamesHQ","display_url":"youtube.com\/RetroGamesHQ","indices":[0,23]}]},"description":{"urls":[{"url":"https:\/\/t.co\/V9McOgE8O9","expanded_url":"https:\/\/monstertaming.com","display_url":"monstertaming.com","indices":[90,113]}]}},"followers_count":885,"fast_followers_count":0,"normal_followers_count":885,"friends_count":188,"listed_count":16,"created_at":"Sun May 17 05:16:57 +0000 2015","favourites_count":17524,"statuses_count":5293,"media_count":712,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1381038239201525760\/NxdXNuO8_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/3264818434\/1613087861","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":255,"green":255,"blue":254},"percentage":67.5},{"rgb":{"red":104,"green":83,"blue":125},"percentage":11.79},{"rgb":{"red":82,"green":136,"blue":122},"percentage":4.27},{"rgb":{"red":154,"green":171,"blue":104},"percentage":2.4},{"rgb":{"red":181,"green":178,"blue":66},"percentage":1.48}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":222,"green":222,"blue":222},"percentage":24.89},{"rgb":{"red":45,"green":176,"blue":125},"percentage":17.79},{"rgb":{"red":229,"green":210,"blue":12},"percentage":13.54},{"rgb":{"red":172,"green":44,"blue":93},"percentage":8.98},{"rgb":{"red":42,"green":42,"blue":42},"percentage":6.47}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"33CCFF","pinned_tweet_ids":[1389024984580898817],"pinned_tweet_ids_str":["1389024984580898817"],"has_custom_timelines":true,"can_dm":true,"can_media_tag":true,"advertiser_account_type":"promotable_user","advertiser_account_service_levels":["smb"],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"1257372016488964102":{"id_str":"1257372016488964102","name":"John Haymond","screen_name":"JohnHaymond2","location":"","description":"Mechanical engineer, Revit expert, Navisworks expert, builder of household essentials, drinker of coffee, known to pick up a fly rod when I can.","entities":{"description":{}},"followers_count":9,"fast_followers_count":0,"normal_followers_count":9,"friends_count":88,"listed_count":0,"created_at":"Mon May 04 18:11:34 +0000 2020","favourites_count":332,"statuses_count":615,"media_count":26,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1352663826215415809\/s3Fl2Md4_normal.jpg","profile_image_extensions_media_color":{"palette":[{"rgb":{"red":213,"green":214,"blue":207},"percentage":58.8},{"rgb":{"red":50,"green":57,"blue":65},"percentage":23.45},{"rgb":{"red":187,"green":129,"blue":115},"percentage":13.06},{"rgb":{"red":117,"green":77,"blue":65},"percentage":1.29},{"rgb":{"red":2,"green":123,"blue":229},"percentage":0.98}]},"profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1DA1F2","has_extended_profile":true,"default_profile":true,"pinned_tweet_ids":[],"pinned_tweet_ids_str":[],"has_custom_timelines":true,"can_media_tag":true,"advertiser_account_type":"none","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"903428926302814208":{"id_str":"903428926302814208","name":"The Bull3t Point boop\/ bop\/ beep\/ cha-ching","screen_name":"thebull3tpoint","location":"North of the southern border.","description":"Politics History US News World News News. Sharing truth, and ideas. Occasionally how I trade... not advice..","entities":{"description":{}},"followers_count":71,"fast_followers_count":0,"normal_followers_count":71,"friends_count":325,"listed_count":1,"created_at":"Fri Sep 01 01:26:55 +0000 2017","favourites_count":5403,"statuses_count":3818,"media_count":292,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1381918923000410113\/wa2v9mYu_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/903428926302814208\/1504233352","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":60,"green":60,"blue":60},"percentage":95.22},{"rgb":{"red":254,"green":254,"blue":254},"percentage":3.86},{"rgb":{"red":94,"green":94,"blue":94},"percentage":1.0}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":255,"green":255,"blue":255},"percentage":94.89},{"rgb":{"red":131,"green":131,"blue":131},"percentage":5.07}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1DA1F2","default_profile":true,"pinned_tweet_ids":[],"pinned_tweet_ids_str":[],"has_custom_timelines":true,"can_dm":true,"can_media_tag":true,"advertiser_account_type":"promotable_user","advertiser_account_service_levels":["analytics"],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"44067298":{"id_str":"44067298","name":"Michael Malice","screen_name":"michaelmalice","location":"Brooklyn","description":"Author of Dear Reader, The New Right & The Anarchist Handbook\nHost of \"YOUR WELCOME\" \nSubject of Ego & Hubris by Harvey Pekar\nHe\/Him \u2691","url":"https:\/\/t.co\/7VDFOOtFK2","entities":{"url":{"urls":[{"url":"https:\/\/t.co\/7VDFOOtFK2","expanded_url":"https:\/\/amzn.to\/3oInafv","display_url":"amzn.to\/3oInafv","indices":[0,23]}]},"description":{}},"followers_count":202762,"fast_followers_count":0,"normal_followers_count":202762,"friends_count":940,"listed_count":1045,"created_at":"Tue Jun 02 05:35:52 +0000 2009","favourites_count":2731,"geo_enabled":true,"verified":true,"statuses_count":125813,"media_count":8006,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1064051934812913664\/Lbwdb_C9_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/44067298\/1615134676","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":36,"green":32,"blue":31},"percentage":74.71},{"rgb":{"red":186,"green":129,"blue":100},"percentage":14.09},{"rgb":{"red":118,"green":108,"blue":96},"percentage":4.84},{"rgb":{"red":54,"green":61,"blue":71},"percentage":2.18},{"rgb":{"red":99,"green":56,"blue":37},"percentage":2.11}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":0,"green":0,"blue":0},"percentage":60.59},{"rgb":{"red":156,"green":60,"blue":64},"percentage":18.77},{"rgb":{"red":77,"green":29,"blue":31},"percentage":3.62},{"rgb":{"red":138,"green":199,"blue":215},"percentage":3.22},{"rgb":{"red":215,"green":79,"blue":85},"percentage":2.83}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"0084B4","has_extended_profile":true,"pinned_tweet_ids":[1395978577267593218],"pinned_tweet_ids_str":["1395978577267593218"],"can_dm":true,"advertiser_account_type":"promotable_user","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"289435762":{"id_str":"289435762","name":"Drew Mueller","screen_name":"drewmueller","location":"","description":"","entities":{"description":{}},"followers_count":41,"fast_followers_count":0,"normal_followers_count":41,"friends_count":677,"listed_count":0,"created_at":"Thu Apr 28 17:00:36 +0000 2011","favourites_count":971,"statuses_count":911,"media_count":23,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1264043079373254656\/PdSaSgrb_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/289435762\/1590206330","profile_image_extensions_media_color":{"palette":[{"rgb":{"red":209,"green":202,"blue":196},"percentage":30.85},{"rgb":{"red":62,"green":62,"blue":65},"percentage":27.36},{"rgb":{"red":113,"green":123,"blue":139},"percentage":14.99},{"rgb":{"red":122,"green":100,"blue":86},"percentage":5.91},{"rgb":{"red":178,"green":39,"blue":44},"percentage":1.84}]},"profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":21,"green":25,"blue":17},"percentage":93.97},{"rgb":{"red":98,"green":133,"blue":93},"percentage":4.63},{"rgb":{"red":46,"green":61,"blue":30},"percentage":0.58},{"rgb":{"red":112,"green":148,"blue":139},"percentage":0.38},{"rgb":{"red":172,"green":196,"blue":184},"percentage":0.24}]},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1B95E0","pinned_tweet_ids":[],"pinned_tweet_ids_str":[],"has_custom_timelines":true,"can_dm":true,"can_media_tag":true,"advertiser_account_type":"none","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"1215108366411931653":{"id_str":"1215108366411931653","name":"Teddy RVA","screen_name":"RvaTeddy","location":"United States","description":"Follow me if you're into what I say. I don't give a shit either way. I'm not seeking popularity. \n\nOnly half of what I say is serious. Maybe not even half.","entities":{"description":{}},"followers_count":104,"fast_followers_count":0,"normal_followers_count":104,"friends_count":172,"listed_count":4,"created_at":"Thu Jan 09 03:09:57 +0000 2020","favourites_count":2751,"geo_enabled":true,"statuses_count":4722,"media_count":259,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1229376085529448450\/M3K3cc2u_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1215108366411931653\/1581941076","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":50,"green":35,"blue":27},"percentage":35.1},{"rgb":{"red":106,"green":121,"blue":104},"percentage":31.45},{"rgb":{"red":29,"green":55,"blue":80},"percentage":13.9},{"rgb":{"red":151,"green":122,"blue":126},"percentage":8.81},{"rgb":{"red":96,"green":53,"blue":36},"percentage":4.66}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":13,"green":14,"blue":22},"percentage":34.3},{"rgb":{"red":16,"green":44,"blue":145},"percentage":26.45},{"rgb":{"red":53,"green":98,"blue":179},"percentage":14.7},{"rgb":{"red":187,"green":198,"blue":222},"percentage":5.14},{"rgb":{"red":14,"green":17,"blue":61},"percentage":3.94}]},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1DA1F2","has_extended_profile":true,"default_profile":true,"pinned_tweet_ids":[],"pinned_tweet_ids_str":[],"can_media_tag":true,"advertiser_account_type":"none","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"1322539016919621638":{"id_str":"1322539016919621638","name":"1crumbbum","screen_name":"1crumbbum","location":"","description":"","entities":{"description":{}},"followers_count":9,"fast_followers_count":0,"normal_followers_count":9,"friends_count":36,"listed_count":0,"created_at":"Sat Oct 31 14:01:02 +0000 2020","favourites_count":2059,"statuses_count":2184,"media_count":8,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1353027079290413056\/0gsf8Lpp_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1322539016919621638\/1604184833","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":208,"green":180,"blue":193},"percentage":51.86},{"rgb":{"red":68,"green":40,"blue":60},"percentage":19.5},{"rgb":{"red":137,"green":105,"blue":134},"percentage":10.81},{"rgb":{"red":93,"green":44,"blue":72},"percentage":6.22},{"rgb":{"red":47,"green":38,"blue":80},"percentage":0.65}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":185,"green":183,"blue":185},"percentage":76.34},{"rgb":{"red":0,"green":0,"blue":0},"percentage":20.06},{"rgb":{"red":182,"green":146,"blue":95},"percentage":1.54}]},"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1DA1F2","has_extended_profile":true,"default_profile":true,"pinned_tweet_ids":[],"pinned_tweet_ids_str":[],"has_custom_timelines":true,"can_media_tag":true,"advertiser_account_type":"none","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"1159389310916972546":{"id_str":"1159389310916972546","name":"Cajun","screen_name":"Gov_Intolerance","location":"United Earth Society","description":"You've nothing to fear when you're privacy is faux. \nDont let your children make the same mistake","url":"https:\/\/t.co\/9FNrZgun25","entities":{"url":{"urls":[{"url":"https:\/\/t.co\/9FNrZgun25","expanded_url":"http:\/\/www.com","display_url":"www.com","indices":[0,23]}]},"description":{}},"followers_count":289,"fast_followers_count":0,"normal_followers_count":289,"friends_count":552,"listed_count":1,"created_at":"Thu Aug 08 09:02:06 +0000 2019","favourites_count":19891,"statuses_count":4619,"media_count":323,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1371898813389082631\/I3YqqcGM_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/1159389310916972546\/1615673331","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":{"palette":[{"rgb":{"red":12,"green":6,"blue":9},"percentage":66.75},{"rgb":{"red":20,"green":36,"blue":72},"percentage":8.65},{"rgb":{"red":199,"green":183,"blue":179},"percentage":7.0},{"rgb":{"red":38,"green":81,"blue":66},"percentage":4.24},{"rgb":{"red":54,"green":26,"blue":16},"percentage":2.16}]},"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_media_color":{"palette":[{"rgb":{"red":35,"green":43,"blue":67},"percentage":92.3},{"rgb":{"red":29,"green":32,"blue":36},"percentage":7.54},{"rgb":{"red":83,"green":38,"blue":38},"percentage":0.13}]},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1DA1F2","has_extended_profile":true,"default_profile":true,"pinned_tweet_ids":[1387817952834211843],"pinned_tweet_ids_str":["1387817952834211843"],"has_custom_timelines":true,"can_media_tag":true,"advertiser_account_type":"none","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}},"258008641":{"id_str":"258008641","name":"Los Doyers","screen_name":"CMH_2019","location":"Houston, TX","description":"Schr\u00f6dinger\u2019s immigrant, Los Angeles expat, half-breed anarcho-Mexican","entities":{"description":{}},"followers_count":73,"fast_followers_count":0,"normal_followers_count":73,"friends_count":637,"listed_count":0,"created_at":"Sat Feb 26 19:21:36 +0000 2011","favourites_count":13908,"geo_enabled":true,"statuses_count":922,"media_count":111,"profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/703041069638766592\/GQpPDTOt_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/258008641\/1413062849","profile_image_extensions_alt_text":null,"profile_image_extensions_media_availability":null,"profile_image_extensions_media_color":null,"profile_image_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_banner_extensions_alt_text":null,"profile_banner_extensions_media_availability":null,"profile_banner_extensions_media_color":null,"profile_banner_extensions":{"mediaStats":{"r":{"missing":null},"ttl":-1}},"profile_link_color":"1DA1F2","default_profile":true,"pinned_tweet_ids":[],"pinned_tweet_ids_str":[],"has_custom_timelines":true,"can_media_tag":true,"advertiser_account_type":"none","advertiser_account_service_levels":[],"profile_interstitial_type":"","business_profile_state":"none","translator_type":"none","withheld_in_countries":[],"ext":{"highlightedLabel":{"r":{"ok":{}},"ttl":-1}}}},"moments":{},"cards":{},"places":{},"media":{},"broadcasts":{},"topics":{},"lists":{}},"timeline":{"id":"Conversation-1395882872729477131","instructions":[{"addEntries":{"entries":[{"entryId":"tweet-1395882872729477131","sortIndex":"7827489164125298676","content":{"item":{"content":{"tweet":{"id":"1395882872729477131","displayType":"SelfThread","hasModeratedReplies":false}}}}},{"entryId":"conversationThread-1396194922009661441","sortIndex":"7827489164125298666","content":{"timelineModule":{"items":[{"entryId":"tweet-1396194922009661441","item":{"content":{"tweet":{"id":"1396194922009661441","displayType":"SelfThread"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4IYMeC5cAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1395883628132020226","sortIndex":"7827489164125298656","content":{"timelineModule":{"items":[{"entryId":"tweet-1395883628132020226","item":{"content":{"tweet":{"id":"1395883628132020226","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4IogOKBUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}},{"entryId":"tweet-1395883914812706820","item":{"content":{"tweet":{"id":"1395883914812706820","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4RJAOKBEAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}},{"entryId":"conversationThread-1395883628132020226-show_more_cursor","item":{"content":{"timelineCursor":{"value":"TBwcFojAvqHLwZbfJhUCAAAYJmNvbnZlcnNhdGlvblRocmVhZC0xMzk1ODgzNjI4MTMyMDIwMjI2AAA=","cursorType":"ShowMore","displayTreatment":{"actionText":"Show replies"}}},"clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1395890026899070976","sortIndex":"7827489164125298646","content":{"timelineModule":{"items":[{"entryId":"tweet-1395890026899070976","item":{"content":{"tweet":{"id":"1395890026899070976","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX4KKAOCBUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}},{"entryId":"tweet-1395903436248453120","item":{"content":{"tweet":{"id":"1395903436248453120","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX6UMAPKAEAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1396203663434010624","sortIndex":"7827489164125298636","content":{"timelineModule":{"items":[{"entryId":"tweet-1396203663434010624","item":{"content":{"tweet":{"id":"1396203663434010624","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX6IIAOCAUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1395887949678579715","sortIndex":"7827489164125298626","content":{"timelineModule":{"items":[{"entryId":"tweet-1395887949678579715","item":{"content":{"tweet":{"id":"1395887949678579715","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX6IIAOCAUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1395894683507646464","sortIndex":"7827489164125298616","content":{"timelineModule":{"items":[{"entryId":"tweet-1395894683507646464","item":{"content":{"tweet":{"id":"1395894683507646464","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX6IIAOCAUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1395883475127910403","sortIndex":"7827489164125298606","content":{"timelineModule":{"items":[{"entryId":"tweet-1395883475127910403","item":{"content":{"tweet":{"id":"1395883475127910403","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX6IIAOKAUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"conversationThread-1396199264976621571","sortIndex":"7827489164125298596","content":{"timelineModule":{"items":[{"entryId":"tweet-1396199264976621571","item":{"content":{"tweet":{"id":"1396199264976621571","displayType":"Tweet"}},"clientEventInfo":{"details":{"timelinesDetails":{"controllerData":"DAACDAAEDAABCgABAAX6IIAOKAUAAAAA"},"conversationDetails":{"conversationSection":"HighQuality"}}}}}],"displayType":"VerticalConversation","clientEventInfo":{"details":{"conversationDetails":{"conversationSection":"HighQuality"}}}}}},{"entryId":"cursor-bottom-7827489164125298595","sortIndex":"7827489164125298595","content":{"operation":{"cursor":{"value":"LBmGhsC+ibH1peAmgICjpbS0m98mgICj7a2lmd8mhsC4rbmsmN8mgMCqkbT1p+AmgsC4ucv4o+AmhoCyrf+nlt8mhMC9qfOwlt8mJQISAAA=","cursorType":"Bottom"}}}}]}},{"terminateTimeline":{"direction":"Top"}}],"responseObjects":{"feedbackActions":{}}}} diff --git a/scraper/tweet.go b/scraper/tweet.go new file mode 100644 index 0000000..ee3c9de --- /dev/null +++ b/scraper/tweet.go @@ -0,0 +1,94 @@ +package scraper + +import ( + "time" + "fmt" + "strings" +) + + +type TweetID string + +type Tweet struct { + ID TweetID + User UserID + Text string + PostedAt time.Time + NumLikes int + NumRetweets int + NumReplies int + NumQuoteTweets int + HasVideo bool + InReplyTo TweetID + + Urls []string + Images []string + Mentions []UserID + Hashtags []string + QuotedTweet TweetID +} + +func (t Tweet) String() string { + return fmt.Sprintf( +`ID %s, User %s: %q (%s). Likes: %d, Retweets: %d, QTs: %d, Replies: %d. +Urls: %v Images: %v Mentions: %v Hashtags: %v`, + t.ID, t.User, t.Text, t.PostedAt, t.NumLikes, t.NumRetweets, t.NumQuoteTweets, t.NumReplies, t.Urls, t.Images, t.Mentions, t.Hashtags) +} + +func ParseSingleTweet(apiTweet APITweet) (ret Tweet, err error) { + ret.ID = TweetID(apiTweet.ID) + ret.User = UserID(apiTweet.UserIDStr) + ret.Text = apiTweet.FullText + + // Remove embedded links at the end of the text + if len(apiTweet.Entities.URLs) == 1 { + url := apiTweet.Entities.URLs[0].URL + if strings.Index(ret.Text, url) == len(ret.Text) - len(url) { + ret.Text = ret.Text[0:len(ret.Text) - len(url) - 1] // Also strip the newline + } + } + if len(apiTweet.Entities.Media) == 1 { + url := apiTweet.Entities.Media[0].URL + if strings.Index(ret.Text, url) == len(ret.Text) - len(url) { + ret.Text = ret.Text[0:len(ret.Text) - len(url) - 1] // Also strip the trailing space + } + } + + // Remove leading `@username` for replies + if apiTweet.InReplyToScreenName != "" { + if strings.Index(ret.Text, "@" + apiTweet.InReplyToScreenName) == 0 { + ret.Text = ret.Text[len(apiTweet.InReplyToScreenName) + 2:] // `@`, username, space + } + } + + ret.PostedAt, err = time.Parse(time.RubyDate, apiTweet.CreatedAt) + if err != nil { + return + } + ret.NumLikes = apiTweet.FavoriteCount + ret.NumRetweets = apiTweet.RetweetCount + ret.NumReplies = apiTweet.ReplyCount + ret.NumQuoteTweets = apiTweet.QuoteCount + ret.InReplyTo = TweetID(apiTweet.InReplyToStatusIDStr) + + for _, url := range apiTweet.Entities.URLs { + ret.Urls = append(ret.Urls, url.ExpandedURL) + } + for _, media := range apiTweet.Entities.Media { + if media.Type != "photo" { + panic_str := fmt.Sprintf("Unknown media type: %q", media.Type) + panic(panic_str) + } + ret.Images = append(ret.Images, media.MediaURLHttps) + } + for _, hashtag := range apiTweet.Entities.Hashtags { + ret.Hashtags = append(ret.Hashtags, hashtag.Text) + } + for _, mention := range apiTweet.Entities.Mentions { + ret.Mentions = append(ret.Mentions, UserID(mention.UserID)) + } + + ret.QuotedTweet = TweetID(apiTweet.QuotedStatusIDStr) + ret.HasVideo = false // TODO + return +} diff --git a/scraper/tweet_test.go b/scraper/tweet_test.go new file mode 100644 index 0000000..17510aa --- /dev/null +++ b/scraper/tweet_test.go @@ -0,0 +1,126 @@ +package scraper_test + +import ( + // "fmt" + "encoding/json" + "io/ioutil" + "testing" + + "offline_twitter/scraper" +) + +func TestParseSingleTweet(t *testing.T) { + data, err := ioutil.ReadFile("test_responses/dave_smith_anarchist_handbook.json") + if err != nil { + panic(err) + } + var tweet_resp scraper.TweetResponse + err = json.Unmarshal(data, &tweet_resp) + if err != nil { + t.Errorf(err.Error()) + } + + tweets := tweet_resp.GlobalObjects.Tweets + users := tweet_resp.GlobalObjects.Users + + if len(tweets) != 11 { + t.Errorf("Expected %d tweets, got %d instead", 11, len(tweets)) + } + + if len(users) != 11 { + t.Errorf("Expected %d users, got %d instead", 11, len(users)) + } + + dave_smith_tweet, ok := tweets["1395881699142160387"] + if !ok { + t.Errorf("Didn't find the Dave Smith tweet.") + } + + tweet, err := scraper.ParseSingleTweet(dave_smith_tweet) + if err != nil { + t.Fatalf(err.Error()) + } + + expected_text := "The fact that @michaelmalice new book ‘The Anarchist Handbook’ is just absolutely destroying on the charts is the largest white pill I’ve swallowed in years." + actual_text := tweet.Text + + if actual_text != expected_text { + t.Errorf("Expected: %q; got %q", expected_text, actual_text) + } +} + +func TestParseSingleTweet2(t *testing.T) { + data, err := ioutil.ReadFile("test_responses/midriffs_anarchist_cookbook.json") + if err != nil { + panic(err) + } + var tweet_resp scraper.TweetResponse + err = json.Unmarshal(data, &tweet_resp) + if err != nil { + t.Errorf(err.Error()) + } + + tweets := tweet_resp.GlobalObjects.Tweets + users := tweet_resp.GlobalObjects.Users + + if len(tweets) != 12 { + t.Errorf("Expected %d tweets, got %d instead", 11, len(tweets)) + } + + if len(users) != 11 { + t.Errorf("Expected %d users, got %d instead", 11, len(users)) + } + + t1, ok := tweets["1395882872729477131"] + if !ok { + t.Fatalf("Didn't find first tweet") + } + t2, ok := tweets["1396194922009661441"] + if !ok { + t.Fatalf("Didn't find second tweet") + } + + tweet1, err := scraper.ParseSingleTweet(t1) + if err != nil { + t.Fatalf(err.Error()) + } + tweet2, err := scraper.ParseSingleTweet(t2) + if err != nil { + t.Fatalf(err.Error()) + } + + expected_text := "this saddens me every time" + if tweet1.Text != expected_text { + t.Errorf("Expected: %q, got: %q", expected_text, tweet1.Text) + } + expected_text = "sometimes they're too dimwitted to even get the wrong title right" + if tweet2.Text != expected_text { + t.Errorf("Expected: %q, got: %q", expected_text, tweet2.Text) + } + + if len(tweet1.Images) != 1 { + t.Errorf("Expected 1 images but got %d", len(tweet1.Images)) + } + if tweet1.QuotedTweet != "" { + t.Errorf("Incorrectly believes it quote-tweets %q", tweet1.QuotedTweet) + } + + if tweet2.QuotedTweet == "" { + t.Errorf("Should be a quoted tweet") + } + + quoted_tweet_, ok := tweets[string(tweet2.QuotedTweet)] + if !ok { + t.Errorf("Couldn't find the quoted tweet") + } + + quoted_tweet, err := scraper.ParseSingleTweet(quoted_tweet_) + if err != nil { + t.Errorf(err.Error()) + } + + expected_text = "I always liked \"The Anarchist's Cookbook.\"" + if quoted_tweet.Text != expected_text { + t.Errorf("Expected %q, got %q", expected_text, quoted_tweet.Text) + } +} diff --git a/scraper/user.go b/scraper/user.go new file mode 100644 index 0000000..428e60e --- /dev/null +++ b/scraper/user.go @@ -0,0 +1,3 @@ +package scraper + +type UserID string