From d9faf231a045b5e95ddf1c34c60fb92404818546 Mon Sep 17 00:00:00 2001 From: Gervasio Marchand Date: Sat, 11 Feb 2023 13:14:15 -0300 Subject: [PATCH] Use Mastodon's API to fetch hashtagged statuses (#39) --- src/JsonContexts.cs | 2 +- src/Program.cs | 25 ++++++++++--------------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/JsonContexts.cs b/src/JsonContexts.cs index ce9aaf3..807653d 100644 --- a/src/JsonContexts.cs +++ b/src/JsonContexts.cs @@ -7,7 +7,7 @@ internal partial class JsonContext : JsonSerializerContext { } -[JsonSerializable(typeof(TagResponse))] +[JsonSerializable(typeof(Status[]))] [JsonSourceGenerationOptions(PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase)] internal partial class CamelCaseJsonContext : JsonSerializerContext { diff --git a/src/Program.cs b/src/Program.cs index 66e526a..f24aa24 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -85,7 +85,7 @@ await Parallel.ForEachAsync(sitesTags, new ParallelOptions{MaxDegreeOfParallelis var (site, tag) = st; Console.WriteLine($"Fetching tag #{tag} from {site}"); - var url = $"https://{site}/tags/{tag}.json"; + var url = $"https://{site}/api/v1/timelines/tag/{tag}?limit=40"; if (sitesRobotFile.TryGetValue(site, out var robotsFile)) { var allowed = robotsFile.IsAllowedAccess(new Uri(url), "GetMoarFediverse"); @@ -114,23 +114,18 @@ await Parallel.ForEachAsync(sitesTags, new ParallelOptions{MaxDegreeOfParallelis } var json = await response.Content.ReadAsStringAsync(); - var data = JsonSerializer.Deserialize(json, CamelCaseJsonContext.Default.TagResponse); + + var data = JsonSerializer.Deserialize(json, CamelCaseJsonContext.Default.StatusArray); if (data == null) { Console.WriteLine($"Error deserializing the response when pulling #{tag} posts from {site}"); return; } - if (data.OrderedItems == null) - { - Console.WriteLine($"Got null on OrderedItems when pulling #{tag} posts from {site}"); - return; - } - var count = 0; - foreach (var statusLink in data.OrderedItems.Where(i => !imported.Contains(i))) + foreach (var statusLink in data.Where(i => !imported.Contains(i.Uri))) { - statusesToLoadBag.Add(statusLink); + statusesToLoadBag.Add(statusLink.Uri); count++; } @@ -168,12 +163,12 @@ if (importedList.Count > 5000) File.WriteAllLines(importedPath, importedList); -public class TagResponse +public class Status { - public string[]? OrderedItems { get; } - - public TagResponse(string[] orderedItems) + public string Uri { get; } + + public Status(string uri) { - OrderedItems = orderedItems; + Uri = uri; } }