コード例 #1
0
        private async Task <IEnumerable <string> > FindPagesInChapter(string chapterUrl, CancellationToken cancellationToken)
        {
            var input = await downloader.GetStringAsync(chapterUrl, cancellationToken);

            // <div...id="thumbnail-container"><div class="thumb-container"><a...href="/g/93922/1/">
            var links = selector.SelectMany(input, "//div[@id='thumbnail-container']//div[contains(@class, 'thumb-container')]//a")
                        .Select(n => SiteUrl + n.Attributes["href"]);

            return(links.ToArray());
        }
コード例 #2
0
        public async Task <string> RefreshTokenAsync(string authToken, IWebProxy proxy)
        {
            string baseUrl = _configurationValues.ApiBaseUrl;
            string url     = baseUrl + Endpoints.RefreshToken;

            string json = await _httpDownloader.GetStringAsync(url,
                                                               new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase)
            {
                { "Content-Type", "application/json" },
                { "Authorization", $"Bearer {authToken}" }
            },
                                                               proxy);

            return(json);
        }
コード例 #3
0
        public async Task <IEnumerable <Chapter> > GetChapters(string manga, IProgress <string> progress,
                                                               CancellationToken cancellationToken)
        {
            string input = await downloader.GetStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//h1").InnerText;
            var chaps = selector
                        .SelectMany(input, "//td/a")
                        .Select(n =>
            {
                string url = $"https://readms.net{n.Attributes["href"]}";
                return(new Chapter($"{title} {n.InnerText}", url));
            });

            return(chaps);
        }
コード例 #4
0
        public async Task <IEnumerable <Chapter> > GetChapters(string manga, IProgress <string> progress, CancellationToken cancellationToken)
        {
            string input = await downloader.GetStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//h2[@class='aname']").InnerText;
            var chaps = selector
                        .SelectMany(input, "//table[@id='listing']//a")
                        .Select(n =>
            {
                string url    = n.Attributes["href"];
                var resultUrl = new Uri(new Uri(manga), url).AbsoluteUri;
                return(new Chapter(n.InnerText, resultUrl));
            });

            chaps = chaps.Reverse().GroupBy(x => x.Url).Select(g => g.First()).ToList();
            return(chaps);
        }
コード例 #5
0
ファイル: MangaHereTests.cs プロジェクト: zuhair28/blackj
        public async void FindImages()
        {
            var images = await service.GetImages("https://www.mangahere.cc/manga/deathtopia/c001/1.html", new Progress <string>(), source.Token);

            Assert.Equal(60, images.Count());
            Assert.StartsWith("https://l.mangatown.com/store/manga/14771/001.0/compressed/uimg001.jpg", images.ToArray()[0]);
            Assert.StartsWith("https://l.mangatown.com/store/manga/14771/001.0/compressed/uimg002.jpg", images.ToArray()[1]);
            Assert.StartsWith("https://l.mangatown.com/store/manga/14771/001.0/compressed/uimg059.jpg", images.ToArray()[58]);
            string imageString = await downloader.GetStringAsync(images.ToArray()[0], source.Token);

            Assert.NotNull(imageString);
        }
コード例 #6
0
ファイル: ReadOPM.cs プロジェクト: zuhair28/blackj
        public async Task <IEnumerable <Chapter> > GetChapters(string manga, IProgress <string> progress,
                                                               CancellationToken cancellationToken)
        {
            string input = await downloader.GetStringAsync(manga, cancellationToken);

            var chaps = selector
                        .SelectMany(input, "//ul[contains(@class, 'chapters-list')]/li/a")
                        .Select(n =>
            {
                string url = n.Attributes["href"];
                return(new Chapter(null, url));
            }).ToList();

            var chap_numbers = selector
                               .SelectMany(input, "//ul[contains(@class, 'chapters-list')]/li/a/span[contains(@class, 'chapter__no')]")
                               .Select(n => n.InnerText)
                               .ToList();

            chaps.ForEach(c => c.Name = "One Punch Man " + chap_numbers[chaps.IndexOf(c)]);
            return(chaps);
        }
コード例 #7
0
        public async Task <string> GetSeriesSearchResultsAsync(SeriesSearchParams searchParams, string authToken, IWebProxy proxy)
        {
            string baseUrl = _configurationValues.ApiBaseUrl;
            string url     = baseUrl + Endpoints.SeriesSearch;

            Dictionary <string, string> queryParams = new Dictionary <string, string>
            {
                { "type", "series" },
            };

            if (!string.IsNullOrWhiteSpace(searchParams?.Name))
            {
                queryParams.Add("query", searchParams.Name);
            }
            // TODO: Search by IMDB ID
            //if (!string.IsNullOrWhiteSpace(searchParams?.ImdbId))
            //    queryParams.Add("imdbId", searchParams.ImdbId);

            string queryString = "?";

            foreach (var param in queryParams)
            {
                if (queryString.Length > 1)
                {
                    queryString += "&";
                }
                queryString += $"{WebUtility.UrlEncode(param.Key)}={WebUtility.UrlEncode(param.Value)}";
            }
            url += queryString;

            string json = await _httpDownloader.GetStringAsync(url,
                                                               new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase)
            {
                { "Authorization", $"Bearer {authToken}" }
            },
                                                               proxy);

            return(json);
        }
コード例 #8
0
        public async void FindImages()
        {
            var images = await service.GetImages("https://fanfox.net/manga/tian_jiang_xian_shu_nan/c001/1.html", new Progress <string>(), source.Token);

            Assert.Equal(16, images.Count());
            Assert.StartsWith("https://s.fanfox.net/store/manga/19803/001.0/compressed/q001.jpg", images.ToArray()[0]);
            Assert.StartsWith("https://s.fanfox.net/store/manga/19803/001.0/compressed/q002.jpg", images.ToArray()[1]);
            Assert.StartsWith("https://s.fanfox.net/store/manga/19803/001.0/compressed/q003.jpg", images.ToArray()[2]);

            string imageString = await downloader.GetStringAsync(images.ToArray()[0], source.Token);

            Assert.NotNull(imageString);
        }
コード例 #9
0
        public async Task FindImages()
        {
            var images = await service.GetImages("https://www.mangareader.net/naruto/1", new Progress <string>(), source.Token);

            Assert.Equal(53, images.Count());
            Assert.Equal("https://i10.mangareader.net/naruto/1/naruto-1564773.jpg", images.ToArray()[0]);
            Assert.Equal("https://i4.mangareader.net/naruto/1/naruto-1564774.jpg", images.ToArray()[1]);
            Assert.Equal("https://i1.mangareader.net/naruto/1/naruto-1564825.jpg", images.ToArray()[52]);

            string imageString = await downloader.GetStringAsync(images.ToArray()[0], source.Token);

            Assert.NotNull(imageString);
        }
コード例 #10
0
        //public async Task<string> GetAuthTokenAsync(IWebProxy proxy)
        //{
        //    string baseUrl = _configurationValues.ApiBaseUrl;
        //    string apiKey = _configurationValues.ApiKey;

        //    string url = baseUrl + Endpoints.NewAuthenticationToken;
        //    Dictionary<string, string> queryParams = new Dictionary<string, string>
        //    {
        //        {"api_key", apiKey},
        //    };

        //    string queryString = "?";
        //    foreach (var param in queryParams)
        //    {
        //        if (queryString.Length > 1) queryString += "&";
        //        queryString += $"{WebUtility.UrlEncode(param.Key)}={WebUtility.UrlEncode(param.Value)}";
        //    }
        //    url += queryString;
        //    string json = await _httpDownloader.GetStringAsync(url,
        //        new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
        //        {
        //            {"Content-Type", "application/json"}
        //        },
        //        proxy);
        //    return json;
        //}

        public async Task <string> FindByExternalId(MovieSearchParams searchParams, IWebProxy proxy)
        {
            string baseUrl = _configurationValues.ApiBaseUrl;
            string apiKey  = _configurationValues.ApiKey;

            string url = baseUrl;
            Dictionary <string, string> queryParams = new Dictionary <string, string>
            {
                { "api_key", apiKey },
            };

            if (!string.IsNullOrWhiteSpace(searchParams.ImdbId))
            {
                url = baseUrl + string.Format(Endpoints.FindByExternalId, searchParams.ImdbId);
                queryParams.Add("external_source", "imdb_id");
            }

            string queryString = "?";

            foreach (var param in queryParams)
            {
                if (queryString.Length > 1)
                {
                    queryString += "&";
                }
                queryString += $"{WebUtility.UrlEncode(param.Key)}={WebUtility.UrlEncode(param.Value)}";
            }
            url += queryString;
            string json = await _httpDownloader.GetStringAsync(url,
                                                               new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase)
            {
                { "Content-Type", "application/json" }
            },
                                                               proxy);

            return(json);
        }
コード例 #11
0
        private async Task <IEnumerable <Chapter> > GetChaptersImpl(string manga, CancellationToken cancellationToken)
        {
            string input = await downloader.GetStringAsync(manga, cancellationToken);

            var title = selector.Select(input, "//span[@class='detail-info-right-title-font']").InnerText;
            var hrefs = selector.SelectMany(input, "//ul[@class='detail-main-list']/li/a").Select(a => a.Attributes["href"]).ToList();
            var texts = selector.SelectMany(input, "//ul[@class='detail-main-list']/li/a/div/p[@class='title3']").Select(p => p.InnerText).ToList();

            var chaps = new List <Chapter>();

            for (int i = 0; i < hrefs.Count(); i++)
            {
                var chap = new Chapter($"{title} {texts[i]}", hrefs[i]);
                chaps.Add(chap);
            }

            return(chaps);
        }
コード例 #12
0
 public Task <string> GetStringAsync(string url, CancellationToken token)
 {
     logger.Info($"> DownloadStringAsync: {url}");
     return(downloader.GetStringAsync(url, token));
 }