Не удается получить обычный текст API-карты Google API в переполнении стека

Я стараюсь изо всех сил, чтобы получить простой текст из API карт Google Maps, где он говорит html_instructions в json. все закодировано в html, и я хочу выводить простой текст.

вот что я получаю
изображение 1

это то, что я хочу: изображение 2

Я попробовал любой тип preg_replace, он не мог мне помочь.

Google Maps API-ссылка
Ссылка на сайт

0

Решение

РЕДАКТИРОВАТЬ: Предыдущий фрагмент кода удален и заменен работоспособной небольшой программой.

Обратите внимание, что когда вы обрабатываете данные с помощью json_decode (), сегменты Unicode, такие как \u003cb\u003eFlintergata\u003c/b\u003e преобразованы в <b>Flintergata</b>, Это очень помогает сделать Regex более читабельным.

Обратите внимание $details Массив является многоуровневым ассоциативным массивом, поэтому вам нужно покопаться, как показано, чтобы найти нужные вам данные.

Также обратите внимание, что предоставленный вами URL приводит к 1 маршруту с 1 участком. Таким образом, предоставленный мною код показывает и обрабатывает первую часть первого маршрута.

Если вы используете другой URL, вы можете получить несколько маршрутов, каждый из которых состоит из нескольких шагов. Код по-прежнему будет обрабатывать первый этап первого маршрута, но каждый из них (с внешними циклами) будет отображать все из них (не показано ниже).

Объяснение строки регулярного выражения ‘»~> ([A-Z]. *?)<~ «‘заключается в следующем.

'#' на каждой стороне есть разделители PHP — но вы также можете использовать другие символы и не будет иметь никакого значения.

<b> а также </b> говорят, что каждая совпадающая строка должна начинаться с <b> и заканчивается </b>,

Внутри ( ) «группа захвата», которая говорит, что мы хотим извлечь только ту часть строки (исключая <b> а также </b>).

[A-Z] говорит начать с заглавной буквы

.* говорит следовать с 0 или более любого символа.

? делает * non_greedy, поэтому в этом случае останавливает текущее совпадение, когда оно встречает следующее <,

Список совпадений для каждой строки входит в массив с именем $matches а также $matches[1] массив совпадений группы захвата (т. е. текст в <b> а также </b> устранен).

<?php

$json = file_get_contents("https://maps.googleapis.com/maps/api/directions/json?origin=sandnes&destination=vigrestad&key=");
$details = json_decode($json,true);

// $details is a large associative array
// print all the instructions for the first step of the fist leg of the first route
echo PHP_EOL."Here are the unfiltered html instructions for first leg of first route ".PHP_EOL.PHP_EOL;
$steps = $details['routes'][0]['legs'][0]['steps'];
foreach($steps as $step){
echo($step['html_instructions']).PHP_EOL;  // print to see format
// we see unicode html_entities have been replaced and now look like <b>  </b> etc
}

// now extra the required information from each step
echo PHP_EOL."Here are the filtered html instructions for first leg of first route ".PHP_EOL.PHP_EOL;
foreach ($steps as $step)
{
//preg_match_all("~003e([A-Z].*?)\\\\u003c~", $step['html_instructions'], $match); // not needed now
preg_match_all('#,<b>([A-Z].*?)</b>#, $step['html_instructions'], $match);  // now detects strings between '>' and '<'
foreach($match[1] as $instructionPart)
{
echo $instructionPart." ";
}
echo PHP_EOL;

}
?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]