0

我正在创建一个小代码,用于读取 Google 在其图像搜索中对图像的最佳猜测。

单击链接,以便您可以看到我在说什么。 http://images.google.com/searchbyimage?image_url=http://static.filestube.com/files/images/logo3.gif

如果您单击链接,您会看到结果显示:此图像的最佳猜测:filestube 徽标

我希望能够提取最好的猜测并返回它

这是我的代码不起作用

$ch = curl_init("http://images.google.com/searchbyimage?image_url=http://static.filestube.com/files/images/logo3.gif");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_exec($ch);
curl_close($ch);
preg_match("Best guess for this image:&nbsp;(.*)</a>", $result, $matches);
if(empty($matches)){
    echo("No guess on this image. <br />");
} else{
    echo("Best guess for this image:");
    print_r($matches);
}

我不断返回没有猜测

4

3 回答 3

0

为什么不尝试自定义搜索 API

于 2012-07-23T00:59:31.400 回答
0

好吧,当我运行您的代码时,它说:

Delimiter must not be alphanumeric or backslash

用这个更正你的preg_match行:

preg_match("~Best guess for this image:&nbsp;(.*)</a>~", $result, $matches);

你的代码此时没问题,它会运行没有错误,但是在执行它时,你会再次看到:No guess on this image因为你现在遇到了一个大问题。看看,如果你是echo你的$result变量,你总是会得到这个:

302 Moved
The document has moved here.

而不是直接访问您放置的链接时的结果页面。

所以,你永远不会得到积极的结果。我认为这是对谷歌的一种保护。

尝试新的 :-)

于 2012-07-23T01:06:16.670 回答
0

测试代码时发生的两件事:

首先你的正则表达式是错误的。您需要转义字符,如下所示:

preg_match("/Best guess for this image:&nbsp;(.*)<\/a>/", $result, $matches);

其次,在打印 $result 时,我收到“302:文档已移动”消息,其中包含指向的链接

http://images.google.com/search?tbs=sbi:AMhZZitt90SDPhLD9YMKK0zsGPwPtv7We9Nx0VHAncZh0XuZKPl_1Hqv8XGny1cs4jPSR-Byfk7P_1tBQp3Lu8p83b6yYDw_1g0v9ciHDp_1qZpBxV2lCsHVbk5MTlJYW4JdJqc683K4kk9D7k-AnmqI5fGS09xLBo0q57yYJVfgC1YPhn0u3gFW3loZIXQL30pJhulG7O5XdR-whIhu_1YQKWHGzrMEMP-rUrfoNWN0ndIv9_1vfckTr2hD0ziGMEG1Dc9kQ8XPZzdvDg0YmeyyxJhtaYK5Rgdbr9qBU4KG4GYkNPkcdPn1kq_1dRAhWNYob8aOsDK-596CLI5ys32TmsPL2riU6Hm7ov9rn_1r9ZpSDh5UmAMB72Sq2ERx6KsVMA25heuBeRlOUHTvmhgQXVL5uuqhoeqDNz0cFhHFwba3affnHn2A05apHXY2Wnf1KevEA-nYQ4TgFdBWw1XsY--kC3w03e6F_1TdxWIMLspObeLliPKOXlv7-iDg0NTcmrcKgtHknhTOMK6IsrGVhTMJnqNlorccmxyvlMCUNHslPTB9YXkusNlIs9_1H-CA1Tj79R8JWDU65ckTb9fOZ5zCkoQtouP-UkE5pLOEffXX7huJeMVF68s7vsLBGKc7-Jfm2jFoId9lnzmNjLv9NAm_1ifaVYx2rGiIhl9wcFjn3MerwS6BfjcBvHNxetxpey5vbX1gS0R4sUuV28hNdkYQbG54WmAYpqh5buBbSKHUMvFvKIUtrWIiY3PHqutuZzDJhriU6H8slX6yMhGm2c72BGG4KOZbRNg3E1oHWXHVSoLfG9zNybcW0Mf65aE4xFFq6g6dcckF5DBAYUp

有趣的是,如果我运行这段代码(将链接卷曲“这里”)

preg_match('/(?<=(<A HREF="))(.*)(?=(\"\>here\<\/A\>))/', $result, $matches);

$ch = curl_init($matches[0]);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_exec($ch);
curl_close($ch);

print $result;

我得到了具有不同 URL 的同一页面,所以我猜测谷歌有某种保护措施来防止搭载。

于 2012-07-23T01:09:58.143 回答