PHP - Google Image Grabber

时间:2015-06-30 07:15:18

标签: php regex

基本上我需要这个,所以我可以抓住一个快速简单的720p分辨率图像,无论我搜索到什么。它可以是页面上的任何图像,但为了相关性,第一张图像最好抓取并保存。

我目前的代码:

<?php
$q = urlencode($_GET['q']);
$page = file_get_contents("https://www.google.com/search?site=imghp&tbm=isch&source=hp&biw=1920&bih=945&q=$q");
preg_match_all('~url?q=(.*)~', $page, $matches);
foreach ($matches as $val) {
    echo "matched: " . $val[0] . "\n";
    echo "part 1: " . $val[1] . "\n";
    echo "part 2: " . $val[2] . "\n";
    echo "part 3: " . $val[3] . "\n";
    echo "part 4: " . $val[4] . "\n\n";
}
?>

不确定为什么它不起作用,也许我的正则表达式已经关闭或者其他东西,但只有(*。)因为正则表达式甚至输出一个字母。

重要: 看起来这是使用file_get_contents获取的输出: http://gravityfalls.wikia.com/wiki/Gravity_Falls_(TV_series)及SA = U&安培; EI = 7U6SVd_tOMa2oQShrajgDg&安培; VED = 0CBYQ9QEwAA&安培; USG = AFQjCNFtGgjaGTit0Q3291xaQHjOl8NmIA&#34;&GT;

1 个答案:

答案 0 :(得分:0)

好吧,Thx伙伴们帮我一个忙:D

自己发现...... - .- 多数民众赞成我认为这是一件好事:D

<?php
    $q = urlencode($_GET['q']);

    $url="https://www.google.com/search?site=imghp&tbm=isch&source=hp&biw=1920&bih=945&q=".$q;

    $ch2 = curl_init();
    curl_setopt ($ch2, CURLOPT_URL, $url);
    curl_setopt ($ch2, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt ($ch2, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31"); 
    curl_setopt ($ch2, CURLOPT_TIMEOUT, 60);
    curl_setopt ($ch2, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt ($ch2, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt ($ch2, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch2, CURLOPT_REFERER, $url);
    $result = curl_exec ($ch2);
    curl_close($ch2);

    $expA=explode('href="http://www.google.com/imgres?imgurl=',$result);
    $expB=explode('&',$expA[1]);
    $auth=$expB[0];
    echo $auth;
?>

的信息: 切换到cUrl,因为它绕过这个看起来很旧的机器人保护页面并显示实际的图像网址,而不是像http://example.com/asdhrehfhJHfsjkh.skdhHJKf这样的网址。

它为您提供了第一张图片的链接,这对于抓取专辑封面或其他东西非常有用。 (SOmething有点像我在做什么,但基本上得到截图)。

从正则表达式转移到Explode(),因为我并没有完全搜索超过一个项目而且我没有寻找外部需要正则表达式的soemthing所以这个爆炸工作正常。

更新: 这允许删除.jpg等之后的任何内容:

if(preg_match('/(.*)(?:png|jpe?g|bmp|gif)/', $explodedresult, $match) !== false) {
    echo $match[0];
} else {
    echo 'Not Found';
}

这很有用,因为一些网址会最终制作它以便jpg之后的文本会使jpg文件无法加载e.t.c,例如此页面:

http://vignette4.wikia.nocookie.net/gravityfalls/images/1/16/Main_characters_of_Gravity_Falls.png/revision/latest%253Fcb%253D20140821174543