Google Geolocator: прямой URL работает, код состояния 620 при использовании simplexml_load_file - PullRequest
1 голос
/ 18 февраля 2012

Я немного запутался по этому поводу.

Я пытаюсь найти латы и ссылки для локатора магазина и работаю с Geolocator от Google и их учебником на http://code.google.com/apis/maps/articles/phpsqlgeocode.html,, ноне могу вернуть ничего, кроме ужасной 620 Ошибка слишком большого количества запросов.

Что действительно странно для меня, так это то, что если я скопирую свой $ request_url в браузер, я получу весь XML, как и ожидалось, но с использованием PHPsimplexml_load_file ($ request_url) всегда возвращает код ошибки 620, независимо от длительности задержки, независимо от того, сколько разных ключей API я использую.

Кто-нибудь знает, что с этим случилось?Я делаю какую-то ужасную ошибку?

Мой код приведен ниже, извините за подробные комментарии и отголоски:

<code><?php   

$host = 'xxx';
$db = 'xxx';
$u = 'xxx';
$p = 'xxx';

define("MAPS_HOST", "maps.google.com");
define("KEY", "xxx");  

// Opens a connection to a MySQL server
$connection = mysql_connect($host, $u, $p);
if (!$connection) {
  die("Not connected : " . mysql_error());
}

// Set the active MySQL database
$db_selected = mysql_select_db($db, $connection);
if (!$db_selected) {
  die("Can\'t use db : " . mysql_error());
}

// Select all the rows in the markers table
$query = "SELECT * FROM BH_locations";
$result = mysql_query($query);
if (!$result) {
  die("Invalid query: " . mysql_error());
}

// Initialize delay in geocode speed
$delay = 0; 
$base_url = "http://" . MAPS_HOST . "/maps/geo?output=xml" . "&key=" . KEY;

// Iterate through the rows, geocoding each address
while ($row = @mysql_fetch_assoc($result)) {   
    echo '<br /><br />row#' . $row['id'] . '<br />';

    $geocode_pending = true;

    while ($geocode_pending) {    
        echo 'started while loop at ' . date('G:i:s:u') . '<br />';
        $address = $row["address"] . ', ' . $row['city'] . ', ' . $row['state'] . ' ' . $row['zip'];  
        echo $address . '<br />';       

        $id = $row["id"];
        $request_url = $base_url . "&q=" . urlencode($address);      
        echo 'request url: ' . $request_url . '<br />';
        $xml = simplexml_load_file($request_url) or die("url not loading"); 
        echo '<pre>';
        var_dump($xml);
        echo '
';$ status = $ xml-> Response-> Status-> code;if (strcmp ($ status, "200") == 0) {// Успешное эхо-код геокода ' WOOHOO, ЭТО РАБОТАЛО !!! «;$ geocode_pending = false;/ * $ координаты = $ xml-> Response-> Placemark-> Point-> координаты;$ координатыSplit = split (",", $ координаты);// Формат: долгота, широта, высота над уровнем моря $ lat = $ordinSplit [1];$ lng = $ argumentsSplit [0];$ query = sprintf ("UPDATE BH_locations". "SET широта = '% s', долгота = '% s'". "WHERE id = '% s' LIMIT 1;", mysql_real_escape_string ($ lat), mysql_real_escape_string ($ lng), mysql_real_escape_string ($ id));$ update_result = mysql_query ($ query);if (! $ update_result) {die ("Неверный запрос:". mysql_error ());} * /} else if (strcmp ($ status, "620") == 0) {// слишком быстро отправил геокоды $ delay + = 100000;эхо 'ошибка 620«;} else {// ошибка с геокодом $ geocode_pending = false;эхо "адрес".$ адрес."не удалось геокодировать.";эхо "Статус получен".$ статус."\ П";} usleep ($ delay);}}?>

1 Ответ

0 голосов
/ 18 февраля 2012

Вы отправляете слишком много запросов, скорее всего, слишком быстро.

См. G_GEO_TOO_MANY_QUERIES константу из документации Google Maps.

Указанный ключ перебранколичество запросов ограничено 24-часовым периодом или отправлено слишком много запросов за слишком короткий промежуток времени. Если вы отправляете несколько запросов параллельно или в замкнутом цикле, используйте таймер или паузу в своем коде, чтобы убедиться, что вы не отправляете запросы слишком быстро.

...