private string GetContent(INiconicoIchibaInfo niconicoIchibaInfo, bool isXml)
        {
            var info = new MarketInformation();

            foreach (var item in niconicoIchibaInfo.IchibaItems)
            {
                var marketItem = new MarketItem()
                {
                    Category = item.Category,
                    LinkUrl  = item.LinkUrl,
                    Price    = item.Price,
                    Name     = item.Name,
                    ThumbUrl = item.ThumbUrl,
                };
                info.Items.Add(marketItem);
            }
            string serialized;

            if (isXml)
            {
                serialized = Xmlparser.Serialize(info);
            }
            else
            {
                serialized = JsonParser.Serialize(info);
            }

            return(serialized);
        }
        /// <summary>
        /// XML文字列を取得する
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public string GetXmlContent(IDmcInfo info)
        {
            var data = new Xml::GetThumbInfoApiResponse();

            data.Thumb.VideoId       = info.Id;
            data.Thumb.Title         = info.Title;
            data.Thumb.Description   = info.Description;
            data.Thumb.ThumbnailUrl  = info.ThumbInfo.GetSpecifiedThumbnail(ThumbSize.Large);
            data.Thumb.FirstRetrieve = new DateTimeOffset(info.UploadedOn, TimeSpan.FromHours(9)).ToString("yyyy-MM-ddTHH:mm:sszzz");
            data.Thumb.Length        = $"{Math.Floor((double)info.Duration / 60).ToString().PadLeft(2, '0')}:{info.Duration % 60}";
            data.Thumb.ViewCounter   = info.ViewCount;
            data.Thumb.CommentNum    = info.CommentCount;
            data.Thumb.LikeCounter   = info.LikeCount;
            data.Thumb.MylistCounter = info.MylistCount;
            data.Thumb.WatchUrl      = Const::NetConstant.NiconicoWatchUrl + info.Id;
            data.Thumb.Tags.Tag.AddRange(info.Tags.Select(t => new Xml::Tag()
            {
                Text = t
            }));
            data.Thumb.UserId       = info.ChannelName.IsNullOrEmpty() ? info.OwnerID.ToString() : null;
            data.Thumb.UserNickname = info.ChannelName.IsNullOrEmpty() ? info.Owner : null;
            data.Thumb.ChName       = info.ChannelName.IsNullOrEmpty() ? null : info.ChannelName;
            data.Thumb.ChId         = info.ChannelName.IsNullOrEmpty() ? null : info.ChannelID;

            return(Xmlparser.Serialize(data));
        }
Beispiel #3
0
        /// <summary>
        /// コメントを書き込む
        /// </summary>
        private void WriteComments(Xml::Packet comments, string targetPath)
        {
            string content = Xmlparser.Serialize(comments);

            IOUtils.CreateDirectoryIfNotExist(targetPath);

            using var fs = new StreamWriter(targetPath);
            fs.Write(content);
        }
Beispiel #4
0
        public IAttemptResult <LocalCommentInfo> LoadComment(string folderPath, string niconicoID)
        {
            string?path = this.GetCommentFilePath(folderPath, niconicoID);

            if (path is null)
            {
                return(AttemptResult <LocalCommentInfo> .Fail("コメントファイルが存在しません。"));
            }

            string content;

            try
            {
                content = this._fileIO.OpenRead(path);
            }
            catch (Exception ex)
            {
                this._logger.Error("コメントファイルの読み込みに失敗しました。", ex);
                return(AttemptResult <LocalCommentInfo> .Fail($"コメントファイルの読み込みに失敗しました。(詳細:{ex.Message})"));
            }

            V2::PacketElement?data;

            try
            {
                data = Xmlparser.Deserialize <V2::PacketElement>(content);
            }
            catch (Exception ex)
            {
                this._logger.Error("コメントファイルの解析に失敗しました。", ex);
                return(AttemptResult <LocalCommentInfo> .Fail($"コメントファイルの解析に失敗しました。(詳細:{ ex.Message})"));
            }

            if (data is null)
            {
                return(AttemptResult <LocalCommentInfo> .Fail("コメントファイルの解析に失敗しました。"));
            }

            DateTime lastUpdatedTime;

            try
            {
                var info = new FileInfo(path);
                lastUpdatedTime = info.LastWriteTime;
            }
            catch (Exception ex)
            {
                this._logger.Error("コメントファイル情報の取得に失敗しました。", ex);
                return(AttemptResult <LocalCommentInfo> .Fail($"コメントファイル情報の取得に失敗しました。(詳細:{ex.Message})"));
            }

            var converted = data.Chat.Select(c => this._converter.ConvertChatToCoreComment(c));

            return(AttemptResult <LocalCommentInfo> .Succeeded(new LocalCommentInfo(lastUpdatedTime, converted)));
        }
Beispiel #5
0
        public IAttemptResult WriteComment(IEnumerable <Core::IComment> comments, Core::IThreadInfo threadInfo, CommentWriterOption option)
        {
            string content;

            var data = new V2::PacketElement()
            {
                VideoID = option.VideoID
            };

            data.Chat.AddRange(comments.Select(c => this._converter.ConvertCoreCommentToChat(c)));
            data.Thread = this._converter.ConvertCoreThreadInfoToThread(threadInfo);

            try
            {
                content = Xmlparser.Serialize(data, new XmlWriterSettings()
                {
                    OmitXmlDeclaration = option.OmitXmlDeclaration, Indent = true
                });
            }
            catch (Exception ex)
            {
                this._logger.Error("コメントのシリアライズに失敗しました。", ex);
                return(AttemptResult.Fail($"コメントのシリアライズに失敗しました。(詳細:{ex})"));
            }

            try
            {
                this._fileIO.Write(option.Path, content);
            }
            catch (Exception ex)
            {
                this._logger.Error("コメントの書き込みに失敗しました。", ex);
                return(AttemptResult.Fail($"コメントの書き込みに失敗しました。(詳細:{ex})"));
            }

            return(AttemptResult.Succeeded());
        }