#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 вызовов за раз, прежде чем он застрянет при загрузке.