Пример #1
0
        public static async Task <ExtnBookData> GetBookDataFromOpenLibrary(ExtnBookData raw)
        {
            var extnSrc = ForOpenLibrary();

            raw.OpenLibrary = await extnSrc.GetData(raw.Isbn);

            return(raw);
        }
Пример #2
0
        public static async Task <ExtnBookData> GetBookDataFromIsbnDb(ExtnBookData raw)
        {
            var extnSrc = ForIsbnDb();

            raw.IsbnDb = await extnSrc.GetData(raw.Isbn);

            return(raw);
        }
Пример #3
0
        public static async Task <ExtnBookData> GetBookDataFromBookFinder(string isbn)
        {
            var retval = new ExtnBookData {
                Isbn = isbn, ImportedOn = DateTime.UtcNow
            };
            var extnSrc = ForBookFinder();

            retval.BookFinder = await extnSrc.GetData(isbn);

            return(retval);
        }
Пример #4
0
        /// <inheritdoc />
        public async Task <ObjectId> StoreRawData(ExtnBookData data)
        {
            if (data.Id == ObjectId.Empty)
            {
                await _rawColl.InsertOneAsync(data);

                return(data.Id);
            }
            else
            {
                await _rawColl.FindOneAndReplaceAsync(x => x.Id == data.Id, data);

                return(data.Id);
            }
        }
Пример #5
0
        private async Task <ExtnBookData> LoadBook(DirectoryInfo bookDir)
        {
            var raw = new ExtnBookData {
                Isbn = bookDir.Name, ImportedOn = DateTime.UtcNow
            };
            var opt = new EnumerationOptions {
                IgnoreInaccessible       = true,
                MatchCasing              = MatchCasing.CaseInsensitive,
                MatchType                = MatchType.Simple,
                RecurseSubdirectories    = false,
                ReturnSpecialDirectories = false
            };

            foreach (var dataFile in bookDir.EnumerateFiles("*.raw", opt))
            {
                using var dataStr = dataFile.OpenText();
                var htmlRaw = await dataStr.ReadToEndAsync();

                switch (dataFile.Name.ToLowerInvariant())
                {
                case "bookfinder.raw":
                    raw.BookFinder = new SiteData {
                        RawHtml = htmlRaw
                    };
                    break;

                case "isbndb.raw":
                    raw.IsbnDb = new SiteData {
                        RawHtml = htmlRaw
                    };
                    break;

                case "openlibrary.raw":
                    raw.OpenLibrary = new SiteData {
                        RawHtml = htmlRaw
                    };
                    break;
                }
            }

            DataScraperFactory.ReparseBookData(raw);
            await _repo.StoreRawData(raw);

            return(raw);
        }
Пример #6
0
        public static async Task <Book> CreateBook(ExtnBookData raw)
        {
            var pubOnRaw = raw.OpenLibrary?.DatePublished ?? raw.BookFinder?.DatePublished ?? raw.IsbnDb?.DatePublished;
            var pubOn    = DateTime.TryParse(pubOnRaw, out var dt) ? dt : (DateTime?)null;

            List <byte>?cover    = null;
            var         coverUrl = raw.OpenLibrary?.CoverImageUrl ?? raw.BookFinder?.CoverImageUrl ?? raw.IsbnDb?.CoverImageUrl;

            if (coverUrl != null)
            {
                using var http = new HttpClient();
                var msg = await http.GetAsync(coverUrl);

                if (msg.IsSuccessStatusCode)
                {
                    var img = await msg.Content.ReadAsByteArrayAsync();

                    if (img.Length > 0)
                    {
                        cover = new List <byte>(img);
                    }
                }
            }

            var retval = new Book {
                Isbn           = raw.Isbn,
                CreatedOn      = DateTime.UtcNow,
                Title          = raw.OpenLibrary?.Title ?? raw.BookFinder?.Title ?? raw.IsbnDb?.Title ?? "Unknown",
                Author         = raw.OpenLibrary?.Author ?? raw.BookFinder?.Author ?? raw.IsbnDb?.Author,
                Publisher      = raw.OpenLibrary?.Publisher ?? raw.BookFinder?.Publisher ?? raw.IsbnDb?.Publisher,
                Description    = raw.BookFinder?.Description ?? raw.OpenLibrary?.Description ?? raw.IsbnDb?.Description,
                PublishedOnRaw = pubOnRaw,
                NumPages       = raw.OpenLibrary?.NumPages ?? raw.BookFinder?.NumPages ?? raw.IsbnDb?.NumPages,
                PublishedOn    = pubOn,
                Cover          = cover
            };

            return(retval);
        }
Пример #7
0
        public static void ReparseBookData(ExtnBookData raw)
        {
            IDataScraper scraper;

            if (raw.BookFinder?.RawHtml != null)
            {
                scraper        = ForBookFinder();
                raw.BookFinder = scraper.Reparse(raw.BookFinder.RawHtml);
            }

            if (raw.IsbnDb?.RawHtml != null)
            {
                scraper    = ForIsbnDb();
                raw.IsbnDb = scraper.Reparse(raw.IsbnDb.RawHtml);
            }

            if (raw.OpenLibrary?.RawHtml != null)
            {
                scraper         = ForOpenLibrary();
                raw.OpenLibrary = scraper.Reparse(raw.OpenLibrary.RawHtml);
            }
        }