public override async Task <VideoUrlParseResult> ParseByUrlAsync(string url, bool getTitle) { var id = GetIdByUrl(url); if (string.IsNullOrEmpty(id)) { return(VideoUrlParseResult.CreateError(url, VideoUrlParseResultType.NoMatcher, "No matcher")); } if (!getTitle) { return(VideoUrlParseResult.CreateOk(url, PVService.Bilibili, id, VideoTitleParseResult.Empty)); } var paramStr = string.Format("appkey={0}&id={1}&type=xml{2}", AppConfig.BilibiliAppKey, id, AppConfig.BilibiliSecretKey); var paramStrMd5 = CryptoHelper.HashString(paramStr, CryptoHelper.MD5).ToLowerInvariant(); var requestUrl = string.Format("https://api.bilibili.com/view?appkey={0}&id={1}&type=xml&sign={2}", AppConfig.BilibiliAppKey, id, paramStrMd5); XDocument doc; try { doc = await HtmlRequestHelper.GetStreamAsync(requestUrl, stream => XDocument.Load(stream), timeoutSec : 10, userAgent : "VocaDB/1.0 ([email protected])"); } catch (WebException x) { log.Warn(x, "Unable to load Bilibili URL {0}", url); return(VideoUrlParseResult.CreateError(url, VideoUrlParseResultType.LoadError, new VideoParseException(string.Format("Unable to load Bilibili URL: {0}", x.Message), x))); } catch (XmlException x) { log.Warn(x, "Unable to load Bilibili URL {0}", url); return(VideoUrlParseResult.CreateError(url, VideoUrlParseResultType.LoadError, new VideoParseException(string.Format("Unable to load Bilibili URL: {0}", x.Message), x))); } catch (IOException x) { log.Warn(x, "Unable to load Bilibili URL {0}", url); return(VideoUrlParseResult.CreateError(url, VideoUrlParseResultType.LoadError, new VideoParseException(string.Format("Unable to load Bilibili URL: {0}", x.Message), x))); } var titleElem = doc.XPathSelectElement("/info/title"); var thumbElem = doc.XPathSelectElement("/info/pic"); var authorElem = doc.XPathSelectElement("/info/author"); var authorId = GetValue(doc, "/info/mid"); var createdElem = doc.XPathSelectElement("/info/created_at"); int.TryParse(GetValue(doc, "/info/cid"), out var cid); // Unsure what this is, but it's required for embedding if (titleElem == null) { return(VideoUrlParseResult.CreateError(url, VideoUrlParseResultType.LoadError, "No title element")); } var title = HtmlEntity.DeEntitize(titleElem.Value); var thumb = thumbElem?.Value ?? string.Empty; var author = authorElem?.Value ?? string.Empty; var created = createdElem != null ? (DateTime?)DateTime.Parse(createdElem.Value) : null; var length = await GetLength(id); var metadata = new PVExtendedMetadata(new BiliMetadata { Cid = cid }); return(VideoUrlParseResult.CreateOk(url, PVService.Bilibili, id, VideoTitleParseResult.CreateSuccess(title, author, authorId, thumb, length: length, uploadDate: created, extendedMetadata: metadata))); }
private void SaveArtistPhoto(Artist artist, ArtistPage artistPage) { for (int i = 0; i < artistPage.ArtistPhotos.Count; i++) { Image img = Image.FromStream(HtmlRequestHelper.GetStream(artistPage.ArtistPhotos[i], artistPage.ArtistPhotos[i])); img.Save(@"D:\Project\MvcRockShop\Artist\" + artist.Id + "_" + i + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); img.Dispose(); } }
private void SaveCover(List <AlbumPage> albumPages, List <Album> albums) { for (int i = 0; i < albumPages.Count; i++) { if (!String.IsNullOrEmpty(albumPages[i].CoverImg)) { Image img = Image.FromStream(HtmlRequestHelper.GetStream(albumPages[i].CoverImg, albumPages[i].CoverImg)); img.Save(@"D:\Project\MvcRockShop\Album\" + albums[i].Id + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); img.Dispose(); } } }
public AlbumImportResult[] ImportNew() { HtmlDocument albumIndex; try { albumIndex = HtmlRequestHelper.Download(albumIndexUrl); } catch (WebException x) { log.WarnException("Unable to read albums index", x); throw; } return(Import(albumIndex)); }
private MikuDbAlbumContract GetAlbumData(string url) { HtmlDocument doc; try { doc = HtmlRequestHelper.Download(url); } catch (WebException x) { log.WarnException("Unable to download album post '" + url + "'", x); throw; } return(GetAlbumData(doc, url)); }
public AlbumImportResult ImportOne(string url) { HtmlDocument doc; try { doc = HtmlRequestHelper.Download(url, "en-US"); } catch (WebException x) { log.Warn("Unable to download album post '" + url + "'", x); throw; } var data = GetAlbumData(doc, url); return(new AlbumImportResult { AlbumContract = data }); }
public Task <VideoTitleParseResult> GetTitleAsync(string id) { var url = string.Format("https://creofuga.net/audios/{0}", id); return(HtmlRequestHelper.GetStreamAsync(url, stream => ParseByHtmlStream(stream, Encoding.UTF8, url))); }