Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
discount week 30 halloween
Avatar
Milan Turyna
Redaktor
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
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
Redaktor
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
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět
24.12.2019 21:13
Avatar
Milan Turyna
Redaktor
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
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.