Autor | Zpráva | ||
---|---|---|---|
honky tonk Profil * |
#1 · Zasláno: 18. 12. 2013, 14:43:20
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 |
#2 · Zasláno: 18. 12. 2013, 14:46:12
|
||
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 * |
#4 · Zasláno: 18. 12. 2013, 14:50:04
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 |
#5 · Zasláno: 18. 12. 2013, 14:59:00
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 * |
#6 · Zasláno: 18. 12. 2013, 15:08:53
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 |
#7 · Zasláno: 18. 12. 2013, 15:15:55
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 * |
#8 · Zasláno: 18. 12. 2013, 15:17:59 · Upravil/a: honky tonk
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 * |
#10 · Zasláno: 18. 12. 2013, 15:32:30 · Upravil/a: honky tonk
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 |
#11 · Zasláno: 18. 12. 2013, 17:14:05
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 * |
#12 · Zasláno: 18. 12. 2013, 17:46:39
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 |
#13 · Zasláno: 18. 12. 2013, 18:12:26
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 * |
#14 · Zasláno: 18. 12. 2013, 19:09:39 · Upravil/a: honky tonk
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 * |
#16 · Zasláno: 18. 12. 2013, 19:53:07
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 * |
#18 · Zasláno: 18. 12. 2013, 20:02:51
Ta rychlost s jakou to Google vybaví je neskutečná:
6.9856643676758E-5 neboli 0.00006.9856643676758 s |
||
juriad Profil |
#19 · Zasláno: 18. 12. 2013, 20:03:18
Antik4:
Když už, tak použij urlencode. |
||
honky tonk Profil * |
#20 · Zasláno: 18. 12. 2013, 20:07:02
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 |
#21 · Zasláno: 18. 12. 2013, 20:11:06
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 |
#22 · Zasláno: 18. 12. 2013, 20:24:34
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 * |
#23 · Zasláno: 18. 12. 2013, 21:12:43
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 * |
#24 · Zasláno: 19. 12. 2013, 10:42:21
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 |
#25 · Zasláno: 19. 12. 2013, 10:54:50
Vymýšlíš kolo....stačí jednoduchými vzorci počítat rádius ze souřadnic.
|
||
honky tonk Profil * |
#26 · Zasláno: 19. 12. 2013, 11:07:01 · Upravil/a: honky tonk
aDAm:
No a nebude to příliš vytěžovat server? myslím zatěžovat |
||
honky tonk Profil * |
#27 · Zasláno: 19. 12. 2013, 12:44:44
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 |
#28 · Zasláno: 19. 12. 2013, 13:07:28
jako co by mělo vytěžovat? Matematická operace výpočtu?
|
||
Časová prodleva: 10 let
|
0