SourcePage API dokumentace

Zdroj: sourcepage/api/README.md

API endpoint: resolve.php

Endpoint slouží pro dohledání skenu stránky podle tištěného čísla stránky napříč podporovanými zdroji.

Podporované typy vstupů

NázevURLZdrojový identifikátorURN / OAIWikidata Property
Archive.orghttps://archive.org/details/gothaischerhofka00unse/page/n126/mode/2upgothaischerhofka00unseP724
Digitale Sammlungen (BSB)https://www.digitale-sammlungen.de/de/view/bsb10917624?page=5bsb10917624urn:nbn:de:bvb:12-bsb10917624-5
Wienbibliothek Digitalhttps://digital.wienbibliothek.at/wbrobv/periodical/titleinfo/350012urn:nbn:at:AT-WBR-6550 / oai:www.digital.wienbibliothek.at:350012
Sammlungen UB Frankfurthttps://sammlungen.ub.uni-frankfurt.de/freimann/content/titleinfo/6487687urn:nbn:de:hebis:30:1-148042P11981
SBC (dLibra / PDF pipeline)https://www.sbc.org.pl/dlibra/publication/814470oai:www.sbc.org.pl:814470
ÖNB ANNOhttps://anno.onb.ac.at/cgi-content/anno?aid=ztb&datum=18980922&seite=2&zoom=100ztb18980922 (interní IIIF manifest ID)P9258 + request pole date
ÖNB Viewerhttps://viewer.onb.ac.at/1321D635/1321D635
Kramerius (registry instance / NDK)https://ndk.cz/uuid/uuid:45ce7d90-7518-11e8-b9d4-005056827e5245ce7d90-7518-11e8-b9d4-005056827e52P13032

Poznámka: API podporuje také vstup Wikidata QID (Q12345) nebo URL položky (https://www.wikidata.org/wiki/Q12345). Resolver postupně zkouší dostupné vlastnosti dle priority chainu.

Poznámka k ANNO přes Wikidata: samotné P9258 nestačí pro konkrétní číslo periodika; pokud chce klient přes Wikidata resolver použít ANNO, musí v requestu dodat pole date ve formátu YYYYMMDD nebo YYYY-MM-DD, ze kterého se složí issue URL anno.onb.ac.at.

Prosté číslo bez prefixu: Prosté číslo bez specifikace zdroje se neakceptuje samostatně (brání nejasnostem mezi Frankfurt, Wienbibliothek a dalšími); je třeba zadat URL, URN, OAI identifikátor nebo Wikidata QID.

OAI identifikátory: OAI identifikátory jsou podporovány pro:

Omezení URN:

URL a metoda

Poznámka: GET s query parametry nebo s body není podporován a vrací 405.

Request body

PolePovinnéPopis
inputanoURL, URN, Wikidata QID nebo identifikátor (např. gothaischerhofka00unse, bsb10917624).
pageanoTištěné číslo stránky (např. 24, III, 5a).
dateneDatum čísla periodika pro případy, kdy je vstup Wikidata QID/URL s P9258; akceptuje YYYYMMDD nebo YYYY-MM-DD.

Příklad requestu:

{
  "input": "Q18029632",
  "page": "24",
  "date": "1898-09-22"
}

Úspěšná odpověď

HTTP status: 200

{
  "ok": true,
  "status": 200,
  "input": "Q18029632",
  "date": "18980922",
  "results": [
    {
      "source_type": "anno.onb.ac.at",
      "resolved_input": "https://anno.onb.ac.at/cgi-content/anno?aid=wsb&datum=18980922",
      "resolver_chain": ["wikidata", "P9258"],
      "identifier": "wsb:18980922",
      "page_number": "24",
      "leaf_num": null,
      "iiif_image_url": "https://iiif.onb.ac.at/images/ANNO/wsb18980922/.../full/full/0/default.jpg",
      "iiif_canvas_url": "https://iiif.onb.ac.at/presentation/ANNO/wsb18980922/canvas/...",
      "iiif_canvas_id": "https://iiif.onb.ac.at/presentation/ANNO/wsb18980922/canvas/...",
      "viewer_url": "https://anno.onb.ac.at/cgi-content/anno?aid=wsb&datum=18980922&seite=24&zoom=100",
      "manifest_url": "https://iiif.onb.ac.at/presentation/ANNO/wsb18980922/manifest",
      "page_numbers_url": null,
      "source_title": "...",
      "source_date": "...",
      "source_external_identifier": "..."
    }
  ]
}

Význam hlavních polí

PolePopis
inputPůvodní vstup z requestu.
resultsPole výsledků; každý prvek popisuje jeden konkrétní nalezený výsledek.

Pole v results[]:

PolePopis
source_typeTyp zdroje (archive.org, digitale-sammlungen.de, kramerius, ...).
resolved_inputInterně rozřešený vstup pro daný výsledek (např. URL po překladu URN).
resolver_chainJak byl vstup zpracován pro daný výsledek (url, urn, wikidata, ...).
identifierNormalizovaný identifikátor dokumentu/stránky.
page_numberVyhodnocené číslo stránky, které bylo nalezeno.
leaf_numLeaf číslo stránky (typicky jen pro archive.org).
iiif_image_urlPřímá URL obrázku stránky.
iiif_canvas_urlURL canvasu v IIIF.
viewer_urlURL pro otevření stránky ve vieweru zdroje.
document_urlOdkaz na dokument ve zdrojovém vieweru (pro PDF zdroje explicitně vracen).
image_download_urlOdkaz na extrahovaný obrázek stránky uložený v lokální cache.

PDF zdroje (SBC)

Pro doménu sbc.org.pl endpoint používá režim PDF pipeline:

1. Stáhne PDF dokument a uloží jej na 14 dní.

2. Extrahuje OCR textovou vrstvu a sestaví trvalý JSON page index.

3. Rozdělí PDF na obrázky po stránkách a ukládá je na 14 dní.

4. Vrátí document_url (SBC dokument) a image_download_url (lokální extrahovaný obrázek).

Poznámka: první request nad novým PDF dokumentem může běžet déle. Frontend proto zobrazuje průběžné stavové hlášky.

Poznámka: mapování page -> PDF stránka je best-effort podle OCR, ale pro číselné stránky se nad OCR kandidáty dopočítává nejpravděpodobnější spojitá řada. Při nenalezení přesného mapování je zdroj vrácen jako partial.

ÖNB IIIF

Detailní dokumentace k ÖNB IIIF je v samostatném souboru:

Chybová odpověď

{
  "ok": false,
  "error": "Tištěná stránka nebyla v dokumentu nalezena.",
  "error_code": "printed_page_not_found",
  "status": 404
}

Pole chybové odpovědi

PolePopis
okVždy false.
errorTextový popis chyby.
error_codeStrojově čitelný kód chyby.
statusHTTP status kód odpovědi (stejná hodnota jako ve status line).

Běžné error_code

error_codeHTTPPopis
method_not_allowed405Nepodporovaná metoda, nebo GET s parametry/body.
missing_required_params400Chybí input nebo page v JSON body.
sourcepage_api_unavailable502/5xxFastAPI backend není dostupný přes PHP proxy.
invalid_sourcepage_response502Backend vrátil neplatný JSON.
printed_page_not_found404Stránka nebyla v dokumentu nalezena.
unsupported_source422Zdroj/doména zatím není podporovaná.
upstream_not_found404Upstream zdroj neexistuje nebo je nedostupný.

HTTP status kódy

HTTP statusMetodaPopis
200GETVrací dokumentaci API (jen bez parametrů a bez body).
200POSTÚspěšné dohledání stránky (ok: true).
204OPTIONSOdpověď na preflight požadavek.
400POSTChybí povinná pole v JSON body.
404POSTStránka nebo upstream zdroj nebyl nalezen.
405*Nepodporovaná metoda nebo GET s parametry.
422POSTValidace/proces selhal pro nepodporovaný zdroj.
502POSTChyba komunikace s backendem/upstreamem.

Příklady volání

curl -sS -X POST 'https://tools.daelba.eu/sourcepage/api/resolve' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -d '{"input":"https://archive.org/details/gothaischerhofka00unse/page/n126/mode/2up","page":"24"}'
curl -sS -X POST 'https://tools.daelba.eu/sourcepage/api/resolve' \
  -H 'Content-Type: application/json' \
  -d '{"input":"urn:nbn:de:bvb:12-bsb10917624-5","page":"3"}'
curl -sS -X POST 'https://tools.daelba.eu/sourcepage/api/resolve' \
  -H 'Content-Type: application/json' \
  -d '{"input":"Q65682037","page":"3"}'