IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Anti-spam pro API (ČNB)

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Milan Turyna
Tvůrce
Avatar
Milan Turyna:24.12.2019 15:14

Dobrý den, dělám webovou aplikaci která je převážně Javascriptová s minimálním užití PHP. PHP tam je protože to když jsem se snažil zavolat XHR na danou URL (je to online api reagujicí na GET požadavek v XML) tak to něco jako "CROS" blokovalo kvůli tomu že to API podle nich neposílalo určité hlavičky jaké by mělo.

No, ale k problému, jedná se o kurzový lístek České národní banky která po několika desítkách requestů (nevím počet) blokuje IP adresu (pravděpodobně jen na nějakou dobu), takže bych potřeboval nějak udělat cachování toho XML ale nevím jak to udělat protože se určuje i date parametr, takže by cache musel reagovat i na parametry a v případě že by pro daný parametr neexistoval soubor tak by se musel vytvořit ale s tím se přichází k dalšímu problému protože kdyby tam někdo například pomocí nějakého bota házel random datumy (je to od roku 1991) tak by to zablokoval tak i tak, proto bych potřeboval nějak vyřešit i antispam který by ty boty filtroval.

Nějak se to dá udělat určitě protože jsou stránky které tohle api využívají a jsou známé, takže bez nějakého řešení by to byl blok za blokem ale já nemám žádný nápad jak by to fungovalo, hlavně co se týče toho antispamu, ten caching by šlo udělat na principu že se zkontroluje či ten get parametr je vyplněný, má všechny požadavky (jestli je to datum atd.) a potom by se předal příslušný obsah.

Zkusil jsem: Aby vše běželo na JS a kdyby někdo chtěl něco blokovat tak by blokoval maximálně sebe, ale to kvůli té hlavičce nejde.

Editováno 24.12.2019 15:14
Odpovědět
24.12.2019 15:14
Řeš pouze to, co dokážeš ovlivnit.
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24.12.2019 15:55

Moc nechapu dotaz.
CNB nabizi urcite kurz. listek jako csv. To jsem kdysi pouzil. Zavolal jsem kurz-listek.,php. To si zkontrolovalo daum ulozeneno souboru. A kdyz byl moc stary, stahlo novy. Kdyz byl akorat, jen vratil data. Stahoval jsem to 3x za den.
Zkratka si to ulozis k sobe a kontrolujes na souboru datum.
php.net/file_get_con­tents
php.net/file_put_con­tents
php.net/filemtime
php.net/file_exists

 
Nahoru Odpovědět
24.12.2019 15:55
Avatar
Milan Turyna
Tvůrce
Avatar
Milan Turyna:24.12.2019 16:00

Ano, máš pravdu, ale potom nabízí XMLko kde máš i get parameter na datum, takže se můžeš koukat "do historie" kurzu. Jako já mohu udělat že se nebude moct zvolit datum a půjde to jen na ten daný den a dám tam classic cache, ale zajímalo by mě i řešení s tím aby se ten datum dal určovat, ale aby tam byl ten antispam který zabrání random házení datumu pro to aby server byl zablokován.

například: https://www.cnb.cz/…nni_kurz.xml?…

https://www.cnb.cz/…nni_kurz.xml?…

Editováno 24.12.2019 16:01
Nahoru Odpovědět
24.12.2019 16:00
Řeš pouze to, co dokážeš ovlivnit.
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24.12.2019 21:13

Jak chces omezit datum, konkretne? Nebo jako chces moznosti?

https://www.php.net/…time.sub.php

<?php
$date = new DateTime('2000-01-20');
$date->sub(new DateInterval('P10D')); // odecti interval 10 dni
echo $date->format('Y-m-d') . "\n";
//$today = new DateTime();
?>

Uzivatel zada 2014-2-13

B = new DateTime('2000-01-20'); // prevedes to na timestamp
A = new DateTime();
if (A - 10 dni < B && B < A + 10 dni) {zobraz tvuj soubor, pokud existuje, pokud neexistuje, stahni (ale nastav pro nej kesovani)}

Jmeno souboru formatovane treba po 8h, to by mohlo byt nejak takto:

$B = $B->format('Y-m-d-H');
list($y, $m, $d, $h) = explode('-', $B);
$h = floor($h/8) * 8;
$suffix = "$y-$m-$d-$h-00-00";
Editováno 24.12.2019 21:14
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
24.12.2019 21:13
Avatar
Milan Turyna
Tvůrce
Avatar
Milan Turyna:25.12.2019 8:03

Udělám to tak, že dnešek si budu cachovat třeba po tich 8 hodinach a minule datumy treba po dni protoze uz se menit nebudou. Dekuji za pomoc

Editováno 25.12.2019 8:03
Nahoru Odpovědět
25.12.2019 8:03
Řeš pouze to, co dokážeš ovlivnit.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.