Ejemplo n.º 1
0
        public async Task <VInfo> FetchAsync(string id)
        {
            id = id.Substring(7);
            string index = "";
            string api   = $"https://api.bilibili.com/pugv/view/web/season?ep_id={id}";
            string json  = await GetWebSourceAsync(api);

            using var infoJson = JsonDocument.Parse(json);
            var         data      = infoJson.RootElement.GetProperty("data");
            string      cover     = data.GetProperty("cover").ToString();
            string      title     = data.GetProperty("title").ToString();
            string      desc      = data.GetProperty("subtitle").ToString();
            string      ownerName = data.GetProperty("up_info").GetProperty("uname").ToString();
            string      ownerMid  = data.GetProperty("up_info").GetProperty("mid").ToString();
            var         pages     = data.GetProperty("episodes").EnumerateArray().ToList();
            List <Page> pagesInfo = new List <Page>();

            foreach (var page in pages)
            {
                Page p = new Page(page.GetProperty("index").GetInt32(),
                                  page.GetProperty("aid").ToString(),
                                  page.GetProperty("cid").ToString(),
                                  page.GetProperty("id").ToString(),
                                  page.GetProperty("title").ToString().Trim(),
                                  page.GetProperty("duration").GetInt32(),
                                  "",
                                  "",
                                  "",
                                  ownerName,
                                  ownerMid);
                if (p.epid == id)
                {
                    index = p.index.ToString();
                }
                pagesInfo.Add(p);
            }
            string pubTime = pagesInfo.Count > 0 ? pages[0].GetProperty("release_date").ToString() : "";

            pubTime = pubTime != "" ? (new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Convert.ToDouble(pubTime)).ToLocalTime().ToString()) : "";

            var info = new VInfo();

            info.Title     = title.Trim();
            info.Desc      = desc.Trim();
            info.Pic       = cover;
            info.PubTime   = pubTime;
            info.PagesInfo = pagesInfo;
            info.IsBangumi = true;
            info.IsCheese  = true;
            info.Index     = index;

            return(info);
        }
Ejemplo n.º 2
0
        public async Task <VInfo> FetchAsync(string id)
        {
            string api  = $"https://api.bilibili.com/x/web-interface/view?aid={id}";
            string json = await GetWebSourceAsync(api);

            using var infoJson = JsonDocument.Parse(json);
            var    data      = infoJson.RootElement.GetProperty("data");
            string title     = data.GetProperty("title").ToString();
            string desc      = data.GetProperty("desc").ToString();
            string pic       = data.GetProperty("pic").ToString();
            var    owner     = data.GetProperty("owner");
            string ownerMid  = owner.GetProperty("mid").ToString();
            string ownerName = owner.GetProperty("name").ToString();
            string pubTime   = data.GetProperty("pubdate").ToString();

            pubTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Convert.ToDouble(pubTime)).ToLocalTime().ToString();
            bool bangumi = false;

            var         pages     = data.GetProperty("pages").EnumerateArray().ToList();
            List <Page> pagesInfo = new List <Page>();

            foreach (var page in pages)
            {
                Page p = new Page(page.GetProperty("page").GetInt32(),
                                  id,
                                  page.GetProperty("cid").ToString(),
                                  "", //epid
                                  page.GetProperty("part").ToString().Trim(),
                                  page.GetProperty("duration").GetInt32(),
                                  page.GetProperty("dimension").GetProperty("width").ToString() + "x" + page.GetProperty("dimension").GetProperty("height").ToString(),
                                  "",
                                  "",
                                  ownerName,
                                  ownerMid
                                  );
                pagesInfo.Add(p);
            }

            try
            {
                if (data.GetProperty("redirect_url").ToString().Contains("bangumi"))
                {
                    bangumi = true;
                    string epId = Regex.Match(data.GetProperty("redirect_url").ToString(), "ep(\\d+)").Groups[1].Value;
                    //番剧内容通常不会有分P,如果有分P则不需要epId参数
                    if (pages.Count == 1)
                    {
                        pagesInfo.ForEach(p => p.epid = epId);
                    }
                }
            }
            catch { }

            var info = new VInfo();

            info.Title     = title.Trim();
            info.Desc      = desc.Trim();
            info.Pic       = pic;
            info.PubTime   = pubTime;
            info.PagesInfo = pagesInfo;
            info.IsBangumi = bangumi;

            return(info);
        }
Ejemplo n.º 3
0
        public async Task <VInfo> FetchAsync(string id)
        {
            //套用BBDownMediaListFetcher.cs的代码
            //只修改id = id.Substring(12);以及api地址的type=5
            id = id.Substring(12);
            var api  = $"https://api.bilibili.com/x/v1/medialist/info?type=5&biz_id={id}&tid=0";
            var json = await GetWebSourceAsync(api);

            using var infoJson = JsonDocument.Parse(json);
            var    data      = infoJson.RootElement.GetProperty("data");
            var    listTitle = data.GetProperty("title").GetString();
            var    intro     = data.GetProperty("intro").GetString();
            string pubTime   = data.GetProperty("ctime").ToString();

            pubTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Convert.ToDouble(pubTime)).ToLocalTime().ToString();

            List <Page> pagesInfo = new List <Page>();
            bool        hasMore   = true;
            var         oid       = "";
            int         index     = 1;

            while (hasMore)
            {
                var listApi = $"https://api.bilibili.com/x/v2/medialist/resource/list?type=5&oid={oid}&otype=2&biz_id={id}&bvid=&with_current=true&mobi_app=web&ps=20&direction=false&sort_field=1&tid=0&desc=true";
                json = await GetWebSourceAsync(listApi);

                using var listJson = JsonDocument.Parse(json);
                data    = listJson.RootElement.GetProperty("data");
                hasMore = data.GetProperty("has_more").GetBoolean();
                foreach (var m in data.GetProperty("media_list").EnumerateArray())
                {
                    var pageCount = m.GetProperty("page").GetInt32();
                    var desc      = m.GetProperty("intro").GetString();
                    var ownerName = m.GetProperty("upper").GetProperty("name").ToString();
                    var ownerMid  = m.GetProperty("upper").GetProperty("mid").ToString();
                    foreach (var page in m.GetProperty("pages").EnumerateArray())
                    {
                        Page p = new Page(index++,
                                          m.GetProperty("id").ToString(),
                                          page.GetProperty("id").ToString(),
                                          "",                                                                                                                                                             //epid
                                          pageCount == 1 ? m.GetProperty("title").ToString() : $"{m.GetProperty("title").ToString()}_P{page.GetProperty("page").ToString()}_{page.GetProperty("title")}", //单P使用外层标题 多P则拼接内层子标题
                                          page.GetProperty("duration").GetInt32(),
                                          page.GetProperty("dimension").GetProperty("width").ToString() + "x" + page.GetProperty("dimension").GetProperty("height").ToString(),
                                          m.GetProperty("cover").ToString(),
                                          desc,
                                          ownerName,
                                          ownerMid);
                        if (!pagesInfo.Contains(p))
                        {
                            pagesInfo.Add(p);
                        }
                        else
                        {
                            index--;
                        }
                    }
                    oid = m.GetProperty("id").ToString();
                }
            }

            var info = new VInfo();

            info.Title     = listTitle.Trim();
            info.Desc      = intro.Trim();
            info.Pic       = "";
            info.PubTime   = pubTime;
            info.PagesInfo = pagesInfo;
            info.IsBangumi = false;

            return(info);
        }
Ejemplo n.º 4
0
        public async Task <VInfo> FetchAsync(string id)
        {
            id = id.Substring(3);
            string index = "";
            string api   = $"https://api.bilibili.com/pgc/view/web/season?ep_id={id}";
            string json  = await GetWebSourceAsync(api);

            using var infoJson = JsonDocument.Parse(json);
            var         result    = infoJson.RootElement.GetProperty("result");
            string      cover     = result.GetProperty("cover").ToString();
            string      title     = result.GetProperty("title").ToString();
            string      desc      = result.GetProperty("evaluate").ToString();
            string      pubTime   = result.GetProperty("publish").GetProperty("pub_time").ToString();
            var         pages     = result.GetProperty("episodes").EnumerateArray().ToList();
            List <Page> pagesInfo = new List <Page>();
            int         i         = 1;

            //episodes为空; 或者未包含对应epid,番外/花絮什么的
            if (pages.Count == 0 || !result.GetProperty("episodes").ToString().Contains($"/ep{id}"))
            {
                JsonElement sections;
                if (result.TryGetProperty("section", out sections))
                {
                    foreach (var section in sections.EnumerateArray())
                    {
                        if (section.ToString().Contains($"/ep{id}"))
                        {
                            title += "[" + section.GetProperty("title").ToString() + "]";
                            pages  = section.GetProperty("episodes").EnumerateArray().ToList();
                            break;
                        }
                    }
                }
            }

            foreach (var page in pages)
            {
                //跳过预告
                JsonElement badge;
                if (page.TryGetProperty("badge", out badge) && badge.ToString() == "预告")
                {
                    continue;
                }
                string res = "";
                try
                {
                    res = page.GetProperty("dimension").GetProperty("width").ToString() + "x" + page.GetProperty("dimension").GetProperty("height").ToString();
                }
                catch (Exception) { }
                string _title = page.GetProperty("title").ToString() + " " + page.GetProperty("long_title").ToString();
                _title = _title.Trim();
                Page p = new Page(i++,
                                  page.GetProperty("aid").ToString(),
                                  page.GetProperty("cid").ToString(),
                                  page.GetProperty("id").ToString(),
                                  _title,
                                  0, res);
                if (p.epid == id)
                {
                    index = p.index.ToString();
                }
                pagesInfo.Add(p);
            }


            var info = new VInfo();

            info.Title     = title.Trim();
            info.Desc      = desc.Trim();
            info.Pic       = cover;
            info.PubTime   = pubTime;
            info.PagesInfo = pagesInfo;
            info.IsBangumi = true;
            info.IsCheese  = true;
            info.Index     = index;

            return(info);
        }
Ejemplo n.º 5
0
        public async Task <VInfo> FetchAsync(string id)
        {
            id = id.Substring(3);
            string index = "";
            //string api = $"https://api.global.bilibili.com/intl/gateway/ogv/m/view?ep_id={id}&s_locale=ja_JP";
            string api  = $"https://api.bilibili.tv/intl/gateway/v2/ogv/view/app/season?ep_id={id}&platform=android&s_locale=zh_SG&mobi_app=bstar_a" + (Config.TOKEN != "" ? $"&access_key={Config.TOKEN}" : "");
            string json = await GetWebSourceAsync(api);

            using var infoJson = JsonDocument.Parse(json);
            var    result   = infoJson.RootElement.GetProperty("result");
            string seasonId = result.GetProperty("season_id").ToString();
            string cover    = result.GetProperty("cover").ToString();
            string title    = result.GetProperty("title").ToString();
            string desc     = result.GetProperty("evaluate").ToString();


            if (cover == "")
            {
                string animeUrl = $"https://bangumi.bilibili.com/anime/{seasonId}";
                var    web      = await GetWebSourceAsync(animeUrl);

                if (web != "")
                {
                    Regex  regex = new Regex("window.__INITIAL_STATE__=([\\s\\S].*?);\\(function\\(\\)");
                    string _json = regex.Match(web).Groups[1].Value;
                    using var _tempJson = JsonDocument.Parse(_json);
                    cover = _tempJson.RootElement.GetProperty("mediaInfo").GetProperty("cover").ToString();
                    title = _tempJson.RootElement.GetProperty("mediaInfo").GetProperty("title").ToString();
                    desc  = _tempJson.RootElement.GetProperty("mediaInfo").GetProperty("evaluate").ToString();
                }
            }

            string pubTime = result.GetProperty("publish").GetProperty("pub_time").ToString();
            var    pages   = new List <JsonElement>();

            if (result.TryGetProperty("episodes", out _))
            {
                pages = result.GetProperty("episodes").EnumerateArray().ToList();
            }
            List <Page> pagesInfo = new List <Page>();
            int         i         = 1;

            JsonElement modules;

            if (result.TryGetProperty("modules", out modules))
            {
                foreach (var section in modules.EnumerateArray())
                {
                    if (section.ToString().Contains($"/{id}"))
                    {
                        pages = section.GetProperty("data").GetProperty("episodes").EnumerateArray().ToList();
                        break;
                    }
                }
            }

            /*if (pages.Count == 0)
             * {
             *  if (web != "")
             *  {
             *      string epApi = $"https://api.bilibili.com/pgc/web/season/section?season_id={seasonId}";
             *      var _web = GetWebSource(epApi);
             *      pages = JArray.Parse(JObject.Parse(_web)["result"]["main_section"]["episodes"].ToString());
             *  }
             *  else if (infoJson["data"]["modules"] != null)
             *  {
             *      foreach (JObject section in JArray.Parse(infoJson["data"]["modules"].ToString()))
             *      {
             *          if (section.ToString().Contains($"ep_id={id}"))
             *          {
             *              pages = JArray.Parse(section["data"]["episodes"].ToString());
             *              break;
             *          }
             *      }
             *  }
             * }*/

            foreach (var page in pages)
            {
                //跳过预告
                JsonElement badge;
                if (page.TryGetProperty("badge", out badge) && badge.ToString() == "预告")
                {
                    continue;
                }
                string res = "";
                try
                {
                    res = page.GetProperty("dimension").GetProperty("width").ToString() + "x" + page.GetProperty("dimension").GetProperty("height").ToString();
                }
                catch (Exception) { }
                string _title = page.GetProperty("title").ToString() + " " + page.GetProperty("long_title").ToString();
                _title = _title.Trim();
                Page p = new Page(i++,
                                  page.GetProperty("aid").ToString(),
                                  page.GetProperty("cid").ToString(),
                                  page.GetProperty("id").ToString(),
                                  _title,
                                  0, res);
                if (p.epid == id)
                {
                    index = p.index.ToString();
                }
                pagesInfo.Add(p);
            }


            var info = new VInfo();

            info.Title     = title.Trim();
            info.Desc      = desc.Trim();
            info.Pic       = cover;
            info.PubTime   = pubTime;
            info.PagesInfo = pagesInfo;
            info.IsBangumi = true;
            info.IsCheese  = true;
            info.Index     = index;

            return(info);
        }
Ejemplo n.º 6
0
        public async Task <VInfo> FetchAsync(string id)
        {
            id = id.Substring(6);
            var favId = id.Split(':')[0];
            var mid   = id.Split(':')[1];

            //查找默认收藏夹
            if (favId == "")
            {
                var favListApi = $"https://api.bilibili.com/x/v3/fav/folder/created/list-all?up_mid={mid}&jsonp=jsonp";
                favId = JsonDocument.Parse(await GetWebSourceAsync(favListApi)).RootElement.GetProperty("data").GetProperty("list").EnumerateArray().First().GetProperty("id").ToString();
            }

            int         pageSize  = 20;
            int         index     = 1;
            List <Page> pagesInfo = new List <Page>();

            var api  = $"https://api.bilibili.com/x/v3/fav/resource/list?media_id={favId}&pn=1&ps={pageSize}&keyword=&order=mtime&type=0&tid=0&platform=web&jsonp=jsonp";
            var json = await GetWebSourceAsync(api);

            using var infoJson = JsonDocument.Parse(json);
            var    data       = infoJson.RootElement.GetProperty("data");
            int    totalCount = data.GetProperty("info").GetProperty("media_count").GetInt32();
            int    totalPage  = (int)Math.Ceiling((double)totalCount / pageSize);
            var    title      = data.GetProperty("info").GetProperty("title").ToString();
            var    intro      = data.GetProperty("info").GetProperty("intro").GetString();
            string pubTime    = data.GetProperty("info").GetProperty("ctime").ToString();

            pubTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Convert.ToDouble(pubTime)).ToLocalTime().ToString();
            var userName = data.GetProperty("info").GetProperty("upper").GetProperty("name").ToString();
            var medias   = data.GetProperty("medias").EnumerateArray().ToList();

            for (int page = 2; page <= totalPage; page++)
            {
                api  = $"https://api.bilibili.com/x/v3/fav/resource/list?media_id={favId}&pn={page}&ps={pageSize}&keyword=&order=mtime&type=0&tid=0&platform=web&jsonp=jsonp";
                json = await GetWebSourceAsync(api);

                var jsonDoc = JsonDocument.Parse(json);
                data = jsonDoc.RootElement.GetProperty("data");
                medias.AddRange(data.GetProperty("medias").EnumerateArray().ToList());
            }

            foreach (var m in medias)
            {
                var pageCount = m.GetProperty("page").GetInt32();
                if (pageCount > 1)
                {
                    var tmpInfo = await new NormalInfoFetcher().FetchAsync(m.GetProperty("id").ToString());
                    foreach (var item in tmpInfo.PagesInfo)
                    {
                        Page p = new Page(index++, item);
                        p.title = m.GetProperty("title").ToString() + $"_P{item.index}_{item.title}";
                        p.cover = tmpInfo.Pic;
                        p.desc  = m.GetProperty("intro").ToString();
                        if (!pagesInfo.Contains(p))
                        {
                            pagesInfo.Add(p);
                        }
                    }
                }
                else
                {
                    Page p = new Page(index++,
                                      m.GetProperty("id").ToString(),
                                      m.GetProperty("ugc").GetProperty("first_cid").ToString(),
                                      "", //epid
                                      m.GetProperty("title").ToString(),
                                      m.GetProperty("duration").GetInt32(),
                                      "",
                                      m.GetProperty("cover").ToString(),
                                      m.GetProperty("intro").ToString(),
                                      m.GetProperty("upper").GetProperty("name").ToString(),
                                      m.GetProperty("upper").GetProperty("mid").ToString());
                    if (!pagesInfo.Contains(p))
                    {
                        pagesInfo.Add(p);
                    }
                }
            }

            var info = new VInfo();

            info.Title     = title.Trim();
            info.Desc      = intro.Trim();
            info.Pic       = "";
            info.PubTime   = pubTime;
            info.PagesInfo = pagesInfo;
            info.IsBangumi = false;

            return(info);
        }