Skip to content

Commit

Permalink
#5 コメント取得時にForkを指定できるようにして、簡単コメントを除いた取得などに対応出来るよう修正。
Browse files Browse the repository at this point in the history
tor4kichi committed Mar 22, 2023
1 parent 2b751ea commit 87abab9
Showing 2 changed files with 52 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -55,6 +55,34 @@ public async Task<ThreadResponseContainer> GetCommentsAsync(NvComment videoComme
);
}

/// <summary>
/// 動画に投稿されたコメントを取得します。
/// </summary>
/// <param name="threadKey"></param>
/// <param name="targets">取得対象とするコメント郡を指定します。参考:ThreadTargetIdConstants</param>
/// <param name="language"></param>
/// <param name="ct"></param>
/// <returns></returns>
/// <remarks>VideoClient.VideoWatch.GetInitialWatchDataAsync() のレスポンスデータに含まれる NvComment のデータを引数に渡してください。</remarks>
public async Task<ThreadResponseContainer> GetCommentsAsync(string threadKey, IEnumerable<NvCommentParamsTarget> targets, string language, CancellationToken ct = default)
{
string requestParamsJson = JsonSerializer.Serialize(new ThreadRequestContainer()
{
ThreadKey = threadKey,
Params = new ThreadRequestContainer.ThreadRequestParams()
{
Targets = targets.ToList(),
Language = language,
}
});
return await _context.SendJsonAsAsync<ThreadResponseContainer>(
HttpMethod.Post,
NVCommentApiUrl,
requestParamsJson,
ct: ct
);
}

/// <summary>
/// スレッドにコメントを送信するためのポストキーを取得します。
/// </summary>
@@ -137,7 +165,7 @@ public async Task<ThreadPostResponse> EasyPostCommentAsync(
}
}

public static class ThreadTargetIdConstatns
public static class ThreadTargetForkConstants
{
public const string Easy = "easy";
public const string Main = "main";
26 changes: 23 additions & 3 deletions Test/NiconicoToolkit.Shared.Test/VideoWatchTest.cs
Original file line number Diff line number Diff line change
@@ -165,9 +165,29 @@ public async Task NvGetCommentAsync(string videoId)
Assert.IsNotNull(commentRes.Data.GlobalComments);
}

[TestMethod]
[DataRow("sm38647727")]
public async Task NvGetCommentWithoutEasyPostAsync(string videoId)
{
var res = await _context.Video.VideoWatch.GetInitialWatchDataAsync(videoId, false, false);

Assert.IsNotNull(res.WatchApiResponse.WatchApiData.Comment);

var nvComment = res.WatchApiResponse.WatchApiData.Comment.NvComment;
var commentRes = await _context.Video.NvComment.GetCommentsAsync(
nvComment.ThreadKey,
nvComment.Params.Targets.Where(x => x.Fork != ThreadTargetForkConstants.Easy),
nvComment.Params.Language
);

Assert.IsNotNull(commentRes.Data);
Assert.IsNotNull(commentRes.Data.Threads);
Assert.IsNull(commentRes.Data.Threads.FirstOrDefault(x => x.Fork == ThreadTargetForkConstants.Easy));
}


[TestMethod]
[DataRow("sm9", "うぽつ", ThreadTargetIdConstatns.Main)]
[DataRow("sm9", "うぽつ", ThreadTargetForkConstants.Main)]
public async Task NvPostCommentAsync(string videoId, string commentBody, string threadTarget)
{
var res = await _context.Video.VideoWatch.GetInitialWatchDataAsync(videoId, false, false);
@@ -194,7 +214,7 @@ public async Task NvPostCommentAsync(string videoId, string commentBody, string
}

[TestMethod]
[DataRow("sm9", "うぽつ", ThreadTargetIdConstatns.Main)]
[DataRow("sm9", "うぽつ", ThreadTargetForkConstants.Main)]
public async Task NVPostCommentFailWithInvalidPostKeyAsync(string videoId, string commentBody, string threadTarget)
{
var res = await _context.Video.VideoWatch.GetInitialWatchDataAsync(videoId, false, false);
@@ -236,7 +256,7 @@ public async Task NvEasyPostCommentAsync(string videoId)
var comment = res.WatchApiResponse.WatchApiData.Comment;
var nvComment = comment.NvComment;
int vposMs = new Random().Next(res.WatchApiResponse.WatchApiData.Video.Duration * 1000);
var thread = comment.Threads.FirstOrDefault(x => x.ForkLabel == ThreadTargetIdConstatns.Easy);
var thread = comment.Threads.FirstOrDefault(x => x.ForkLabel == ThreadTargetForkConstants.Easy);
var easyPostKeyRes = await _context.Video.NvComment.GetEasyPostKeyAsync(thread.Id.ToString());
Assert.IsNotNull(easyPostKeyRes.Data);
var commentRes = await _context.Video.NvComment.EasyPostCommentAsync(

0 comments on commit 87abab9

Please sign in to comment.