-1

以下のスクリプトは Google から画像を取得し、$page 変数で指定されたページの 20 枚の画像のみを取得します。

なぜ正確に20の結果が得られるのか、たとえば100の最初の画像を表示するために、この値を大きく変更するにはどうすればよいのかわかりませんでした

<?php


// Image sizes
define ('GIS_LARGE', 'l');
define ('GIS_MEDIUM', 'm');
define ('GIS_ICON', 'i');
define ('GIS_ANY', '');

// Image types
define ('GIS_FACE', 'face');
define ('GIS_PHOTO', 'photo');
define ('GIS_CLIPART', 'clipart');
define ('GIS_LINEART', 'lineart');

function get_data($url)
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}


function googleImageSearch ($query, $page = 1, $size = GIS_ANY, $type = GIS_ANY)
{

$retVal = array();

// Get the search results page


$response = get_data("http://images.google.com/images?hl=en&q=" . urlencode ($query) . '&imgsz=' . $size . '&imgtype=' . $type . '&start=' . (($page - 1) * 21));

// Extract the image information. This is found inside of a javascript call to setResults
preg_match('/\<table class=\"images_table\"(.*?)\>(.*?)\<\/table\>/is', $response, $match);

if (isset($match[2])) {

    // Grab all the arrays
    preg_match_all('/\<td(.*?)\>(.*?)\<\/td\>/', $match[2], $m);

    foreach ($m[2] as $item) {

        // List of expressions used to grab all our info
        $info = array(
            'resultLink' => '\<a href=\"(.*?)\"',
            'source' => 'imgurl=(.*?)&amp;',
            'title' => '\<br\/\>(.*?)\<br\/\>([\d]+)',
            'width' => '([\d]+) &times;',
            'height' => '&times; ([\d]+)',
            'type' => '&nbsp;-([\w]+)',
            'size' => ' - ([\d]+)',
            'thumbsrc' => 'src="(.*?)"',
            'thumbwidth' => 'width="([\d]+)"',
            'thumbheight' => 'height="([\d]+)"',
            'domain' => '\<cite title="(.*?)"\>'
        );

        $t = new stdClass;
        $t->thumb = new stdClass;
        foreach ($info as $prop => $expr) {
            if (preg_match('/' . $expr . '/is', $item, $m)) {
                $value = 'title' == $prop ? str_replace(array('<b>', '</b>'), '', $m[1]) : $m[1];

                // Thumb properties go under the thumb object
                if (0 === strpos($prop, 'thumb')) {
                    $prop = str_replace('thumb', '', $prop);
                    $t->thumb->$prop = $value;
                } else {
                    $t->$prop = $value;
                }

                // Nicey up the google images result url
                if ('resultLink' == 'resultLink') {
                    $t->resultLink = 'http://images.google.com' . $t->resultLink;
                }

            }
        }

        $retVal[] = $t;

    }

}

return $retVal;

}

スクリプトに 20 個の画像を取得するように指示するコード行はどこにありますか?

どんな助けでも大歓迎です。

4

2 に答える 2

1

まあ、できません。このスクリプトは、標準バージョンのGoogle画像から結果を取得しており、ページごとに結果を変更するオプションはありません。あなたができる唯一のことは、全部で100枚の画像を持つように5回リクエストすることです。

更新:画像の追加を更新し続けるには、「+」演算子を使用します。好き、

$image = array();

for( $i = 1; $i <= 5; $i++ )
     $image += googleImageSearch ($query, $page = 1, $size = GIS_ANY, $type = GIS_ANY);

あなたがあなたの要求を隠すのが賢くない場合、またはグーグルが自動化された要求を疑っている場合、あなたはこのページに遭遇する可能性が高いことに注意してください。


ここに画像の説明を入力してください

于 2012-08-12T09:32:16.797 に答える
0

Google API を使用する必要があります。

https://developers.google.com/custom-search/v1/overview

@shubham が述べたように、Google がボットをチェックしているため、必ずこのページにたどり着きます。

于 2012-08-12T09:45:47.893 に答える