我正在使用谷歌自动完成(在地图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保存到我的数据库中。然而,几天后,我无法检索相同的图像。例子包括:
============
可能有什么问题?
从网址的组成来看,有明显的差别。旧的URL附带googleusercontent作为域名。而更新的照片以标记结尾。现在,我仍然能够检索旧的照片,即使我可能已经添加了几个月前。对于新照片,几天后就过期了。
我知道有些解决方案需要使用photo_reference,但是,我无法找到通过我正在使用的javascript检索photo_reference的方法。我尝试使用Places (新google.maps.places.PlacesService),但它返回相同的getURL()方法,该方法检索相同的临时URL。
=======================
,所以我的问题是
非常感谢您的提前帮助。
发布于 2018-06-26 12:50:58
谷歌表示,这是有意为之的行为,用户唯一应该“缓存”的就是“place_id”。
请参阅:https://issuetracker.google.com/issues/110711934
不幸的是,我认为要检索照片引用,需要使用Place单独的Place请求。
发布于 2018-09-06 17:31:04
为此,我编写了一个服务器端函数,递归地遵循重定向路径并获得最终的照片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并运行它,它将返回图像本身的googleusercontent。
然后我把那个url传递给filestack复制、存储和在CDN上服务.
有点疯狂的解决办法,但它终于为我们解决了这个问题。
发布于 2021-07-04 18:34:36
下面是一个代码,您可以在其中传递从照片中获取的临时URL,它返回一个永久URL,存储在数据库中供以后使用。
<?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/
https://stackoverflow.com/questions/50793470
复制相似问题