Projekt

Obecné

Profil

Požadavek #179

otevřený

nkBookImport: anotace z více zdrojů, cenotvorba z trhu, fronta ke zveřejnění a umístění ve skladu

Přidáno uživatelem Šimon Formánek před asi 2 hodin(y).

Stav:
Nový
Priorita:
Normální
Přiřazeno:
Začátek:
2026-11-13
Uzavřít do:
% Hotovo:

0%

Odhadovaná doba:
Strávený čas:

Popis

h2. Proč tiket vzniká

Práce na aplikaci @nkBookImport@ (fotí knihu a zakládá z ní bazarový inzerát) se dosud zapisovala na #169, protože tam začala jako vedlejší nález při opravě loginu. Věcně tam ale nepatří: #169 je o chybějícím klíči slepého indexu a o zaostalé dev databázi. Tenhle tiket je pro samotnou aplikaci a serverovou stranu, která k ní patří.

Dvojí fakturace se nekoná. Na #169 je zapsáno 12,5 h, z toho 4 h za 12. 11. a 6 h za 13. 11. do 19:29, a ten druhý záznam pokrývá cenu z trhu, frontu se zveřejněním, dopočítání anotace a umístění ve skladu. Sem jde jen to, co po něm následovalo.

h2. Co je hotové a nasazené

Repozitáře: server @/home/f/git/noveknihy@ (větev @functionalHTML@, 6 commitů @4454131e@..@1f3e0634@), aplikace @/home/f/git/nkBookImport@ (commit @3a130027@, 28 souborů, 4 179 řádků). Obojí pushnuto na @git.vitexsoftware.com@; repozitář @PureHTML/nkBookImport@ vznikl kvůli tomuhle.

h3. Anotace z víc zdrojů než jen z Wikipedie

Encyklopedie nese to, co je slavné, takže u antikvariátního kusu často mlčí. Přibyly tři prameny:

  • @Noveknihy\BookCatalog\OpenLibraryText@ -- popis díla z Open Library. Dva požadavky na knihu (ISBN dá vydání, vydání jmenuje dílo, dílo nese popis), proto cache. Změřeno 13. 11.: „Pride and Prejudice" 689 znaků, „Romány tří mágů" záznam má, dvě jiná česká ISBN vrací 404. Pomáhá tedy u cizojazyčných knih a o českých mlčí.
  • @WikidataWork::articleOf()@ -- dohledá jméno hesla na Wikipedii. Limit hledání zvednut z 5 na 10, protože správná entita byla šestá.
  • @Noveknihy\BookCatalog\PublisherSite@ -- web nakladatele, což je nejlepší zdroj, jaký existuje: text na stránce nakladatele je napsaný k tomuhle konkrétnímu vydání. Nakladatel se bere z tiráže, URL z @manufacturers_info.manufacturers_url@ (1 281 z 1 637 nakladatelů ji má), stránka knihy se hledá v sitemapě.

Každý ověřený zdroj se sám zapíše do @crawler_source@, takže noční @bin/crawl@ ho dál sklízí bez zasahování ruky. Nový zdroj je ale záměrně neaktivní, dokud ho člověk nezapne -- tak to @bin/crawl@ dokumentuje a znamená to, že špatný odhad nezačne sám lézt po cizím webu.

h3. Opravy, které si vyžádalo testování

  • @PublisherSite@ vybíral článek na blogu místo stránky knihy; @rank()@ teď dává přednost URL, v jehož cestě je název.
  • @patternFor()@ kotvil vzor znakem @^@, ale vzory se porovnávají proti celým URL, takže objevování našlo 0 stránek.
  • @SitemapReader@ vrací páry @{url, lastmod}@, ne řetězce -- TypeError.
  • Cache se zapisovala pod jméno @openlibrary@, kde už své výsledky drží našeptávač. Rozděleno na @openlibrary_text@.
  • @Annotation::detailedPrompt()@ neměl v @@param@ položku @source@; oprava srazila phpstan ze 157 na 147 chyb.

h3. Noční crawl

@bin/bazar/crawl-nightly.sh@ projde aktivní nakladatele příkazem @discover@ a pak @harvest --all@. V cronu na stroji @mi@.

h2. Stav kontrol

Měřeno na zacommitovaném kódu, stroj @mi@, uživatel @Šimon Formánek@:

  • @php vendor/bin/phpunit@ -- 862 testů, 2 230 asercí, 0 failures (vstupní stav sezení 814 testů)
  • @php vendor/bin/phpstan analyse@ -- 147 chyb, vstupní stav 156, tedy o 9 lépe
  • @php vendor/bin/phpcs@ -- 118 chyb, vstupní stav 120

h2. Co zbývá

  • @argo.cz@ nemá sitemapu, takže stránky knih na něm @PublisherSite@ nenajde. Potřebuje jinou cestu, nebo se tenhle nakladatel vynechá.
  • @redmine-mcp-server@ 2.9.0 má rozbitý zápis (@AuthError@ v @redminelib@, přitom přímý @curl@ POST vrací 201). Stojí za nahlášení autorovi.
  • Dávkový režim „vyklízení police" a zpevnění offline fronty v aplikaci -- z původního plánu neuděláno.
  • Rozhodnout, jestli @HTTP_SERVER@ na dev instanci vrátit z IP @192.168.2.57@ zpátky na hostname po testech z telefonu.

Také k dispozici: Atom PDF