From 35bc724c920e2cb9833c6683e948d9d3692a509a Mon Sep 17 00:00:00 2001 From: Vincent Cloutier Date: Sun, 27 Nov 2022 15:41:55 -0500 Subject: [PATCH] added media --- .../TwitterTweetsService.cs | 21 ++++++++- .../TwitterUserService.cs | 44 +++++++++---------- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/src/BirdsiteLive.Twitter/TwitterTweetsService.cs b/src/BirdsiteLive.Twitter/TwitterTweetsService.cs index 25e9339..a1bf051 100644 --- a/src/BirdsiteLive.Twitter/TwitterTweetsService.cs +++ b/src/BirdsiteLive.Twitter/TwitterTweetsService.cs @@ -202,6 +202,25 @@ namespace BirdsiteLive.Twitter string creationTime = tweet.GetProperty("content").GetProperty("itemContent") .GetProperty("tweet_results").GetProperty("result").GetProperty("legacy") .GetProperty("created_at").GetString().Replace(" +0000", ""); + + JsonElement extendedEntities; + bool hasMedia = tweet.GetProperty("content").GetProperty("itemContent") + .GetProperty("tweet_results").GetProperty("result").GetProperty("legacy") + .TryGetProperty("extended_entities", out extendedEntities); + + List Media = new List(); + if (hasMedia) + { + foreach (JsonElement media in extendedEntities.GetProperty("media").EnumerateArray()) + { + var m = new ExtractedMedia + { + MediaType = GetMediaType(media.GetProperty("type").GetString(), media.GetProperty("media_url_https").GetString()), + Url = media.GetProperty("media_url_https").GetString(), + }; + Media.Add(m); + } + } var extractedTweet = new ExtractedTweet { Id = Int64.Parse(tweet.GetProperty("sortIndex").GetString()), @@ -212,7 +231,7 @@ namespace BirdsiteLive.Twitter IsReply = isReply, IsThread = false, IsRetweet = isRetweet, - Media = null, + Media = Media.Count() == 0 ? null : Media.ToArray(), RetweetUrl = "https://t.co/123", OriginalAuthor = OriginalAuthor, }; diff --git a/src/BirdsiteLive.Twitter/TwitterUserService.cs b/src/BirdsiteLive.Twitter/TwitterUserService.cs index 1a8ca9a..e774c66 100644 --- a/src/BirdsiteLive.Twitter/TwitterUserService.cs +++ b/src/BirdsiteLive.Twitter/TwitterUserService.cs @@ -56,10 +56,30 @@ namespace BirdsiteLive.Twitter var c = await httpResponse.Content.ReadAsStringAsync(); res = JsonDocument.Parse(c); } + var result = res.RootElement.GetProperty("data").GetProperty("user").GetProperty("result"); + string profileBannerURL = null; + JsonElement profileBannerURLObject; + if (result.GetProperty("legacy").TryGetProperty("profile_banner_url", out profileBannerURLObject)) + { + profileBannerURL = profileBannerURLObject.GetString(); + } + + return new TwitterUser + { + Id = long.Parse(result.GetProperty("rest_id").GetString()), + Acct = username, + Name = result.GetProperty("legacy").GetProperty("name").GetString(), //res.RootElement.GetProperty("data").GetProperty("name").GetString(), + Description = "", //res.RootElement.GetProperty("data").GetProperty("description").GetString(), + Url = "", //res.RootElement.GetProperty("data").GetProperty("url").GetString(), + ProfileImageUrl = result.GetProperty("legacy").GetProperty("profile_image_url_https").GetString().Replace("normal", "400x400"), + ProfileBackgroundImageUrl = profileBannerURL, + ProfileBannerURL = profileBannerURL, + Protected = false, //res.RootElement.GetProperty("data").GetProperty("protected").GetBoolean(), + }; } - catch (HttpRequestException e) + catch (System.Collections.Generic.KeyNotFoundException) { - throw; + throw new UserNotFoundException(); //if (e.TwitterExceptionInfos.Any(x => x.Message.ToLowerInvariant().Contains("User has been suspended".ToLowerInvariant()))) //{ // throw new UserHasBeenSuspendedException(); @@ -88,26 +108,6 @@ namespace BirdsiteLive.Twitter //foreach (var descriptionUrl in user.Entities?.Description?.Urls?.OrderByDescending(x => x.URL.Length)) // description = description.Replace(descriptionUrl.URL, descriptionUrl.ExpandedURL); - var result = res.RootElement.GetProperty("data").GetProperty("user").GetProperty("result"); - string profileBannerURL = null; - JsonElement profileBannerURLObject; - if (result.GetProperty("legacy").TryGetProperty("profile_banner_url", out profileBannerURLObject)) - { - profileBannerURL = profileBannerURLObject.GetString(); - } - - return new TwitterUser - { - Id = long.Parse(result.GetProperty("rest_id").GetString()), - Acct = username, - Name = result.GetProperty("legacy").GetProperty("name").GetString(), //res.RootElement.GetProperty("data").GetProperty("name").GetString(), - Description = "", //res.RootElement.GetProperty("data").GetProperty("description").GetString(), - Url = "", //res.RootElement.GetProperty("data").GetProperty("url").GetString(), - ProfileImageUrl = result.GetProperty("legacy").GetProperty("profile_image_url_https").GetString().Replace("normal", "400x400"), - ProfileBackgroundImageUrl = profileBannerURL, - ProfileBannerURL = profileBannerURL, - Protected = false, //res.RootElement.GetProperty("data").GetProperty("protected").GetBoolean(), - }; }