LC.AudiobookShops.Parser
0.3.0
dotnet add package LC.AudiobookShops.Parser --version 0.3.0
NuGet\Install-Package LC.AudiobookShops.Parser -Version 0.3.0
<PackageReference Include="LC.AudiobookShops.Parser" Version="0.3.0" />
<PackageVersion Include="LC.AudiobookShops.Parser" Version="0.3.0" />
<PackageReference Include="LC.AudiobookShops.Parser" />
paket add LC.AudiobookShops.Parser --version 0.3.0
#r "nuget: LC.AudiobookShops.Parser, 0.3.0"
#:package LC.AudiobookShops.Parser@0.3.0
#addin nuget:?package=LC.AudiobookShops.Parser&version=0.3.0
#tool nuget:?package=LC.AudiobookShops.Parser&version=0.3.0
LC.AudiobookShops.Parser
Biblioteka .NET (netstandard2.0) do parsowania stron produktowych audiobooków z wielu polskich sklepów (audioteka.pl, publio.pl, ebookpoint.pl, empik.com — i kolejnych, w miarę jak będą dodawane) jednym, wspólnym API. Nie wykonuje żadnych zapytań HTTP — przyjmuje gotowy kod HTML strony i zwraca ustrukturyzowane dane.
Instalacja
dotnet add package LC.AudiobookShops.Parser
Użycie
using LC.AudiobookShops.Parser;
var html = await httpClient.GetStringAsync("https://audioteka.com/pl/audiobook/czerwona-ziemia/");
var parser = new AudiobookShopParser();
var audiobook = parser.Parse(html, AudiobookShop.Audioteka);
Console.WriteLine(audiobook.Title); // "Czerwona ziemia"
Console.WriteLine(audiobook.Authors[0]); // "Marcin Meller"
Console.WriteLine(audiobook.Narrators[0]); // "Wojciech Mecwaldowski"
Console.WriteLine(audiobook.CoverImageUrl); // "https://atkcdn.audioteka.com/cc/9a/czerwona-ziemia/32.jpg"
Ten sam AudiobookShopParser obsługuje wszystkie sklepy — zmienia się tylko
drugi argument Parse:
parser.Parse(publioHtml, AudiobookShop.Publio);
parser.Parse(ebookpointHtml, AudiobookShop.Ebookpoint);
Zwracane dane (AudiobookInfo)
| Właściwość | Typ | Opis |
|---|---|---|
Title |
string? |
Tytuł audiobooka |
Authors |
IReadOnlyList<string> |
Autorzy książki |
Narrators |
IReadOnlyList<string> |
Narratorzy/lektorzy (jeśli są) |
Description |
string? |
Pełny opis |
CoverImageUrl |
string? |
URL okładki |
Publisher |
string? |
Wydawca (dla Publio zawsze null — strona nie udostępnia tego pola) |
Obsługiwane sklepy (AudiobookShop)
Audioteka, Publio, Ebookpoint, Empik. Każdy sklep czyta dane ze
strukturalnego źródła osadzonego w stronie produktu — schema.org JSON-LD dla
Audioteki/Publio/Ebookpointu, a window.__APOLLO_STATE__ (cache klienta
GraphQL Apollo) dla empik.com — z DOM-owym fallbackiem tam, gdzie dany sklep
nie udostępnia danego pola strukturalnie (np. pełny opis na audioteka.pl,
narrator na ebookpoint.pl). Na empik.com lektor jest widoczny na stronie, ale
doczytywany osobnym zapytaniem GraphQL (POST /gateway/api/graphql/products)
już po załadowaniu strony — nie ma go w samym HTML-u, więc Narrators dla
Empika zawsze wychodzi puste z tej biblioteki; konsument, który go potrzebuje,
musi dociągnąć ten endpoint samodzielnie.
Jeśli strona nie zawiera oczekiwanych danych (np. struktura sklepu się
zmieniła), Parse rzuca AudiobookShopParseException z właściwością Shop
wskazującą, którego sklepu dotyczył błąd.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- HtmlAgilityPack (>= 1.11.71)
- System.Text.Json (>= 8.0.5)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.