From 9f31f3890f033ca64c125bba13e43a556dbe5ddc Mon Sep 17 00:00:00 2001 From: thewh1teagle <61390950+thewh1teagle@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:47:05 +0300 Subject: [PATCH] feat: expand URLs for profile and tweets --- types.go | 22 +++++++++++----------- util.go | 14 ++++++++++++-- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/types.go b/types.go index 35fccd5..0118fb2 100644 --- a/types.go +++ b/types.go @@ -10,6 +10,14 @@ type ( Name string } + // Url represents a URL with display, expanded, and index data. + Url struct { + DisplayURL string `json:"display_url"` + ExpandedURL string `json:"expanded_url"` + URL string `json:"url"` + Indices []int `json:"indices"` + } + // Photo type. Photo struct { ID string @@ -105,10 +113,7 @@ type ( Type string `json:"type"` URL string `json:"url"` } `json:"media"` - URLs []struct { - ExpandedURL string `json:"expanded_url"` - URL string `json:"url"` - } `json:"urls"` + URLs []Url `json:"urls"` UserMentions []struct { IDStr string `json:"id_str"` Name string `json:"name"` @@ -195,15 +200,10 @@ type ( Description string `json:"description"` Entities struct { Description struct { - Urls []interface{} `json:"urls"` + Urls []Url `json:"urls"` } `json:"description"` URL struct { - Urls []struct { - DisplayURL string `json:"display_url"` - ExpandedURL string `json:"expanded_url"` - URL string `json:"url"` - Indices []int `json:"indices"` - } `json:"urls"` + Urls []Url `json:"urls"` } `json:"url"` } `json:"entities"` FastFollowersCount int `json:"fast_followers_count"` diff --git a/util.go b/util.go index 0a2f658..f288a13 100644 --- a/util.go +++ b/util.go @@ -157,6 +157,7 @@ func parseLegacyTweet(user *legacyUser, tweet *legacyTweet) *Tweet { if tweetID == "" { return nil } + text := expandURLs(tweet.FullText, tweet.Entities.URLs) username := user.ScreenName name := user.Name tw := &Tweet{ @@ -167,7 +168,7 @@ func parseLegacyTweet(user *legacyUser, tweet *legacyTweet) *Tweet { PermanentURL: fmt.Sprintf("https://twitter.com/%s/status/%s", username, tweetID), Replies: tweet.ReplyCount, Retweets: tweet.RetweetCount, - Text: tweet.FullText, + Text: text, UserID: tweet.UserIDStr, Username: username, } @@ -379,12 +380,21 @@ func parseProfile(user legacyUser) Profile { return profile } +func expandURLs(text string, urls []Url) string { + expandedText := text + for _, url := range urls { + expandedText = strings.ReplaceAll(expandedText, url.URL, url.ExpandedURL) + } + return expandedText +} + func parseProfileV2(user userResult) Profile { u := user.Legacy + description := expandURLs(u.Description, u.Entities.Description.Urls) profile := Profile{ Avatar: u.ProfileImageURLHTTPS, Banner: u.ProfileBannerURL, - Biography: u.Description, + Biography: description, FollowersCount: u.FollowersCount, FollowingCount: u.FavouritesCount, FriendsCount: u.FriendsCount,