Google Javascript API Photo getURL возвращает временный URL и не может найти photo_reference - PullRequest
0 голосов
/ 11 июня 2018

Я использую автозаполнение Google (в разделе Maps Javascript API) в Angular 5.

Для целей моего веб-сайта я получаю сведения о месте, включая любые доступные фотографии.Для фотографий я получу URL-адрес фотографии с помощью метода getURL ().

============

Что работает ранее

Ранее я мог сохранить URL-адрес в базе данных и использовать этот же URL-адрес для получения фотографий позднее.Пример URL включает:

https://lh3.googleusercontent.com/p/AF1QipM3QnVu-6W-ZtoTry29MOzDt7vpWzPZAPZbBfqZ=w600-h500-k

https://lh3.googleusercontent.com/p/AF1QipPQ5imb4nzfK1TxG7KAFx2vEx1SoYXeQApA6SVX=w600-h500-k

https://lh4.googleusercontent.com/-l_W16EbIqzk/WS5E5R9_VbI/AAAAAAAAnD8/ajWr1IeY7solMudnxIV21vjqmxLt8CJOACLIB/w300-h250-k

============

Ситуация сейчас

Однако в последние недели тот же метод getURL () возвращает фотографии, срок действия которых истек.У меня нет проблем с просмотром фотографии, когда я впервые ее нашел.Как обычно, я сохраняю URL в моей базе данных.Однако через несколько дней я не могу получить те же изображения.Пример включает в себя:

https://maps.googleapis.com/maps/api/place/js/PhotoService.GetPhoto?1sCmRaAAAAiEX-USwjAvitgPnxuaW7stCrTkQMxyydpcmlg5IrEWnSUS5D3Z2D9evQ_n41Ght-8dr3cZtjvx4oINIEpqj4Z4fvaCyqv6xF0oPC_lw88P6FUQ7SXP2vElr61Zi568IdEhBWY_7xGFNHvdQyDqxZApR3GhS-IM17Pp8oMGlMK0FrXW310tsPCw&3u2000&4u1000&5m1&2e1&key=AIzaSyAbdivx4G0igYO5yr3vTUJcQF5s8lTdXho&callback=none&token=96678

https://maps.googleapis.com/maps/api/place/js/PhotoService.GetPhoto?1sCmRaAAAAkz5xG6DVQSbwHyBIQIshs2FedNARq6oG0Ea6gUxvljPdnHFJqcJniD0gkd2BZQ7-IPc6FPVlYYb7G0t8K_-8hVYizZl4HGy5V1QiE4sjdWLhyWX7MnJYEA61zoup_fbpEhDWYpcVACyQ6RKsqpyS-bQKGhQw8Tg2O8rcGJfaKI0jW3T7XKAYZg&3u2000&4u1000&5m1&2e1&key=AIzaSyAbdivx4G0igYO5yr3vTUJcQF5s8lTdXho&callback=none&token=20957

https://maps.googleapis.com/maps/api/place/js/PhotoService.GetPhoto?1sCmRaAAAAfLQZlWahAqUSlQA5y7-NTeYLMDim6M1L_ht3_qNCSL4dBeX2VWVdhzuJXeqGcKN30XAv3WZHtY2QUXaoKV5fVGSUld2IdOKfV0bv32kEFUdgMlqou9Ij5YVaJ15mfoVcEhB-6hiiaiPS3349mCZMYOPyGhTrEZUg0XGOuBW1rsrLlpmaO9nvqg&3u2000&4u1000&5m1&2e1&key=AIzaSyAbdivx4G0igYO5yr3vTUJcQF5s8lTdXho&callback=none&token=38662

============

В чем может быть проблема

От структуры URL-адресов есть очевидные различия.Старые URL-адреса идут с googleusercontent в качестве имени домена.Пока новые фотографии заканчиваются токеном.Прямо сейчас я все еще могу получить старые фотографии, хотя я мог добавить их несколько месяцев назад.Для новых фотографий срок действия истекает через несколько дней.

Я понимаю, что есть решения, которые требуют использования photo_reference, однако я не могу найти способ извлечь photo_reference с помощью API javascript, который я использую.Я пытался использовать метод службы Places (новый google.maps.places.PlacesService), но он возвращает тот же метод getURL (), который получает тот же временный URL, что и выше.

=======================

Таким образом, мой вопрос: :

  1. Кто-нибудь знает, будет ли изменениев url предназначен или это может быть ошибка от гугла?Если это предназначено, есть ли способ получить постоянный URL, срок действия которого не истекает.

  2. Кто-нибудь знает, как получить photo_reference с помощью API Google javascript?

Большое спасибо за вашу помощь заранее.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Я работал над этим, написав серверную функцию для рекурсивного следования пути перенаправления и получения окончательного URL-адреса фотографии.Пример в эликсире:

def follow(url) when is_binary(url) do
  case HTTPoison.get(url) do
    {:ok, %HTTPoison.Response{status_code: status_code, headers: headers}} when status_code > 300 and status_code < 400 ->
      case get_location_header(headers) do
        [url] when is_binary(url) ->
          follow(url)
        _ ->
          {:error, :no_location_header}
      end

    {:ok, %HTTPoison.Response{status_code: 200}} ->
      {:ok, url}

    reason ->
      {:error, reason}
  end
end

defp get_location_header(headers) do
  for {key, value} <- headers, String.downcase(key) == "location" do
    value
  end
end

, так что теперь я могу взять длинный https://maps.googleapis.com/maps/api/place/js/PhotoService.GetPhoto?1sCm... URL-адрес и запустить его через follow (), который возвращает URL-адрес googleusercontent для самого изображения.

i, затем передайтеЭто URL для файлового стека, чтобы копировать и хранить и обслуживать через CDN ...

немного сумасшедшего обходного пути, но это, наконец, исправило эту проблему для нас.

0 голосов
/ 26 июня 2018

Google говорит, что это преднамеренное поведение, и что единственное, что пользователи должны «кэшировать», это «place_id».

См .: https://issuetracker.google.com/issues/110711934

к сожалению, я думаю, чтобы получитьДля получения ссылки на фотографию необходимо использовать отдельный запрос сведений о месте с использованием идентификатора места.

...