逆向工程Google“撰写评论”链接网址

时间:2016-09-16 16:23:43

标签: algorithm google-maps hex

在Google本地商家信息中,有一个网址可以将用户直接带到显示商家评价的弹出窗口。这是一个例子:

https://www.google.com/search?q=Massage+Envy+-+Arrowhead&ludocid=12682026813239828050#lrd=0x872b682580f9e59b:0xafff9c31c3239e52,1

每个营业地点在网址中都有一个数字ID(在示例中为12682026813239828050),以及#lrd参数中此数字的十六进制表示。

我拥有所有数字ID,需要通过确定如何形成十六进制段来生成这些URL。对于ID可以用16个十六进制字符表示的位置,这很容易。 URL段只是0x0:0x [hexstring]例如:

4134566830992571874 => 0x0:0x3960eea07d6cbe00

但是当数字太长时,它被分成两个十六进制字符串,我无法确定第一个字符串的来源。我拉了两个例子:

14384749138104818286 => 0x872b0445e4ee5e9b:0xc7a0e5209fd81a6e
15716027411522919173 => 0x872b00074aa36265:0xda1a8ba9e8201b05

SECOND十六进制字符串将转换为CLOSE的数字。在示例中:

c7a0e5209fd81a6e => 14384749138104818 (missing the last 3 digits)
da1a8ba9e8201b05 => 15716027411522918 (missing the last 3 digits and off by 1000)

以下是成功转换它们的网站:https://pleper.com/index.php?do=tools&sdo=google_review_link&url=4134566830992571874

有人可以帮我确定生成这些的方法吗?如果有另一个堆栈站点会更好,请指导我。谢谢!

4 个答案:

答案 0 :(得分:2)

回答这个问题。以下是google lrd的当前细分,以留下5星评价:

#lrd=0x6b12ae37b47f5b37:0x8eaddfcd1b32ca52,3,5

据我所知,这是分解:

lrd = 
[ 0x6b12ae37b47f5b37 ] = Unknown. What does this number represent? 
: 
[ 0x8eaddfcd1b32ca52 ] = google cid converted to hex 
[ ,3 ] = The review type. 1 for reviews, 2 for write review, 3 also write     review
[ ,5 ] = The review rating to pre-fill on the modal

如果您正在寻找创建评论链接的解决方案,这可能有所帮助。该问题的解决方案是使用google places api。这将允许您从api查询商家place_id并将其与评论链接一起使用谷歌允许您将其用作公共评论链接,如下例所示:

https://search.google.com/local/writereview?placeid= [place_id]

有关此链接的更多信息:Google review help

这仍然不允许您获取谷歌在谷歌搜索中创建的实际链接,或者附加评论评级以预先填写评论模式,如下例所示:

https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=google+syndey&*&lrd=0x6b12ae37b47f5b37:0x8eaddfcd1b32ca52,3,5

使用我们使用place_id创建的第一个链接并从响应头获取返回位置,可以使用curl请求解决此问题。

/* this is a php example curl */ 

$id = "ChIJN1t_tDeuEmsRUsoyG83frY4";

/* this will return the review url for a 
google place account. 
@param (string) $id = the google place_id 
@return (string|false) the google review url 
or false on error */ 
function getReviewUrl($id)
{ 
    $url = "https://search.google.com/local/writereview?placeid=" . $id; 

    /* we need to setup headers to show a user agent 
    to stop google from redirecting to a 404 because 
    the request is coming from a curl */ 
    $header = array(
        'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36'
    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_URL, $url);
    $out = curl_exec($ch);

    $location = false; 
    preg_match('/^(?:Location:(.*))$/mi', $out, $matches);
    if(isset($matches[1]))
    { 
        $location = $matches[1]; // this is the full review url
    }
    curl_close($ch);
    return $location; 
}

echo getReviewUrl($id);

这将返回完整的Google评论网址,您可以轻松添加",5"结束它以预先填写评级为5星。

答案 1 :(得分:1)

我最终使用“将长整数转换为十六进制”功能使其工作: How to convert a huge integer to hex in php?

如果您使用0x0:0x[result of that function]而不是使用Google生成的两部分网址,则该网址也可以使用。肯定还有另一个有效的网址,但我有一个同时工作的网址。感谢。

答案 2 :(得分:0)

简单搜索地点,在google搜索中,在右侧卡片中,找到“撰写评论”按钮,单击,然后复制上面的网址。

答案 3 :(得分:0)

@ 2020

Google最终简化了Review URL,因此我们不再需要将&lrd参数转换为十六进制。糟糕的骇客。

现在您所需要的只是位置和这些URL的place_id参数: