Exemplo n.º 1
0
        //たまに失敗するから注意
        public List <NicoNicoHistoryData> GetHistroyData()
        {
            History.Status = "視聴履歴取得中";
            int retry = 1;

start:
            //たまに失敗する

            HttpResponseMessage result = NicoNicoWrapperMain.GetSession().GetResponseAsync(HistoryUrl).Result;

            //失敗
            if (result.StatusCode == HttpStatusCode.ServiceUnavailable)
            {
                History.Status = "視聴履歴取得失敗(" + retry++ + "回)";
                goto start;
            }

            HtmlDocument doc = new HtmlDocument();

            doc.LoadHtml2(result.Content.ReadAsStringAsync().Result);

            var info = doc.DocumentNode.SelectNodes(GetVideoInfoXPath);

            List <NicoNicoHistoryData> ret = new List <NicoNicoHistoryData>();

            if (info == null)
            {
                History.Status = "視聴履歴はありません。";

                return(ret);
            }

            foreach (HtmlNode node in info)
            {
                NicoNicoHistoryData data = new NicoNicoHistoryData();

                //---各種情報取得---
                data.ThumbnailUrl = node.SelectSingleNode("child::div[@class='thumbContainer']/a/img").Attributes["src"].Value;

                //削除されていない動画だったら
                if (!data.ThumbnailUrl.Contains("deleted"))
                {
                    data.Length = node.SelectSingleNode("child::div[@class='thumbContainer']/span").InnerText;
                }
                else
                {
                    data.ThumbnailUrl = "http://www.nicovideo.jp/" + data.ThumbnailUrl;
                }
                data.WatchDate  = node.SelectSingleNode("child::div[@class='section']/p").ChildNodes["#text"].InnerText;
                data.WatchCount = node.SelectSingleNode("child::div[@class='section']/p/span").InnerText;

                data.Title = HttpUtility.HtmlDecode(node.SelectSingleNode("child::div[@class='section']/h5/a").InnerText);
                data.Id    = node.SelectSingleNode("child::div[@class='section']/h5/a").Attributes["href"].Value.Substring(6);

                data.ViewCounter    = node.SelectSingleNode("child::div[@class='section']/ul[@class='metadata']/li[@class='play']").InnerText;
                data.CommentCounter = node.SelectSingleNode("child::div[@class='section']/ul[@class='metadata']/li[@class='comment']").InnerText;
                data.MylistCounter  = node.SelectSingleNode("child::div[@class='section']/ul[@class='metadata']/li[@class='mylist']/a").InnerText;
                data.PostDate       = node.SelectSingleNode("child::div[@class='section']/ul[@class='metadata']/li[@class='posttime']").InnerText;


                ret.Add(data);
            }

            History.Status = "視聴履歴取得完了";

            return(ret);
        }
Exemplo n.º 2
0
        //たまに失敗するから注意
        public List<NicoNicoHistoryData> GetHistroyData()
        {
            History.Status = "視聴履歴取得中";
            int retry = 1;
            start:
            //たまに失敗する

            HttpResponseMessage result = NicoNicoWrapperMain.Session.GetResponseAsync(HistoryUrl).Result;

            //失敗
            if(result.StatusCode == HttpStatusCode.ServiceUnavailable) {

                History.Status = "視聴履歴取得失敗(" + retry++ + "回)";
                goto start;
            }

            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml2(result.Content.ReadAsStringAsync().Result);

            var info = doc.DocumentNode.SelectNodes(GetVideoInfoXPath);

            List<NicoNicoHistoryData> ret = new List<NicoNicoHistoryData>();

            if(info == null) {

                History.Status = "視聴履歴はありません。";

                return ret;
            }

            foreach(HtmlNode node in info) {

                NicoNicoHistoryData data = new NicoNicoHistoryData();

                //---各種情報取得---
                data.ThumbnailUrl = node.SelectSingleNode("child::div[@class='thumbContainer']/a/img").Attributes["data-original"].Value;

                //削除されていない動画だったら
                if(!data.ThumbnailUrl.Contains("deleted")) {

                    data.Length = node.SelectSingleNode("child::div[@class='thumbContainer']/span").InnerText;
                } else {

                    data.ThumbnailUrl = "http://www.nicovideo.jp/" + data.ThumbnailUrl;
                }
                data.WatchDate = node.SelectSingleNode("child::div[@class='section']/p").ChildNodes["#text"].InnerText;
                data.WatchCount = node.SelectSingleNode("child::div[@class='section']/p/span").InnerText;

                data.Title = HttpUtility.HtmlDecode(node.SelectSingleNode("child::div[@class='section']/h5/a").InnerText);
                data.Id = node.SelectSingleNode("child::div[@class='section']/h5/a").Attributes["href"].Value.Substring(6);

                data.ViewCounter = node.SelectSingleNode("child::div[@class='section']/ul[@class='metadata']/li[@class='play']").InnerText;
                data.CommentCounter = node.SelectSingleNode("child::div[@class='section']/ul[@class='metadata']/li[@class='comment']").InnerText;
                data.MylistCounter = node.SelectSingleNode("child::div[@class='section']/ul[@class='metadata']/li[@class='mylist']/a").InnerText;
                data.PostDate = node.SelectSingleNode("child::div[@class='section']/ul[@class='metadata']/li[@class='posttime']").InnerText;

                ret.Add(data);
            }

            History.Status = "視聴履歴取得完了";

            return ret;
        }