首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回临时photo_reference,无法找到photo_reference

返回临时photo_reference,无法找到photo_reference
EN

Stack Overflow用户
提问于 2018-06-11 08:33:43
回答 3查看 1.3K关注 0票数 2

我正在使用谷歌自动完成(在地图Javascript API下)在角5。

为了我的网站,我检索一个地方的细节,其中包括任何可用的照片。对于照片,我将通过getURL()方法获得照片URL。

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

以前起作用的

在此之前,我可以将url保存在数据库中,并使用相同的url在稍后的日期检索照片。URL示例包括:

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

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

VbI/AAAAAAAAnD8/ajWr1IeY7solMudnxIV21vjqmxLt8CJOACLIB/w300-h250-k

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

形势现在

但是,在最近几周,相同的getURL()方法返回过期的照片。当我第一次取回这张照片时,我没有问题。和往常一样,我将url保存到我的数据库中。然而,几天后,我无法检索相同的图像。例子包括:

7xGFNHvdQyDqxZApR3GhS-IM17Pp8oMGlMK0FrXW310tsPCw&3u2000&4u1000&5m1&2e1&key=AIzaSyAbdivx4G0igYO5yr3vTUJcQF5s8lTdXho&callback=none&token=96678

fbpEhDWYpcVACyQ6RKsqpyS-bQKGhQw8Tg2O8rcGJfaKI0jW3T7XKAYZg&3u2000&4u1000&5m1&2e1&key=AIzaSyAbdivx4G0igYO5yr3vTUJcQF5s8lTdXho&callback=none&token=20957

qNCSL4dBeX2VWVdhzuJXeqGcKN30XAv3WZHtY2QUXaoKV5fVGSUld2IdOKfV0bv32kEFUdgMlqou9Ij5YVaJ15mfoVcEhB-6hiiaiPS3349mCZMYOPyGhTrEZUg0XGOuBW1rsrLlpmaO9nvqg&3u2000&4u1000&5m1&2e1&key=AIzaSyAbdivx4G0igYO5yr3vTUJcQF5s8lTdXho&callback=none&token=38662

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

可能有什么问题?

从网址的组成来看,有明显的差别。旧的URL附带googleusercontent作为域名。而更新的照片以标记结尾。现在,我仍然能够检索旧的照片,即使我可能已经添加了几个月前。对于新照片,几天后就过期了。

我知道有些解决方案需要使用photo_reference,但是,我无法找到通过我正在使用的javascript检索photo_reference的方法。我尝试使用Places (新google.maps.places.PlacesService),但它返回相同的getURL()方法,该方法检索相同的临时URL。

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

,所以我的问题是

  1. 有没有人知道修改url是有意的还是可能是谷歌的错误?如果它是有意的,是否有任何方法来获得一个永久的url不过期。
  2. 有人知道如何通过google检索photo_reference吗?

非常感谢您的提前帮助。

EN

回答 3

Stack Overflow用户

发布于 2018-06-26 12:50:58

谷歌表示,这是有意为之的行为,用户唯一应该“缓存”的就是“place_id”。

请参阅:https://issuetracker.google.com/issues/110711934

不幸的是,我认为要检索照片引用,需要使用Place单独的Place请求。

票数 2
EN

Stack Overflow用户

发布于 2018-09-06 17:31:04

为此,我编写了一个服务器端函数,递归地遵循重定向路径并获得最终的照片url。在灵丹妙药中的例子:

代码语言:javascript
复制
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并运行它,它将返回图像本身的googleusercontent。

然后我把那个url传递给filestack复制、存储和在CDN上服务.

有点疯狂的解决办法,但它终于为我们解决了这个问题。

票数 0
EN

Stack Overflow用户

发布于 2021-07-04 18:34:36

下面是一个代码,您可以在其中传递从照片中获取的临时URL,它返回一个永久URL,存储在数据库中供以后使用。

代码语言:javascript
复制
<?php
function get_redirect_url($url){
    $redirect_url = null; 
 
    $url_parts = @parse_url($url);
    if (!$url_parts) return false;
    if (!isset($url_parts['host'])) return false; //can't process relative URLs
    if (!isset($url_parts['path'])) $url_parts['path'] = '/';
 
    $sock = fsockopen($url_parts['host'], (isset($url_parts['port']) ? (int)$url_parts['port'] : 80), $errno, $errstr, 30);
    if (!$sock) return false;
 
    $request = "HEAD " . $url_parts['path'] . (isset($url_parts['query']) ? '?'.$url_parts['query'] : '') . " HTTP/1.1\r\n"; 
    $request .= 'Host: ' . $url_parts['host'] . "\r\n"; 
    $request .= "Connection: Close\r\n\r\n"; 
    fwrite($sock, $request);
    $response = '';
    while(!feof($sock)) $response .= fread($sock, 8192);
    fclose($sock);
 
    if (preg_match('/^Location: (.+?)$/m', $response, $matches)){
        if ( substr($matches[1], 0, 1) == "/" )
            return $url_parts['scheme'] . "://" . $url_parts['host'] . trim($matches[1]);
        else
            return trim($matches[1]);
 
    } else {
        return false;
    }
 
}
 
function get_all_redirects($url){
    $redirects = array();
    while ($newurl = get_redirect_url($url)){
        if (in_array($newurl, $redirects)){
            break;
        }
        $redirects[] = $newurl;
        $url = $newurl;
    }
    return $redirects;
}
 
function get_final_url($url){
    $redirects = get_all_redirects($url);
    if (count($redirects)>0){
        return array_pop($redirects);
    } else {
        return $url;
    }
}

 echo get_final_url($temporary_google_url);
?>

来源:http://w-shadow.com/blog/2008/07/05/how-to-get-redirect-url-in-php/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50793470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档