используя PHP и регулярные выражения в cURL - PullRequest
0 голосов
/ 16 июня 2011

Я хочу найти в каталоге случайный файл с расширением .png. Я делаю это через cURL, поэтому мой скрипт выглядит так:

$url =  "http://www.google.com/images/logos/".$b;

, а затем просто делаю это:

curl_setopt($ch, CURLOPT_URL, $url);

проблема в том, что я не знаю, как установить значение $b. Я пробовал это - $b="{%[a-zA-Z0-9_-]%}.'.png'";, но, очевидно, это не работает.

Спасибо

Лерон

Ответы [ 2 ]

0 голосов
/ 16 июня 2011

У меня сложилось впечатление, что вы не совсем понимаете, как работают регулярные выражения.Ну, во-первых, вам нужно иметь вход для сопоставления с регулярным выражением.Например:

$input = "hello, 123"; //I just need the digits part
$regex = @"\d+";
preg_match($regex, $input, $matched); 

\ d поиск по цифрам [0-9] в строке, эквивалент [0-9] или:

        for ($c = 0, $len = strlen($input); $c < $len; $c++)
        {
            $tmp = $input[$c];
            if ($tmp == '0' || $tmp == '1' || $tmp == '2' ||
               $tmp == '3' || $tmp == '4' || $tmp == '5' ||
               $tmp == '6'|| $tmp == '7' || $tmp == '8' ||
                $tmp == '9')
            {

               echo $tmp; 
            }
        }

, если вы хотите загрузить все изображения Google, также проверьте:

http://www.google.com/logos/ веб-сканер для извлечения ссылки на все изображения на этой странице:

<?
Header('Content-Type:text/plain');
$domain = "http://www.google.com/logos/";
$ch = curl_init($domain);
curl_setopt($ch ,CURLOPT_RETURNTRANSFER, true);
$response  = curl_exec($ch);
preg_match_all("/<img\s+alt=\"(?<title>[^\"]+)\"\s+src=\"(?<url>[^\"]+)\"/", $response, $matched); 
print_r($matched); 
?>

Вывод:

  [title] => Array
        (
            [0] => Latest Google Logos
            [1] => Les Paul's 96th Birthday
            [2] => Dragon Boat Festival
            [3] => Richard Scarry's 92nd Birthday
            [4] => Republic Day
            [5] => Birthday of Ibn Khaldun
            [6] => Africa Day
            [7] => Jordan Independence Day
            [8] => Day of Slavonic Alphabet, Bulgarian Enlightenment and Culture
            [9] => Emile Berliner's 160th Birthday
            [10] => Doodle4Google US Winner
            [11] => 100th Birthday of Annie M.G. Schmidt
            [12] => Dame Nellie Melba's 150th Birthday
            [13] => 120th Birthday of Mikhail Bulgakov
            [14] => Paraguay's Independence Day
            [15] => Martha Graham's 117th Birthday. Animated by Ryan Woodward, choreographed by Janet Eilber, and danced by Blakeley White-McGuire.
//...



 [url] => Array
        (
            [0] => /images/feed-icon.gif
            [1] => /logos/2011/lespaul11-hp.png
            [2] => /logos/2011/dragonboat11-hp.jpg
            [3] => /logos/2011/scarry11-hp.png
            [4] => /logos/2011/republicday11-hp.jpg
            [5] => /logos/2011/ibn11-hp.jpg
            [6] => /logos/2011/africaday11-hp.jpg
            [7] => /logos/2011/jordan11-hp.png
            [8] => /logos/2011/slavonic_alaphabet11-hp.jpg
            [9] => /logos/2011/berliner11-hp.png
            [10] => /logos/2011/d4g11-matteolopez-HP.png
            [11] => /logos/2011/annieschmidt11-hp.jpg
            [12] => /logos/2011/nelliemelba11-hp.jpg
            [13] => /logos/2011/bulgakov11-hp.png
            [14] => /logos/2011/paraguay11-hp.jpg
            [15] => /logos/2011/graham11-hp.png
//....

и более

$urlToDownlaod = implode($domain, $matched["url"]);
$urlToDownlaod  = explode("\"", $urlToDownlaod);
print_r($urlToDownlaod);

Теперь у вас есть все URL-адреса изображений, размещенных на google.com/logos, создайте функцию для загрузки

простой пример:

function GetSrc($link) { 
$ch = curl_init($link);
curl_setopt($ch ,CURLOPT_RETURNTRANSFER, true);
return curl_exec($ch); 
}

for($x = 0,$len = count($urlToDownlaod); $x < $len; $x++) {
     $fp = fopen("images/".$matched["title"][$x], "w");
     fputs($fp, GetSrc($urlToDownlaod[$x]);
     fclose($fp);
     flush();
}
0 голосов
/ 16 июня 2011
$test = 'abcdefghijklmnopqrstuvwxyz....'; // put in all characters you want to test for

for($i=0,$len=strlen($test); $i<$len; $i++) {
  $b = $test[$i];
  $url =  sprintf("hxxp://www.google.com/images/logos/%s.png", $b);
  curl_setopt($ch, CURLOPT_URL, $url);
  ...
}

Этот пример только для одной буквы. Однако если вам нужно больше букв, это может занять очень много времени, пока вы не проверите все файлы.

Допустим, 23 возможных символа, длина

1: 23 urls
2: 529 urls
3: 12 167 urls

так, например, 1-3 буквы: 12 719 URL для проверки. Просто чтобы дать вам картину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...