PHP-парсер для Vsetv

Red Admin

Постоялец
Регистрация
23 Фев 2012
Сообщения
177
Реакции
114
Ребят, доброго времени суток.
Мучу для себя парсер программы от все-тв.
Честно говоря интересует всего один канал вот по этой ссылке:
Для просмотра ссылки Войди или Зарегистрируйся
Но парсить тот ХТМЛ-мусор, что есть на странице весьма муторно.
Хочется чистоты.
Есть замечательная ссылочка:
Для просмотра ссылки Войди или Зарегистрируйся
Но она работает только после посещения страницы указанной первой.
Собственно в этом проблема и состоит...
Как CURL-ом (именно им, т.к. нужно представиться браузером) сначала посетить одну страницу, а потом перейти на другую, с сохранением настроек?
 
Не знаю, как она должна работать, но у меня открывает "Телепрограмма на понедельник, 28 ноября".
Может тебя тупо по useragent-у режут?

Таки я прав. Оно использует 302 редирект для утилит типа curl, wget. Скармливай ему десктопный useragent и проблем не будет.
 
Последнее редактирование модератором:
Прикол в том, что если зайдешь по верхней ссылке, а потом по нижней, то на странице печати нужный и канал, и дата.
А вот если напрямую по нижней ссылке зайти, не переходя сначала по верхней, то будут каналы по умолчанию и текущая дата.
Мне б на php первый вариант замутить, но как?

Код:
 $url1 = "http://www.vsetv.com/schedule_channel_".$chanel_id."_day_".$dateurl."_nsc_1.html";
 $url2 = "http://www.vsetv.com/schedule_printversion_withoutdesc.html";

        $ch1 = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_ENCODING, "");
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

$src = curl_exec($ch);
                if ($src === FALSE) {
                        echo "cURL Error: " . curl_error($ch);
                }

Ну а дальше сам парсинг...
Так вот и вопрос. Как разобрать $url2 с настройками $url1?
 
Cookies тебе в помощь. Заходишь на первую страницу, сохраняешь куки, потом на вторую страницу, скармливая куки, полученные при посещении первой страницы. Как-то так в кратце.
 
Это как? Я пока только начал изучать CURL... И мне даже стыдно такое просить...
 
Как все запущено :eek: Ну раз только начал, начни изучать документацию по curl. День-два потратишь на изучение/практику и освоишься. Сайт от тебя никуда не убежит. :glob:
 
Заделал так:
Код:
        $url1 = "http://www.vsetv.com/schedule_channel_".$chanel_id."_day_".$dateurl."_nsc_1.html";
        $url2 = "http://www.vsetv.com/schedule_printversion_withoutdesc.html";

        $ch1 = curl_init();
        curl_setopt($ch1, CURLOPT_URL, $url1);
        curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch1, CURLOPT_HEADER, 1);
        curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1); 
        curl_setopt($ch1, CURLOPT_ENCODING, ""); 
        curl_setopt($ch1, CURLOPT_COOKIEFILE, "/tmp/vsetv.txt");
        curl_setopt($ch1, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

        $ch2 = curl_init();
        curl_setopt($ch2, CURLOPT_URL, $url2);
        curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch2, CURLOPT_HEADER, 1);
        curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch2, CURLOPT_ENCODING, "");
        curl_setopt($ch2, CURLOPT_COOKIEJAR, "/tmp/vsetv.txt");
        curl_setopt($ch2, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

        $src1 = curl_exec($ch1);
                if ($src === FALSE) {
                        echo "cURL Error: " . curl_error($ch1);
                }

        curl_setopt($ch1, CURLOPT_URL,$url2);

        $src2 = curl_exec($ch2);
                if ($src === FALSE) {
                        echo "cURL Error: " . curl_error($ch1);
                }

        curl_close($ch2);
        curl_close($ch1);
Выясняется, что дело похоже не в куках... они слишком просты....
Код:
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

www.vsetv.com   FALSE   /       FALSE   0       PHPSESSID       a4762a754cb01a7ef3f6f5604e16817b
www.vsetv.com   FALSE   /       FALSE   1486396424      cookietest      1
 
Попробуй ещё на втором запросе REFERER передать
PHP:
curl_setopt($ch2, CURLOPT_REFERER, $url1);
Возможно в нем дело.
 
Последнее редактирование:
Попытался сделать так:
Код:
    $url1 = "http://www.vsetv.com/login.php";
    $url2 = "http://www.vsetv.com/schedule_package_personal_day_".$dateurl."_nsc_1.html";
    $url3 = "http://www.vsetv.com/schedule_printversion_withoutdesc.html";

    $ch1 = curl_init();
    curl_setopt($ch1, CURLOPT_URL, $url1);
    curl_setopt($ch1, CURLOPT_VERBOSE, 1);
    curl_setopt($ch1, CURLOPT_POST, 1);
    curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch1, CURLOPT_POSTFIELDS,"inlogin=".$login."&inpassword=".$password);
    curl_setopt($ch1, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
    curl_setopt($ch1, CURLOPT_HEADER, 1);
    curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch1, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch1, CURLOPT_COOKIEJAR, "/tmp/vsetv.01.txt");

    $ch2 = curl_init();
    curl_setopt($ch2, CURLOPT_URL, $url2);
    curl_setopt($ch2, CURLOPT_REFERER, $url1);
    curl_setopt($ch2, CURLOPT_VERBOSE, 1);
    curl_setopt($ch2, CURLOPT_POST, 1);
    curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch2, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
    curl_setopt($ch2, CURLOPT_HEADER, 1);
    curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch2, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch2, CURLOPT_COOKIEFILE, "/tmp/vsetv.01.txt");
    curl_setopt($ch2, CURLOPT_COOKIEJAR, "/tmp/vsetv.02.txt");

    $ch3 = curl_init();
    curl_setopt($ch3, CURLOPT_URL, $url3);
    curl_setopt($ch3, CURLOPT_REFERER, $url2);
    curl_setopt($ch3, CURLOPT_VERBOSE, 1);
    curl_setopt($ch3, CURLOPT_POST, 1);
    curl_setopt($ch3, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch3, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
    curl_setopt($ch3, CURLOPT_HEADER, 1);
    curl_setopt($ch3, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch3, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch3, CURLOPT_COOKIEFILE, "/tmp/vsetv.02.txt");


    $src1 = curl_exec($ch1);
        if ($src1 === FALSE) {
            echo "cURL Error: " . curl_error($ch1);
        }

    $src2 = curl_exec($ch2);
        if ($src2 === FALSE) {
            echo "cURL Error: " . curl_error($ch2);
        }

    $src3 = curl_exec($ch3);
        if ($src3 === FALSE) {
            echo "cURL Error: " . curl_error($ch3);
        }

    $src = $src3;
    $src = iconv("cp1251", "utf-8", $src);
Ни фига не получилось... Разбираю $src, а там все по дефолту...
 
Последнее редактирование:
Проверил у себя, как ни странно все дело в PHPSESSID.
С сессией PHPSESSID=420d4b8912b0b74946010912f127aa44 вижу нормальную страницу для печати.
Без неё - дефолтная страница.
Проверяй, где-то у тебя куки то-ли не пишутся в файл, то ли не читаются.
 
Назад
Сверху