OSDN Git Service

RTの取り消しに /statuses/unretweet.json を使用する
authorKimura Youichi <kim.upsilon@bucyou.net>
Thu, 9 May 2024 16:23:24 +0000 (01:23 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Thu, 9 May 2024 16:23:24 +0000 (01:23 +0900)
OpenTween.Tests/Api/TwitterApiTest.cs
OpenTween/Api/TwitterApi.cs
OpenTween/Twitter.cs

index 05289f1..0ab1aad 100644 (file)
@@ -366,6 +366,31 @@ namespace OpenTween.Api
         }
 
         [Fact]
+        public async Task StatusesUnretweet_Test()
+        {
+            var mock = this.CreateApiConnectionMock<PostRequest>(r =>
+            {
+                Assert.Equal(new("statuses/unretweet.json", UriKind.Relative), r.RequestUri);
+                var expectedQuery = new Dictionary<string, string>
+                {
+                    ["id"] = "100",
+                    ["include_entities"] = "true",
+                    ["include_ext_alt_text"] = "true",
+                    ["tweet_mode"] = "extended",
+                };
+                Assert.Equal(expectedQuery, r.Query);
+            });
+
+            using var twitterApi = new TwitterApi();
+            twitterApi.ApiConnection = mock.Object;
+
+            await twitterApi.StatusesUnretweet(new("100"))
+                .IgnoreResponse();
+
+            mock.VerifyAll();
+        }
+
+        [Fact]
         public async Task SearchTweets_Test()
         {
             var mock = this.CreateApiConnectionMock<GetRequest>(
index f8b1a83..3ce2ddd 100644 (file)
@@ -278,6 +278,26 @@ namespace OpenTween.Api
             return response.ReadAsLazyJson<TwitterStatus>();
         }
 
+        public async Task<LazyJson<TwitterStatus>> StatusesUnretweet(TwitterStatusId statusId)
+        {
+            var request = new PostRequest
+            {
+                RequestUri = new("statuses/unretweet.json", UriKind.Relative),
+                Query = new Dictionary<string, string>
+                {
+                    ["id"] = statusId.Id,
+                    ["include_entities"] = "true",
+                    ["include_ext_alt_text"] = "true",
+                    ["tweet_mode"] = "extended",
+                },
+            };
+
+            using var response = await this.Connection.SendAsync(request)
+                .ConfigureAwait(false);
+
+            return response.ReadAsLazyJson<TwitterStatus>();
+        }
+
         public async Task<TwitterSearchResult> SearchTweets(string query, string? lang = null, int? count = null, TwitterStatusId? maxId = null, TwitterStatusId? sinceId = null)
         {
             var param = new Dictionary<string, string>
index cd8eeb5..3f94068 100644 (file)
@@ -447,7 +447,7 @@ namespace OpenTween
             }
             else
             {
-                await this.Api.StatusesDestroy(post.StatusId.ToTwitterStatusId())
+                await this.Api.StatusesUnretweet(post.RetweetedId.ToTwitterStatusId())
                     .IgnoreResponse();
             }
         }