Использование importxml с ключом в таблицах Google для извлечения из Directions API

#google-maps-api-3 #google-sheets #directions

#google-maps-api-3 #google-sheets #инструкции

Вопрос:

Я использую Google Spreadsheets для заполнения таблицы времени между различными точками на карте, и для этого использую importxml.

Это отлично работает в качестве теста, однако я не могу понять, как также добавить ключ, который я получил для Maps API. Куда мне вставить его в строку кода? Или я что-то упускаю? Не удается найти какие-либо примеры использования в сети.

Сам код выглядит следующим образом для случайной ячейки (в данном случае L9):

 =if(J10="","",if(J9="","",importxml("http://maps.googleapis.com/maps/api/directions/xml?origin=" amp; if(J9=1,vlookup($B$1,database!$A$1:$D,4,FALSE),vlookup(J9,database!$E$1:$H,4,FALSE)) amp; "amp;destination=" amp; vlookup(J10,database!$E$1:$H,4,FALSE) amp; "amp;sensor=falseamp;alternatives=false","//leg/duration/value"))/1440/60)
  

Ответ №1:

Это должно сработать (если вы замените «MY_KEY» своим фактическим ключом):

  =if(J10="","",if(J9="","",importxml("http://maps.googleapis.com/maps/api/directions/xml?origin=" amp; if(J9=1,vlookup($B$1,database!$A$1:$D,4,FALSE),vlookup(J9,database!$E$1:$H,4,FALSE)) amp; "amp;destination=" amp; vlookup(J10,database!$E$1:$H,4,FALSE) amp; "amp;sensor=falseamp;alternatives=falseamp;key=MY_KEY","//leg/duration/value"))/1440/60)
  

Если вы поместите свой ключ в ячейку электронной таблицы, вы также можете включить его в URL-адрес (добавьте его к URL-адресу, как вы делаете с «amp;origin =» и «amp;destination =»).).

Комментарии:

1. Тай, но я пробовал это раньше, и по какой-то причине он возвращает только «ОШИБКА: импортированное содержимое пустое» в ячейке. Я не могу понять, что не так — либо я не могу использовать клавишу подобным образом, либо вообще не использую эту функцию, либо… Понятия не имею.

Ответ №2:

Я искал по нескольким ресурсам, но в итоге нашел ответ, повозившись с XML-документом из самого API. Ответ заключается в том, что Google реструктурировал XML-файл, и это "//leg/duration/value" используется для указания Google, какую часть XML-файла нам нужно загрузить. Эта строка должна быть обновлена до "DirectionsResponse/route/leg/step/duration/value" , чтобы соответствовать текущему API.

Кроме того, Distance Matrix API кажется немного более надежным, поэтому для моего проекта было разумнее использовать следующее:

 =importxml("https://maps.googleapis.com/maps/api/distancematrix/xml?amp;origins="amp;E2amp;"amp;destinations="amp;F2amp;"amp;sensor=falseamp;alternatives=falseamp;key=[YOUR-KEY]","/DistanceMatrixResponse/row/element/duration/value")/1000)
  

Обратите внимание, что XML-структура также немного отличается:

 "/DistanceMatrixResponse/row/element/distance/value"
  

Ответ №3:

Я использовал следующее:

 =importXML("https://maps.googleapis.com/maps/api/distancematrix/xml?units=imperialamp;origins="amp;AA$3amp;"amp;destinations="amp;$Y23amp;"amp;key=[my-api-key]","//distance/text")
  

Он отлично работает и возвращает значение [657 миль], но я могу совершать только 100 вызовов за раз, прежде чем он застрянет при загрузке.