php:获取谷歌的第一个结果

时间:2011-07-05 23:19:15

标签: php regex curl preg-match-all

我有这段代码可以帮助我通过搜索“IMDB + Actor名称”来获取IMDB上的actor页面的URL,并将URL提供给他的IMDB个人资料页面。

直到5分钟前工作正常,突然间它停止工作。我们是否有谷歌查询的每日限制(会发现它非常奇怪!)或者我是否在不注意的情况下改变了我的代码(在这种情况下你能发现什么是错的吗?)?

function getIMDbUrlFromGoogle($title){
    $url = "http://www.google.com/search?q=imdb+" . rawurlencode($title);
    echo $url;
    $html = $this->geturl($url);
    $urls = $this->match_all('/<a href="(http:\/\/www.imdb.com\/name\/nm.*?)".*?>.*?<\/a>/ms', $html, 1);

    if (!isset($urls[0]))
        return NULL;
    else
        return $urls[0]; //return first IMDb result

}

function geturl($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1");
    $html = curl_exec($ch);
    curl_close($ch);
    return $html;
}

function match_all($regex, $str, $i = 0)
{
    if(preg_match_all($regex, $str, $matches) === false)
        return false;
    else
        return $matches[$i];
}

3 个答案:

答案 0 :(得分:1)

事实上,如果查询过快或过多,他们会扼杀你。例如,他们的SOAP API将您限制为每天1k个查询。要么等待,要么使用邀请这种用途的东西......比如雅虎的BOSS。 http://developer.yahoo.com/search/boss/

ETA:我真的,真的,像BOSS一样,而且我是Google的fangirl。它为您提供了大量资源,干净的数据和灵活性......谷歌从来没有给我们这样的东西,这太糟糕了。

答案 1 :(得分:0)

有一个API for the search for Google,并且仅限于 100个查询/天!根据G指南,不允许使用任何类型的自动工具获取Google搜索结果。

答案 2 :(得分:0)

Google的网页专为人类使用而设计;如果他们注意到你以自动方式大量使用它,他们会把你拒之门外。他们的Terms of Service很清楚,你所做的事情是不允许的。 (虽然它们似乎不再直接链接到搜索结果页面上的内容,更不用说它们的首页了,而且无论如何AIUI至少有些法院坚持认为在页面上放置链接不具有法律约束力。)

他们希望您使用他们的API,如果您大量使用它们,那么付费(它们并不过分)。

那就是说,你为什么不直接去IMDb