Linker na Zákony pro lidi

Služba Linkeru umožňuje vytvořit odkazy na předpisy do vašeho HTML kódu. Pošlete kus svého html kódu a vrátí se vám prolinkovaný.

Umí

Proces prolinkování může být časově náročný, proto služba kromě přímého zpracování implementuje také zpracování ve frontě. Přímé zpracování jednoho html je časově limitované na 60s. Zpracování ve frontě s pozdějším vyzvednutím časově limitované není.

Odkazy

Výsledným odkazům je nastaven href s url na předpis a případnou kotvou na odstavec, class podle typu odkazu, title s kompletní citací, případně další vaše attributy.

např: § 3 odst. 2 písm. a) výsledek <a class="link-part" href="https://www.zakonyprolidi.cz/cs/2012-89#p3-2-a" title="§ 3 odst. 2 písm. a) zákona č. 89/2012 Sb." target="_blank">§ 3 odst. 2 písm. a)</a> zákona č. <a class="link-rule" href="https://www.zakonyprolidi.cz/cs/2012-89" title="zákon č. 89/2012 Sb." target="_blank">89/2012 Sb.</a>

Class

Typ odkazu lze rozlišit pomocí class.

Omezení na HTML

Používáme parser s pravidly HTML5.

Služba se snaží dodržet váš formát html. Zachová odsazení, pořadí attributů, poznámky, atd...

Ale převádí všechny html značky na malé písmena. např: <P CLASS="abc">Odstavec.</P> převede na <p class="abc">Odstavec.</p>

Provádí opravy rozpadlých a nevalidních zápisů. např: <p class=abc id='1' č. 40/1964 Sb. převede na <p class="abc" id="1">č. 40/1964 Sb.</p>

Neukončené značky ukončí. např: <input type="text"> převede na <input type="text"/>

V HTML je povolené neukončovat <p>, pokud následuje další <p>. např: <div><p>Odstavec 1<p>Odstavec 2</div> převede na <div><p>Odstavec 1</p><p>Odstavec 2</p></div>

Křížené formátování rozplete. např: <b>aaa<i>bbb</b>ccc</i> převede na <b>aaa<i>bbb</i></b><i>ccc</i>


JSON

https://linker.zakonyprolidi.cz/api/json/{method}

Request

Přijímá pouze POST. Content-Type: application/json; charset=UTF-8

POST /api/json/Hello HTTP/1.1
Host: linker.zakonyprolidi.cz
Content-Type: application/json; charset=UTF-8
Content-Length: 34
Accept: application/json

{"Message":"Ping"}

Response

Http Status

200 - OK. Content obsahuje návratový objekt dané funkce v JSON.

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/json; charset=utf-8
Content-Length: 98

{"Message":"Pong"}

500 - Error. Content obsahuje Error object v JSON. { "Message": "popis chyby" }

HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: application/json; charset=utf-8
Content-Length: 98

{"Message":"Timeout."}

LinkerService

interface ILinkerService

Metody

Všechny requesty jsou zděděné z třídy RequestMessage, která má jediný parametr ApiKey.

Metoda Hello

Něco jako ping/pong na test spojení. Nevyžaduje ApiKey.

Request

class HelloRequest

{
	"Message": string		// Cokoliv
}

Response

class HelloResponse

{
	"Message": string		// Náhodná hláška
}

Metoda Process

Okamžité zpracování.

Request

class ProcessRequest

{
	"ApiKey": string,
	"id": string,
	"EffectDate": date,
	"Attributes": string,
	"RemoveExisting": bool,
	"SourceHtml": string
}

Response

class ProcessResponse

{
	"id": string,
	"ResultHtml": string
}

Metoda Add

Přidání úlohy na zpracování. Pokud pošlete "id" a takové id už existuje, tak se stará úloha přepíše, ale vygeneruje se nové guid.

Request

class AddRequest

{
	"ApiKey": string,
	"id": string,
	"EffectDate": date,
	"Attributes": string,
	"RemoveExisting": bool,
	"SourceHtml": string,
	"ReturnUrl": string
}

Response

class AddResponse

{
	"id": string,
	"Guid": string
}

Metoda Get

Dotaz na stav konkrétní úlohy. Úloha se vyhledá nejdřív pomocí Guid, pokud není tak pomocí id. Vrací

class TaskObject.

Request

class GetRequest

{
	"ApiKey": string,
	"id": string,
	"Guid": string
}

Response

class TaskObject

{
	"id": string,
	"Guid": string,
	"State": string,
	"EffectDate": date,
	"Attributes": string,
	"RemoveExisting": bool,
	"SourceHtml": string,
	"ResultHtml": string,
}

Metoda List

Dotaz na seznam úloh. Je možné filtrovat na id hvězdičkovou konvencí, nebo na konkrétní TaskState. Vrací pole TaskObject.

Request

class ListRequest

{
	"ApiKey": string,
	"IdFilter": string,
	"StateFilter": string
}

Response

array of class TaskObject

[
	{
		"id": string,
		"Guid": string,
		"State": string,
		"EffectDate": date,
		"Attributes": string,
		"RemoveExisting": bool,
		"SourceHtml": string,
		"ResultHtml": string,
	},
	{
		// ...
	}
	// ...
]

Metoda Delete

Smazání konkrétní úlohy. Úloha se vyhledá nejdřív pomocí Guid, pokud není tak pomocí id.

Request

class DeleteRequest

{
	"ApiKey": string,
	"id": string,
	"Guid": string
}

Response

class DeleteResponse

{
	"id": string,
	"Guid": string,
	"State": string		// ='Deleted'
}

FORM

https://linker.zakonyprolidi.cz/api/form/process

Request

Přijímá pouze POST. Content-Type: application/x-www-form-urlencoded

POST /api/form/process HTTP/1.1
Host: linker.zakonyprolidi.cz
Content-Type: application/x-www-form-urlencoded
Content-Length: 106

SourceHtml=z%C3%A1kon+%C4%8D.+89%2F2012+Sb.&RemoveExisting=on&EffectDate=&Attributes=target%3D%22_blank%22

Response

Http Status

200 - OK. Content obsahuje přímo výsledné HTML.

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 150

zákon č. <a class="link-rule" href="https://www.zakonyprolidi.cz/cs/2012-89" title="zákon č. 89/2012 Sb." target="_blank">89/2012 Sb.</a>

500 - Error. Content obsahuje text chyby.

HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/plane; charset=utf-8
Content-Length: 13

Chybný ApiKey

Popis parametrů

"id": string

Váš identifikátor úlohy, nebo null. Ascii max 250 znaků. Pokud je uveden, vrátí se v odpovědi, nebo poslouží v dotazu Get.

"Guid": string

Náš identifikátor úlohy. Ascii max 250 znaků. Vygeneruje se voláním metody Add.

"State": string

Stav úlohy. viz enum TaskState

  • "Waiting" - Čeká na zpracování po zavolánání Add.
  • "Processing" - Právě probíhá zpracování.
  • "Finished" - Zpracováno, hotovo. Výsledek je v ResultHtml.
  • "Returned" - Jeli uvedeno ReturnUrl a podařilo se vrátit výsledek na vaši službu.
  • "Deleted" - Úloha smazána. Vrací se jako potvrzení po zavolání Delete.
  • "Error" - Došlo k nějaké chybě. Popis chyby je v Message.

"Attributes": string

Vaše vlastní attributy tagu <a>, nebo null. Vhodné třeba pro označení clastním class, nebo nastavení target atd... Linker nastavuje attributy class, href, title.

"Attributes": "class=\"auto\" target=\"_blank\""

<a class="auto link-rule" href="https://www.zakonyprolidi.cz/cs/2012-89" title="zákon č. 89/2012 Sb." target="_blank">89/2012 Sb.</a>

"RemoveExisting": bool

true - (Default.) Nejdříve odstraní existující odkazy na zakonyprolidi.cz a až poté proběhne prohledání textu. Může to vést k opravě chybných ručních odkazů. Může to vylepšit do-tagování okolí. Ale může to také odstranit něco co pak nedokážeme rozpoznat, např textové zkratky.

false - Ponechá existující odkazy.

"EffectDate": date

Datum účinnosti, nebo null. Vpodstatě datum vydání vašeho článku. K tomuto datu se budou vyhledávat odkazy na odstavce.

"SourceHtml": string

Váš fragment HTML. Nemusí obsahovat celý dokument s <html> a <body>, stačí jen kousek, např obsah <article>.

"ReturnUrl": string

Návratové URL vaší služby, nebo null. Pokud je uveden, po zpracování se vám to pokusím zavolat POST s JSON výsledkem.


Model

Než psát složitou dokumentaci objektového modelu, tak se rovnou podívejte na zdrojové kódy.


Demo

Skuste testovací online formulář.

Připravili jsme také hotový demo projekt v C#. Implementuje klienta služby a demonstruje volání metod.

Projekt Zakony.Linker.Demo.NET.zip - .NET Framework 4.7

Projekt Zakony.Linker.Demo.Core.zip - .NET Core 3.1