Autor Zpráva
honky tonk
Profil *
Dá se zpřes http stáhnout soubor v omezené velikosti od nějakého bajtu? Například od bajtu 16000 do 180000?
Antik4
Profil
filesize
juriad
Profil
Hlavičky Range a Content-Range. Server to však může ignorovat a poslat ti vše. Přečti si odpovídající RFC.
honky tonk
Profil *
Antik4:
Nespletl ses náhoudou? Nejde mi o to zjistit velikost souboru, ale začít stahování od nějakého bajtu (přeskočit nepotřebný úsek).
Antik4
Profil
honky tonk:
Nespletl ses náhoudou?
Ano spletl, protože mi vrtalo hlavou, proč by jsi chtěl stahovat od nějakých bajtů ? Ovšem, pokud by to byl jenom txt soubor, tak to bych použil file_get_contents .
honky tonk
Profil *
Antik4:
využití: například když bych chtěl zjistit o uživatelovi, jaká je jeho skutečná lokace pomocí této stránky: http://www.iplocation.net/index.php tak budu chtít poslat jenom tu tabulku. Ale přiznám se, že nevím jak to udělat abych odeslal požadavek a simuloval tak odeslání formuláře s vyplněnou IP. Bez vyplnění IP to nemá smysl.
juriad
Profil
Antik4:
Seeking (offset) is not supported with remote files.
http://www.php.net/file_get_contents

honky tonk:
V tomto případě tvůj požadavek na rozsah server dost pravděpodobně bude ignorovat. Stejně tu stránku musí sestavit celou, aby zjistil, co má přeskočit. Čas a data se tím neušetří u takto kraťounké stránky. Rozsahy jsou vhodné při stahování multimédií (x megabytů a více).


Pozor na to, že vytěžování cizí databáze je trestný čin.
honky tonk
Profil *
juriad:
vytěžování cizí databáze je trestný čin.
Můžeš to blíže upřesnit? Co to znamená? Že se tam nesmím připojit z jiného serveru? Nebo že musím nějak omezit počet požadavků?


nápad byl, že při registraci bych zjistil uživatelovu skutečnou lokaci. Registrace neprobíhá tak často...
juriad
Profil
Použij nějakou službu, která je k tomu určená. Jsou i takové, které vrací jen xml nebo json určený ke strojovému zpracování.
Například: http://ipinfodb.com/ip_location_api.php
honky tonk
Profil *
juriad:
Jo taky jsem na to zrovna narazil, jenže když se podíváš do registrace tak oni chtějí IP serveru. A jak já mohu vědět přes jaké IP bude poskytovatel odesílat požadavky? Taky to může změnit a v tu chvíly api key přestane platit ...


myslím poskytovatele hostingu


Něco jsem našel tady: http://stackoverflow.com/questions/409999/getting-the-location-from-an-ip-address
druhá odpověď zezhora. Neukazuje ale správně kraj a neobsahuje město.


Vlastně jediná stránka, která dokázala přesně určit moji polohu byla ta na kterou jsem odkázal. A ty teda tvrdíš, že je to trestný čin, když to občas použiju k tomu abych se dozvěděl o uživateli odkud je? Třeba jednou za hodinu? Nebo si to myslel tak, že když bych to otevíral příliš často například každé dvě minuty?
Antik4
Profil
juriad:
Seeking (offset) is not supported with remote files.
Že chce tahat data z jiného serveru jsem zjistil poté co jsem napsal tu funkci.

honky tonk:
$ip = 'your ip';

$tags = get_meta_tags('http://www.geobytes.com/IpLocator.htm?GetLocation&template=php3.txt&IpAddress=' . $ip);
print_r($tags); 
honky tonk
Profil *
Antik4:
Tohle je supr, ale problém je v tom, že to nedává správný údaj. Město vrací jen hlavní město Praha.

juriad:
Už jsem pochopil jak si to myslel s tou Vytěžitelností. Našel jsem si článek
http://www.pravoit.cz/article/pravni-uprava-databazi-ii
kde v části "Omezení zvláštního práva pořizovatele databáze"

Kde se píše:
Je zapovězeno ovšem vytěžovat (kopírovat) a zužitkovávat kvalitativně či kvantitativně databázi nebo její části způsobem, který není běžný a přiměřený, to znamená nikoli systematicky a opakovaně.

Pak je tam podmínka že nesmím způsobovat újmu vlastníkovi/pořizovateli databáze.

Zejména starost by mi mohla dělat část: (není dovoleno) d) kopírovat části databáze systematicky a opakovaně;

Myslíš tedy, že když bych tu databázi použil pouze během registrace uživatele, abych zjistil jeho pravou lokaci, ale přitom bych tuto informaci nezveřejnil* Informace zůstane skrytá pro moje účely nebo pro poměřování geografické vzdálenosti mezi uživateli), že by to bylo nepřiměřené využívání/kopírování databáze?
Antik4
Profil
Zkus toto

function getCityByIP($ip) {
    $info = file_get_contents('http://www.netip.de/search?query=' . $ip);
    
    preg_match('#City: ([\w\s]+)#i', $info, $matches);
    
    return $matches[1];
}

$ip = 'your ip';

echo getCityByIP($ip);
honky tonk
Profil *
Antik4:
Tak to je nejlepší :-) měřil jsem časy.

0.083688974380493 - stáhnutí z netip.de
0.08387279510498 - z netip.de after preg_match
1.0176179409027 // stáhnutí z iplocation.net/index.php
0.8581759929657 // stáhnutí z iplocation.net/index.php na omezenou délku

Takže netip.de se nic nevyrovná.


Díky


Antik4:
A nevíš ještě jestli existuje nějaká služba která zjistí vzdálenost mezi dvěma městy (tedy vlastně mezi dvěma IP?
Antik4
Profil
Služba přesněji ne. Ale dá se využit script od pana Vrány, google map a malou funkci pro zobrazení letecké vzdálenosti.

<?php
/** Vzdálenost dvou zeměpisných bodů
* @param float zeměpisná šířka prvního bodu ve stupních
* @param float zeměpisná délka prvního bodu ve stupních
* @param float zeměpisná šířka druhého bodu ve stupních
* @param float zeměpisná délka druhého bodu ve stupních
* @return float nejmenší vzdálenost bodů v kilometrech
* @copyright Jakub Vrána, http://php.vrana.cz/
*/
function gps_distance($lat1, $lng1, $lat2, $lng2) {
    static $great_circle_radius = 6372.795;
    return acos(
        cos(deg2rad($lat1))*cos(deg2rad($lng1))*cos(deg2rad($lat2))*cos(deg2rad($lng2))
        + cos(deg2rad($lat1))*sin(deg2rad($lng1))*cos(deg2rad($lat2))*sin(deg2rad($lng2))
        + sin(deg2rad($lat1))*sin(deg2rad($lat2))
    ) * $great_circle_radius;
}

function getLocation($town) {
    $url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' . $town . '&sensor=false';
    
    $content = file_get_contents($url);
    
    $decode = json_decode($content);
    
    $array = (array)$decode->results[0]->geometry->location;
    
    return $array;
}

$firstTown = getLocation('Ostrava');
$secondTown = getLocation('Praha');

echo gps_distance($firstTown['lat'], $firstTown['lng'], $secondTown['lat'], $secondTown['lng']);
honky tonk
Profil *
Antik4:
To je úžasný. Díky moc. Něco takového jsem měl namysli. Je dobře, že to nemusím psát. Ten skript je omezen jen na Českou republiku? Myslím že při tomhle výpočtu je nějaké omezení v úsečkách, které procházejí zeměpísnou délkou 0 nebo zeměpisnou šířkou 0 (v místech kde jsou ty hranice).
Antik4
Profil
honky tonk:
Omezení není žádné, ale zapomněl jsem úplně na mezery, které google nebere, zde máš upravený kód.

<?php
/** Vzdálenost dvou zeměpisných bodů
* @param float zeměpisná šířka prvního bodu ve stupních
* @param float zeměpisná délka prvního bodu ve stupních
* @param float zeměpisná šířka druhého bodu ve stupních
* @param float zeměpisná délka druhého bodu ve stupních
* @return float nejmenší vzdálenost bodů v kilometrech
* @copyright Jakub Vrána, http://php.vrana.cz/
*/
function gps_distance($lat1, $lng1, $lat2, $lng2) {
    static $great_circle_radius = 6372.795;
    return acos(
        cos(deg2rad($lat1))*cos(deg2rad($lng1))*cos(deg2rad($lat2))*cos(deg2rad($lng2))
        + cos(deg2rad($lat1))*sin(deg2rad($lng1))*cos(deg2rad($lat2))*sin(deg2rad($lng2))
        + sin(deg2rad($lat1))*sin(deg2rad($lat2))
    ) * $great_circle_radius;
}

function getLocation($town) {
    $town = urlencode($town);
    
    $url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' . $town . '&sensor=false';
    
    $content = file_get_contents($url);
    
    $decode = json_decode($content);
    
    $array = (array)$decode->results[0]->geometry->location;
    
    return $array;
}

$firstTown = getLocation('Ostrava');
$secondTown = getLocation('Praha');

echo gps_distance($firstTown['lat'], $firstTown['lng'], $secondTown['lat'], $secondTown['lng']);
honky tonk
Profil *
Ta rychlost s jakou to Google vybaví je neskutečná:
6.9856643676758E-5
neboli
0.00006.9856643676758 s
juriad
Profil
Antik4:
Když už, tak použij urlencode.
honky tonk
Profil *
Antik4:
a zvládlo by to diakritiku nebo názvy měst musí být bez háčků a čárek? A jak se řeší situace, kdy máš dvě stejné města třeba Frýdlant a jiné města. Protože vím, že takových míst v ČR je plno, hlavně spousta malých vesnic v Čechách, tam se ty názvy furt opakují. Ale to by možná Google ani nenašel.
juriad
Profil
honky tonk:
Stačí to místo 20. řádku prohnat skrz urlencode. Pak bude fungovat i diakritika.

Tak si o tom API něco přečti. https://developers.google.com/maps/documentation/geocoding/
Hádám, že Google prostě použije první výsledek vyhledávání, jako kdyby dotaz napsal člověk v Google Mapách.
Antik4
Profil
honky tonk:
Vrátí ti to pole s danými městy. Ale ve scriptu beru první hodnotu z pole.

viz. třeba na slovo Třebová

Příklad
honky tonk
Profil *
Takže to v podstatě dělá hledání. Když zadám "frydlant, frýdek místek" tak by měl vyjet Frýdlent nad Ostravicí. Když zadám "frýdlant, čechy" tak to najde frýdlant v čechách.
honky tonk
Profil *
Ještě jsem uvažoval jak by se to dalo realizovat, pokud bych měl stránku, kde uživatelé mohou dohledat lidi ze svého okolí. Napadlo mě toto: vyhledané souřadnice měst ukládat do databáze. Potom při samotném hledání hledat nikoliv okruh, ale čtverec, například je li uživatel na (x,y) 42.05 25.16 a dá okolí 10, tak hledaný rozsah bude 32.05-52.05 a 15.16-35.16 ... toto rozdělit na dvě části. Uživatelé, kteří jsou někde ve středu na 20% délky strany čtverce tedy v rozmezí 40.05-44.05 a 23.16-27.16 není třeba blíže určovat vzdálenost, protože dotyčný automaticky spadá přibližně do té vzdálenosti 10 (prostě si představte dva pruhy ve tvaru + procházející místem lokace. Ty místa které nejsou pokryty tím křížem je třeba dohledat tou funkcí, aby vrátila vzdálenost a pak se tato vzdálenost vyhodnotila jako větší nebo menší. Tedy pokud menší nebo rovno, pak přidat uživatele do skupiny výsledků. Je však otázka jestli by takové hledání nezatěžovalo server googlu příliš, i když ten čas vybavení zdá se být rychlý.
aDAm
Profil
Vymýšlíš kolo....stačí jednoduchými vzorci počítat rádius ze souřadnic.
honky tonk
Profil *
aDAm:
No a nebude to příliš vytěžovat server?


myslím zatěžovat
honky tonk
Profil *
Potřeboval bych poradit jak rozjet stahování pomocí cookies, tzn. stránka vyžaduje vyplnit nějaké předvolby, abych mohl aplikovat filtr. Když bych stáhl stránku bez těch předvoleb nebo bez cookies tak se neprovede filtrace. Tady je co jsem zkoušel podle článku p. Vrány:

http://paste.ofcode.org/JwSvGFPyhPESkUHD9VLedf

Ale nevypisuje mi to vůbec nic. Ani se nic nestáhlo. Co je špatně?
aDAm
Profil
jako co by mělo vytěžovat? Matematická operace výpočtu?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: