如何让我的curl语句正确阅读谷歌图片猜测?

时间:2012-07-23 00:37:58

标签: php curl preg-match

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

点击链接,这样你就可以看到我在说什么。 http://images.google.com/searchbyimage?image_url=http://static.filestube.com/files/images/logo3.gif

如果点击该链接,您会看到结果显示:此图片的最佳猜测:filestube logo

我希望能够得出最佳猜测并将其返回

这是我的代码没有工作

$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);
}

我一直没有回答

3 个答案:

答案 0 :(得分:0)

为什么不尝试Custom Search API

答案 1 :(得分: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.

而不是带有结果的页面,就像直接进入您放置的链接一样。

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

尝试新的东西: - )

答案 2 :(得分: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;

我使用不同的网址获得相同的网页,因此我猜测谷歌有某种保护措施可以防止背负。