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); }
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); }
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); }
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); }
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); }
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); }