/// <summary> /// コメントを取得する(エントリー・ポイント) /// </summary> /// <returns></returns> public async Task <List <ComApi.CommentBody.Json.JsonComment> > GetComment(WatchPage::BaseJson data, NicoContext context, bool kako = false) { var logger = NicoLogger.GetLogger(); logger.Debug($"過去ログ: {kako}", moduleName); //threadkeyを取得 (crInfo.Threadkey, crInfo.Force184) = await GetThreadKey(data.video.dmcInfo.thread.thread_id.ToString(), context); //最古コメントを取得 logger.Log("現行コメントをダウンロード中..."); var comments = new CommentList(); comments.Add(await GetCommentData(data)); ComApi::CommentBody.Json.Chat firstComment = comments.GetFirstComment(); if (kako) { crInfo.WayBackKey = await GetWayBackKey(data.video.dmcInfo.thread.thread_id, context); //初期whenデータを作成 int _when = comments.GetFirstComment().date; int i = 1; do { var kacomments = new CommentList(); logger.Log($"過去ログをダウンロード中...({i}件目、no.{firstComment.no}まで取得完了)"); kacomments.Add(await GetCommentData(data, _when)); try { firstComment = kacomments.GetFirstComment(); } catch { break; } _when = firstComment.GetPrevDate(); comments.Merge(kacomments); ++i; if (comments.IsMax(i)) { break; } }while (firstComment.no > 1); } logger.Log("ダウンロードしたコメントの整合性をチェックしています。"); comments.FormatComments(); return(comments.Comments); }
/// <summary> /// chatを取得 /// </summary> private ComApi::CommentBody.XML.packetChat GetChat(ComApi::CommentBody.Json.Chat chat) { var xmlChat = new ComApi::CommentBody.XML.packetChat(); xmlChat.thread = chat.thread == null ? 0 : int.Parse(chat.thread); xmlChat.no = chat.no; xmlChat.vpos = chat.vpos; xmlChat.date = chat.date; xmlChat.date_usec = chat.date_usec; xmlChat.premium = chat.premium; xmlChat.anonymity = chat.anonymity; xmlChat.user_id = chat.user_id == null ? "" : chat.user_id; xmlChat.mail = chat.mail == null ? "" : chat.mail; xmlChat.leaf = chat.leaf; xmlChat.deleted = chat.deleted; xmlChat.score = chat.score; xmlChat.Value = chat.content == null ? "" : chat.content; return(xmlChat); }