From d98f02954eb3fba9dc952166b4cdb55ec231e9e1 Mon Sep 17 00:00:00 2001 From: Alessio Date: Sat, 14 May 2022 13:51:51 -0700 Subject: [PATCH] Add support for 'mobile' twitter links --- scraper/url.go | 15 ++++++++++++--- scraper/url_test.go | 6 ++++++ scraper/user_feed.go | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/scraper/url.go b/scraper/url.go index 1a933d6..1722a15 100644 --- a/scraper/url.go +++ b/scraper/url.go @@ -80,9 +80,18 @@ func get_thumbnail_local_path(remote_url string) string { * Given an URL, try to parse it as a tweet url. * The bool is an `is_ok` value; true if the parse was successful, false if it didn't match */ -func TryParseTweetUrl(url string) (UserHandle, TweetID, bool) { - r := regexp.MustCompile(`^https://twitter.com/(\w+)/status/(\d+)(?:\?.*)?$`) - matches := r.FindStringSubmatch(url) +func TryParseTweetUrl(s string) (UserHandle, TweetID, bool) { + parsed_url, err := url.Parse(s) + if err != nil { + return UserHandle(""), TweetID(0), false + } + + if parsed_url.Host != "twitter.com" && parsed_url.Host != "mobile.twitter.com" { + return UserHandle(""), TweetID(0), false + } + + r := regexp.MustCompile(`^/(\w+)/status/(\d+)$`) + matches := r.FindStringSubmatch(parsed_url.Path) if matches == nil { return UserHandle(""), TweetID(0), false } diff --git a/scraper/url_test.go b/scraper/url_test.go index 689e06e..4004898 100644 --- a/scraper/url_test.go +++ b/scraper/url_test.go @@ -117,6 +117,12 @@ func TestParseTweetUrl(t *testing.T) { assert.Equal(UserHandle("NerdNoticing"), handle) assert.Equal(TweetID(1263192389050654720), id) + // Test a `mobile.twitter.com` url + handle, id, is_ok = TryParseTweetUrl("https://mobile.twitter.com/APhilosophae/status/1497720548540964864") + assert.True(is_ok) + assert.Equal(UserHandle("APhilosophae"), handle) + assert.Equal(TweetID(1497720548540964864), id) + // Test invalid url _, _, is_ok = TryParseTweetUrl("https://twitter.com/NerdNoticing/status/1263192389050654720s=20") assert.False(is_ok) diff --git a/scraper/user_feed.go b/scraper/user_feed.go index 4e75068..332a35e 100644 --- a/scraper/user_feed.go +++ b/scraper/user_feed.go @@ -41,7 +41,7 @@ func GetUserFeedGraphqlFor(user_id UserID, min_tweets int) (trove TweetTrove, er return } - if len(api_response.Data.User.Result.Timeline.Timeline.Instructions[0].Entries) < min_tweets && api_response.GetCursorBottom() != "" { + if len(api_response.GetMainInstruction().Entries) < min_tweets && api_response.GetCursorBottom() != "" { err = api.GetMoreTweetsFromGraphqlFeed(user_id, &api_response, min_tweets) if err != nil && !errors.Is(err, END_OF_FEED) { return