add maps
This commit is contained in:
commit
4d4f794fd0
11 changed files with 571 additions and 0 deletions
197
php/library.php
Executable file
197
php/library.php
Executable file
|
|
@ -0,0 +1,197 @@
|
|||
<?php
|
||||
|
||||
|
||||
|
||||
function movie2locations($id) {
|
||||
|
||||
$file = 'data/locations.data';
|
||||
if (file_exists($file)) {
|
||||
while (file_exists('data/locations.lock'))
|
||||
usleep(100000);
|
||||
$locations = unserialize(file_get_contents($file));
|
||||
}
|
||||
|
||||
if (!$locations[$id]) {
|
||||
|
||||
$point = array();
|
||||
|
||||
$html = file_get_contents('http://imdb.com/title/tt' . $id . '/locations');
|
||||
|
||||
$string = explode('&&locations=', $html);
|
||||
for ($i = 1; $i < count($string); $i++) {
|
||||
$key = count($point);
|
||||
$substring = explode('&&', $string[$i]);
|
||||
$point[$key]['location'] = urldecode($substring[0]);
|
||||
if (strstr($point[$key]['location'], ' - '))
|
||||
$point[$key]['location'] = substr($point[$key]['location'], strpos($point[$key]['location'], ' - ') + 3);
|
||||
$point[$key]['level'] = 0;
|
||||
$substring = explode('<dd>', $string[$i]);
|
||||
$substring = explode('</dd>', $substring[1]);
|
||||
$point[$key]['description'] = trim(strip_tags($substring[0]));
|
||||
}
|
||||
|
||||
foreach ($point as $key => $value) {
|
||||
$point[$key]['coordinates'] = location2coordinates($point[$key]['location']);
|
||||
while ($point[$key]['coordinates']['latitude'] == 0 && $point[$key]['coordinates']['longitude'] == 0 && strstr($value['location'], ', ')) {
|
||||
$point[$key]['level']++;
|
||||
$value['location'] = substr($value['location'], strpos($value['location'], ', ') + 2);
|
||||
$point[$key]['coordinates'] = location2coordinates($value['location']);
|
||||
}
|
||||
/*
|
||||
if ($point[$key]['coordinates']['latitude'] != 0 || $point[$key]['coordinates']['longitude'] != 0) {
|
||||
$point_ = $point;
|
||||
foreach ($point_ as $key_ => $value_) {
|
||||
if ($key != $key_ && $point[$key]['latitude'] == $point_[$key_]['latitude'] && $point[$key]['longitude'] == $point_[$key_]['longitude']) {
|
||||
$md5 = md5($point[$key]['location']);
|
||||
$offset[$key]['latitude'] = (hexdec(substr($md5, 0, 1)) - 8) * 0.00001;
|
||||
$offset[$key]['longitude'] = (hexdec(substr($md5, 1, 1)) - 8) * 0.00001;
|
||||
$md5 = md5($point[$key_]['location']);
|
||||
$offset[$key_]['latitude'] = (hexdec(substr($md5, 0, 1)) - 8) * 0.00001;
|
||||
$offset[$key_]['longitude'] = (hexdec(substr($md5, 1, 1)) - 8) * 0.00001;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
foreach ($point as $key => $value) {
|
||||
if ($offset[$key]['latitude'])
|
||||
$point[$key]['coordinates']['latitude'] += $offset[$key]['latitude'];
|
||||
if ($offset[$key]['longitude'])
|
||||
$point[$key]['coordinates']['longitude'] += $offset[$key]['longitude'];
|
||||
}
|
||||
*/
|
||||
|
||||
$locations[$id] = $point;
|
||||
|
||||
// $locations_ = unserialize(file_get_contents($file));
|
||||
// $locations_[$id] = $locations[$id];
|
||||
// $locations = $locations_;
|
||||
ksort($locations);
|
||||
touch('data/locations.lock');
|
||||
file_put_contents($file, serialize($locations));
|
||||
unlink('data/locations.lock');
|
||||
|
||||
}
|
||||
|
||||
return $locations[$id];
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function location2coordinates($location) {
|
||||
|
||||
/*
|
||||
translates a location name to coordinates (latitude/longitude)
|
||||
*/
|
||||
|
||||
$file = 'data/coordinates.data';
|
||||
if (file_exists($file)) {
|
||||
while (file_exists('data/coordinates.lock'))
|
||||
usleep(100000);
|
||||
$coordinates = unserialize(file_get_contents($file));
|
||||
}
|
||||
|
||||
if (!$coordinates[$location]) {
|
||||
|
||||
$query = urlencode($location);
|
||||
|
||||
$f = fsockopen('maps.google.com', 80, $err_num, $err_str, 60);
|
||||
$string = 'GET /maps?q=' . $query . " HTTP/1.1\r\n";
|
||||
$string .= "Accept: */*\r\n";
|
||||
$string .= "Accept-Language: en\r\n";
|
||||
$string .= "User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418 (KHTML, like Gecko) Safari/417.9.3\r\n";
|
||||
$string .= "Connection: close\r\n";
|
||||
$string .= "Host: maps.google.com\r\n";
|
||||
$string .= "\r\n";
|
||||
fwrite($f, $string);
|
||||
$data = stream_get_contents($f);
|
||||
fclose($f);
|
||||
$code = substr($data, 9, 3);
|
||||
if ($code == 200)
|
||||
$html = substr($data, strpos($data, "\r\n\r\n") + 4);
|
||||
else
|
||||
$data = $code;
|
||||
|
||||
$substr = substr($html, strpos($html, '{center:{lat:') + 13);
|
||||
$coordinates[$location]['latitude'] = substr($substr, 0, strpos($substr, ',lng:'));
|
||||
$substr = substr($substr, strpos($substr, ',lng:') + 5);
|
||||
$coordinates[$location]['longitude'] = substr($substr, 0, strpos($substr, '}'));
|
||||
$substr = substr($html, strpos($html, ',span:{lat:') + 11);
|
||||
$coordinates[$location]['spanLatitude'] = substr($substr, 0, strpos($substr, ',lng:'));
|
||||
$substr = substr($substr, strpos($substr, ',lng:') + 5);
|
||||
$coordinates[$location]['spanLongitude'] = substr($substr, 0, strpos($substr, '}'));
|
||||
|
||||
if ($location != 'USA' && $coordinates[$location]['latitude'] == 37.0625 && $coordinates[$location]['longitude'] == -95.677068) {
|
||||
$coordinates[$location]['latitude'] = 0;
|
||||
$coordinates[$location]['longitude'] = 0;
|
||||
$coordinates[$location]['spanLatitude'] = 0;
|
||||
$coordinates[$location]['spanLongitude'] = 0;
|
||||
}
|
||||
|
||||
// /*
|
||||
if (strstr($coordinates[$location]['latitude'] . $coordinates[$location]['longitude'] . $coordinates[$location]['spanLatitude'] . $coordinates[$location]['spanLongitude'], ' ')) {
|
||||
$coordinates[$location]['latitude'] = 0;
|
||||
$coordinates[$location]['longitude'] = 0;
|
||||
$coordinates[$location]['spanLatitude'] = 0;
|
||||
$coordinates[$location]['spanLongitude'] = 0;
|
||||
}
|
||||
// */
|
||||
|
||||
/*
|
||||
foreach ($coordinates as $key => $value) {
|
||||
echo $key;
|
||||
if (strstr($value['latitude'] . $value['longitude'] . $value['spanLatitude'] . $value['spanLongitude'], ' ')) {
|
||||
die($key);
|
||||
unset($coordinates[$key]);
|
||||
}
|
||||
}
|
||||
*/
|
||||
ksort($coordinates);
|
||||
while (file_exists('data/coordinates.lock'))
|
||||
usleep(100000);
|
||||
touch('data/coordinates.lock');
|
||||
file_put_contents($file, serialize($coordinates));
|
||||
if (filesize($file) > 100000)
|
||||
copy($file, 'data/coordinates.backup.data');
|
||||
unlink('data/coordinates.lock');
|
||||
|
||||
}
|
||||
|
||||
return $coordinates[$location];
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function coordinates2string($latitude, $longitude) {
|
||||
|
||||
/*
|
||||
translates coordinates (latitude/longitude) to string (DD°MM'SS"X)
|
||||
*/
|
||||
|
||||
$latitudeDegrees = floor(abs($latitude));
|
||||
$latitudeDecimals = abs($latitude) - $latitudeDegrees;
|
||||
$latitudeMinutes = str_pad(floor($latitudeDecimals * 60), 2, '0', STR_PAD_LEFT);
|
||||
$latitudeSeconds = str_pad(round(($latitudeDecimals - $latitudeMinutes / 60) * 3600), 2, '0', STR_PAD_LEFT);
|
||||
$latitudeHemisphere = str_repeat('N', $latitude >= 0) . str_repeat('S', $latitude < 0);
|
||||
|
||||
$longitudeDegrees = floor(abs($longitude));
|
||||
$longitudeDecimals = abs($longitude) - $longitudeDegrees;
|
||||
$longitudeMinutes = str_pad(floor((abs($longitude) - $longitudeDegrees) * 60), 2, '0', STR_PAD_LEFT);
|
||||
$longitudeSeconds = str_pad(round(($longitudeDecimals - $longitudeMinutes / 60) * 3600), 2, '0', STR_PAD_LEFT);
|
||||
$longitudeHemisphere = str_repeat('W', $longitude <= 0) . str_repeat('E', $longitude > 0);
|
||||
|
||||
$string = $latitudeDegrees . '°' . $latitudeMinutes . ''' . $latitudeSeconds . '"' . $latitudeHemisphere;
|
||||
$string .= ' / ';
|
||||
$string .= $longitudeDegrees . '°' . $longitudeMinutes . ''' . $longitudeSeconds . '"' . $longitudeHemisphere;
|
||||
|
||||
return $string;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
||||
Loading…
Add table
Add a link
Reference in a new issue