public static async Task <ExtnBookData> GetBookDataFromOpenLibrary(ExtnBookData raw) { var extnSrc = ForOpenLibrary(); raw.OpenLibrary = await extnSrc.GetData(raw.Isbn); return(raw); }
public static async Task <ExtnBookData> GetBookDataFromIsbnDb(ExtnBookData raw) { var extnSrc = ForIsbnDb(); raw.IsbnDb = await extnSrc.GetData(raw.Isbn); return(raw); }
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); }
/// <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); } }
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); }
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); }
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); } }