Пример #1
0
        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)));
        }
Пример #2
0
 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();
     }
 }
Пример #3
0
 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();
         }
     }
 }
Пример #4
0
        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));
        }
Пример #5
0
        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));
        }
Пример #6
0
        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
            });
        }
Пример #7
0
        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)));
        }