Декодирование встроенных параметров Google Maps

Контекст

Я хотел бы иметь возможность извлекать местоположение Google Maps, встроенное в веб-сайт (случайный пример, найденный внизу этот веб-сайт),

<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3128.340699934565!2d-0.46482818466529047!3d38.3642391796565!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0xd62377123a70817%3A0x85e89b65fcf7c648!2sCalle+Cruz+de+Piedra%2C+4%2C+03015+Alicante!5e0!3m2!1ses!2ses!4v1476192292052" width="100%" height="350" frameborder="0" style="border:0" allowfullscreen=""></iframe>

Ответ 1

Это промежуточное звено не является окончательным ответом, и продолжение следует)), просто некоторые мысли

Недокументированный метод. (вместо tfid placeid)
Веб-сервис API веб-сайтов
В будущем нет гарантии:

https://maps.googleapis.com/maps/api/place/details/json?key=YOUR_API_KEY&ftid=0xd62377123a70817:0x85e89b65fcf7c648&

Задокументированный запрос:

https://maps.googleapis.com/maps/api/place/details/json?key=YOUR_API_KEY&placeid=ChIJFwinI3E3Yg0RSMb3_GWb6IU

Требуется API KEY для этого запроса Настройка ключей API

Ответ от Google: (JSON - легкий синтаксический анализ)

{
   "html_attributions" : [],
   "result" : {
      "address_components" : [
         {
            "long_name" : "4",
            "short_name" : "4",
            "types" : [ "street_number" ]
         },
         {
            "long_name" : "Calle Cruz de Piedra",
            "short_name" : "Calle Cruz de Piedra",
            "types" : [ "route" ]
         },
         {
            "long_name" : "Alacant",
            "short_name" : "Alacant",
            "types" : [ "locality", "political" ]
         },
         {
            "long_name" : "Alicante",
            "short_name" : "A",
            "types" : [ "administrative_area_level_2", "political" ]
         },
         {
            "long_name" : "Comunidad Valenciana",
            "short_name" : "Comunidad Valenciana",
            "types" : [ "administrative_area_level_1", "political" ]
         },
         {
            "long_name" : "Spain",
            "short_name" : "ES",
            "types" : [ "country", "political" ]
         },
         {
            "long_name" : "03015",
            "short_name" : "03015",
            "types" : [ "postal_code" ]
         }
      ],
      "adr_address" : "\u003cspan class=\"street-address\"\u003eCalle Cruz de Piedra, 4\u003c/span\u003e, \u003cspan class=\"postal-code\"\u003e03015\u003c/span\u003e \u003cspan class=\"locality\"\u003eAlacant\u003c/span\u003e, \u003cspan class=\"region\"\u003eAlicante\u003c/span\u003e, \u003cspan class=\"country-name\"\u003eSpain\u003c/span\u003e",
      "formatted_address" : "Calle Cruz de Piedra, 4, 03015 Alacant, Alicante, Spain",
      "geometry" : {
         "location" : {
            "lat" : 38.3642358,
            "lng" : -0.4626489
         },
         "viewport" : {
            "northeast" : {
               "lat" : 38.3655847802915,
               "lng" : -0.4612999197084979
            },
            "southwest" : {
               "lat" : 38.3628868197085,
               "lng" : -0.463997880291502
            }
         }
      },
      "icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
      "id" : "ce1aa5a252b86d559268866a6a4858db9bba3dff",
      "name" : "Calle Cruz de Piedra, 4",
      "place_id" : "ChIJFwinI3E3Yg0RSMb3_GWb6IU",
      "reference" : "CmRbAAAAn6NLYXEs-ttLvUlgjnh5aDHt-LR_hXe6JmUN8fzv6MJ7Q50xt_zUU_WlTc3aL_BQc70-1YjEb6Soluro5rA8cIFJG_w08RSr_JWo_SFEFc1Ncme_dKVKsPX6Q0LtO8gWEhACTzabAMLQfM5xt1_BNsywGhSZr0WRGlutqeuRgs-IY41ndk3yoQ",
      "scope" : "GOOGLE",
      "types" : [ "street_address" ],
      "url" : "https://maps.google.com/?q=Calle+Cruz+de+Piedra,+4,+03015+Alacant,+Alicante,+Spain&ftid=0xd62377123a70817:0x85e89b65fcf7c648",
      "utc_offset" : 60,
      "vicinity" : "Alacant"
   },
   "status" : "OK"
}

Настройка ключей API

Если ваше клиентское приложение не использует OAuth 2.0, оно должно включать ключ API, когда он вызывает API, который включен в проекте Google Cloud Platform. Приложение передает этот ключ во все запросы API в качестве параметра key = API_key. Чтобы создать ключ API приложения:

  • Перейдите в Консоль API.
  • В списке проектов выберите проект или создайте новый.
  • Если страница API и служб еще не открыта, откройте левую сторону и выберите API и службы.
  • Слева выберите Учетные данные.
  • Нажмите Создать учетные данные, а затем выберите ключ API.

Примечание. В дополнение к чтению инструкций на этой странице обязательно прочтите Рекомендации по безопасному использованию ключей API.


(черновик) не удаляется для истории

только для теста! временное решение:

curl "https://www.google.com/maps/place/data=!4m2!3m1!1s0xd62377123a70817:0x85e89b65fcf7c648" -s -b -L -H "user-agent: Googlebot/2.1 (+http://www.google.com/bot.html)" | FIND """0xd62377123a70817:0x85e89b65fcf7c648"","

Ответ в командной строке:   , [ "0xd62377123a70817: 0x85e89b65fcf7c648", NULL, NULL, [NULL, NULL, 38,364235799999996, -0,4626489]

CURL там при необходимости

поиск будет продолжен....


Я думаю, что это (0xd37377123a70817: 0x85e89b65fcf7c648) является идентификатором объекта карты в базе данных GoogleMap. Когда клик URL1.

Пример

если вам нужны географические координаты, тогда нажмите URL2, пожалуйста и следующий, если вам нужна ссылка как EMBED без проблем, результат ниже:

src="https://www.google.com/maps/embed?pb=
!1m18
    !1m12
        !1m3
            !1d782.0856626047412
            !2d-0.46311117079625247
            !3d38.36419405026406
        !2m3
            !1f0
            !2f0
        !3f0
        !3m2
            !1i1024
            !2i768
        !4f13.1
    !3m3
        !1m2
            !1s0x0%3A0x0
            !2zMzjCsDIxJzUxLjEiTiAwwrAyNyc0NS4yIlc
    !5e0
!3m2
   !1ses
   !2ses
!4v1509474812934" 

это FTID (0xd62377123a70817: 0x85e89b65fcf7c648)
Параметр ftid является уникальным идентификатором для определенных объектов карты, так же как fid и cid. Места, которые должны находиться на карте, но не являются частью локальной базы данных, идентифицируются параметром ftid. Невозможно утверждать эти типы объектов Карты через Места.

API Google Места и другие работают с place-id

for (Calle Cruz de Piedra, 4 03015 Alicante) place-id= ChIJFwinI3E3Yg0RSMb3_GWb6IU

(place → place-id)
https://developers.google.com/maps/documentation/javascript/examples/places-placeid-finder
и Reverse (place-id- > place) https://developers.google.com/maps/documentation/javascript/examples/geocoding-place-id

ТЕПЕРЬ:

place-id до location - ok
https://developers.google.com/maps/documentation/geocoding/intro?hl=en#ReverseGeocoding

FTID до location -? вопрос открыт... для быстрого и автоматического

через Google:

https://google.com/maps?ftid=0xd62377123a70817:0x85e89b65fcf7c648

https://www.google.com/maps/place/Calle+Cruz+de+Piedra,+4,+03015+Alicante,+%D0%98%D1%81%D0%BF%D0%B0%D0%BD%D0%B8%D1%8F/ @38.3642358,-0.4648376 ,17z/data=!3m1!4b1!4m5!3m4!1s0xd62377123a70817:0x85e89b65fcf7c648!8m2!3d38.3642358!4d-0.4626489

для Атлантического океана тоже:
https://google.com/maps?ftid=0xadd28c30ec90d79%3A0x44652457c0696504

и два слова о Google Maps Embed API:

<iframe 
src="https://www.google.com/maps/embed?pb=
!1m3
!3m2
!1m1
!1s0xd62377123a70817%3A0x85e89b65fcf7c648"
width="400" height="400" frameborder="0" style="border:0" allowfullscreen>
</iframe>

Ответ 2

Ответ Акубика привел меня в нужное русло. Параметр, который я описываю, является, несмотря на его координатно-подобный param1:param2 -look, идентификатор.

Мне не удалось узнать, что такое param1, но когда выбрано место (например, хранилище), param2 - это идентификатор клиента Google Maps (CID) в шестнадцатеричном кодировании. В моем примере это не так. Но, используя другой реальный пример, параметр:

!1s0x6ad63fbf56e24c27:0xe665b3308d32f379

можно понять как это

0xe665b3308d32f379  ---hex-to-dec--->  16601872622479930233

и https://google.com/maps?cid=16601872622479930233 приведет к отмеченному месту.

Как извлечь из этого координаты? Если у вас есть только несколько образцов, вы можете сделать это вручную. Нажмите на ссылку выше, и через 1-2 секунды Карты Google обновят URL-адрес в браузере. Теперь он содержит точные координаты места (да, на этот раз точные координаты, а не центр окна просмотра) в параметрах !3d и !4d.

Если у вас много образцов и/или вы хотите автоматизировать этот процесс, вам необходимо использовать API Карт Google (например, проверьте link).

Что не хватает: как понять параметр, если не место, но был выбран адрес? Например, см. Ссылку в моем исходном вопросе.