Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Розыскивается скриптец
цитата
14/06/12 в 13:25
 Starforce
В общем идея такова, точнее задача. Скрипт, локальный или серверный, который умеет из заданого набора domain.com|desc, выдрать все ссылки на большие картинки и записать это в файл форматом domain.com/im/1.jpg,domain.com/im/2.domain.com/im/3.jpg|decs.

Кто чего может подсказать, или может кто может написать ?
по сути, это простой парсер

Последний раз редактировалось: Starforce (14/06/12 в 14:46), всего редактировалось 1 раз
цитата
14/06/12 в 14:05
 Moma
icon_cool.gif а шо тут подсказывать тут делать надо icon_smile.gif
цитата
14/06/12 в 14:07
 Starforce


дельцы то есть ? ))
цитата
14/06/12 в 14:10
 Moma
icon_cool.gif тогда меня интересует 2 вопроса:
1.время(сроки)
2.деньги(на сколько ты готов раскошелиться)
цитата
14/06/12 в 14:29
 Yacc
А меня только один: формат исходных данных. icon_smile.gif
цитата
14/06/12 в 14:38
 Starforce


формат же указан
задаем
domain.com|desc

получаем на выходе
domain.com/im/1.jpg,domain.com/im/2.domain.com/im/3.jpg|decs
цитата
14/06/12 в 15:04
 FXIX
непонятно.

короче есть файл. в формате:

domain1.com|desc (что за деск?)
...
domainN.com|desc


скрипт парсит файл. заходит на морду домена. выдергивает все картинки. складывает в файл в формате:

domain1.com/im/1.jpg,domain.com/im/2.domain.com/im/3.jpg|decs
...
domainN.com/im/1.jpg,domain.com/im/2.domain.com/im/3.jpg|decs

так?
цитата
14/06/12 в 15:17
 Starforce


все именно так, ничго не скачивается, выдираются только линки на большие пикчи
в данном случае это применяется к фхг
цитата
14/06/12 в 15:36
 Yacc
Starforce писал:
выдираются только линки на большие пикчи

Осталось выяснить как отличать большие картинки от всех остальных. icon_smile.gif

Примерно будет так:

function getHtml( $url, $userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)' ) {
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_USERAGENT, $userAgent );
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_FAILONERROR, true );
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
    $html = curl_exec($ch);
    if( $html !== false ) {
        return $html;
    }
    else {
        echo 'curl error:'.curl_error($ch);
        exit;
    }
}

function getHtmlAttr( $domain, $tag = 'img', $attr = 'src', $protocol = 'http://' ) {
    $html = getHtml( $protocol.$domain );
    $dom = new DOMDocument();
    @$dom->loadHTML( $html );
    $xpath = new DOMXPath( $dom );
    $images = $xpath->evaluate( '/html/body//'.$tag );
    $result = array();
    for( $i = 0; $i < $images->length; $i += 1 ) {
        $image = $images->item( $i );
        $src = $image->getAttribute( $attr );
        if( stripos( $src, 'http' ) !== 0 )
            $src = $protocol.$domain.$src;
        $result[] = $src;
    }
    return $result;
}

$data = file( 'data.txt' );
$result = array();
foreach( $data as $s ) {
    list( $domain, $desc ) = explode( '|', $s, 2 );
    $result[] = implode( '|', getHtmlAttr( $domain ) ).'|'.$desc;
}
file_put_contents( 'result.txt', $result );

Последний раз редактировалось: Yacc (14/06/12 в 17:05), всего редактировалось 1 раз
цитата
14/06/12 в 15:41
 Starforce
Yacc писал:
Осталось выяснить как отличать большие картинки от всех остальных. icon_smile.gif

Примерно будет так:

Код:
function getHtml( $url, $userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)' ) {
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_USERAGENT, $userAgent );
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_FAILONERROR, true );
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
    $html = curl_exec($ch);
    if( $html !== false ) {
        return $html;
    }
    else {
        echo 'curl error:'.curl_error($ch);
        exit;
    }
}

function getHtmlAttr( $domain, $tag = 'img', $attr = 'src', $protocol = 'http://' ) {
    $html = getHtml( $protocol.$domain );
    $dom = new DOMDocument();
    @$dom->loadHTML( $html );
    $xpath = new DOMXPath( $dom );
    $images = $xpath->evaluate( '/html/body//'.$tag );
    $result = array();
    for( $i = 0; $i < $images->length; $i += 1 ) {
        $image = $images->item( $i );
        $src = $image->getAttribute( $attr );
        if( stripos( $src, 'http' ) !== 0 )
            $src = $protocol.$domain.$src;
        $result[] = $src;
    }
    return $result;
}

$data = file( 'data.txt' );
$result = array();
foreach( $data as $s ) {
    list( $domain, $desc ) = explode( '|', $s, 2 );
    $result[] = implode( '|', getHtmlAttr( $domain ) ).'|'.$desc;
}
file_put_contents( 'result.txt', $result );


картинки можно узнавать по коду если ответ ОК, то берем линк, праадв в этом случае наверное придетс яограничить размеры картинок, тчобы не соибрать мусор, ну либо знать как то иным способом, что это именно то, что нужно, наверное можно ссылку *.jpg сопоставлять ссылке на *.jpg
цитата
14/06/12 в 16:23
 Lexikon

$getHeadersImg = get_headers( $img );
$lineArray = implode("|", $getHeadersImg);
$nfo = strpos( $getHeadersImg[0], "200" );
preg_match("/Content-Length: [0-9]+/i", $lineArray, $contentLength);
$fileSize = trim( preg_replace("/[^0-9]/", "", $contentLength[0] ) );
if ( $nfo === false || $fileSize < 10000) { continue; }                       


У меня примерно такой фрагмент кода который отвечает за проверку на существование и минимальный размер.
Но я не особый знаток ПХП, тут есть хорошие спецы smail54.gif , они и мне помогали с вопросами.
цитата
14/06/12 в 17:01
 Yacc
Код:
function getHtml( $url, $userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)' ) {
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_USERAGENT, $userAgent );
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_FAILONERROR, true );
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
    $html = curl_exec($ch);
    if( $html !== false ) {
        return $html;
    }
    else {
        echo 'curl error:'.curl_error($ch);
        exit;
    }
}

function getHtmlAttr( $domain, $tag = 'a/img/..', $attr = 'href', $protocol = 'http://' ) {
    $domain = preg_replace( '#\?.+$#', '', $domain );
    $html = getHtml( $protocol.$domain );
    $dom = new DOMDocument();
    @$dom->loadHTML( $html );
    $xpath = new DOMXPath( $dom );
    $links = $xpath->evaluate( '/html/body//'.$tag );
    $result = array();
    for( $i = 0; $i < $links->length; $i += 1 ) {
        $link = $links->item( $i );
        $href = $link->getAttribute( $attr );
        if( stripos( $href, '.jpg' ) === ( strlen( $href ) - 4 ) ) {
            if( stripos( $href, 'http' ) !== 0 )
                $href = $protocol.$domain.$href;
            $result[] = $href;
        }
    }
    return $result;
}

$data = file( 'data.txt' );
$result = array();
foreach( $data as $s ) {
    list( $domain, $desc ) = explode( '|', $s, 2 );
    $result[] = implode( '|', getHtmlAttr( $domain ) ).'|'.$desc;
}
file_put_contents( 'result.txt', $result );


Работать будет только стандартных галях типа

promo.averotica.com/gals/20120425-1692-alice/?wm=xxxxxxx
picture6.18stream.com/tb/379/h/10/?nats=xxxxxxxxxx

Последний раз редактировалось: Yacc (14/06/12 в 17:33), всего редактировалось 1 раз
цитата
14/06/12 в 17:01
 Moma
icon_smile.gif а зачем
$images = $xpath->evaluate( '/html/body//'.$tag );

не проще $elements = $this->_xpath->query("//*/a/@href");
итого получите ВСЕ href на страничке

и еще хорошо бы не только от гугла и иметь массив имен браузеров и рандомно выбирать на 1 соединение кого-то из них


Эта страница в полной версии