Авторизация в контакте - убрать лишний код в скрипте

Тема в разделе "Как сделать...", создана пользователем Sergo_Sev, 15 сен 2013.

  1. Sergo_Sev

    Sergo_Sev Творец

    Регистр.:
    14 июн 2008
    Сообщения:
    571
    Симпатии:
    188
    Нашел рабочий код для авторизации в контакте, который нужно использовать, что бы спарсить список адресов

    Как я понял, скрипт работает так - авторизация >>> берем первую страницу, снова авторизация >>> берем вторую и т.д. но если мы уже авторизованы и у нас записаны cookie, то логична такой порядок - авторизация >>> берем первую страницу, берем вторую и т.д.
    В общем подскажите решение по этому вопросу и еще - cookie для должны быть вида
    Код:
    .vk.com    TRUE    /    FALSE    1410257008    remixlang    0
    #HttpOnly_.login.vk.com    TRUE    /    TRUE    1410257008    p    ******************************************
    .vk.com    TRUE    /    FALSE    1410257008    remixsid    **************************************
    
    Но remixsid не записывается, приходится брать из браузера (remixsid кажется выдается перед авторизацией, в отличии от ого, что сохраняется в cookie.txt)

    PHP:
    // Функция, которая позволяет нам переходить по редиректам с включенной опцией open_basedir
    function curl_redirect_exec($ch$redirects 0$curlopt_returntransfer true$curlopt_maxredirs 10$curlopt_header false) {
        
    curl_setopt($chCURLOPT_HEADERtrue);
        
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
        
    $data curl_exec($ch);
        
    $http_code curl_getinfo($chCURLINFO_HTTP_CODE);
        
    $exceeded_max_redirects $curlopt_maxredirs $redirects;
        
    $exist_more_redirects false;
        if (
    $http_code == 301 || $http_code == 302) {
            if (
    $exceeded_max_redirects) {
                list(
    $header) = explode("\r\n\r\n"$data2);
                
    $matches = array();
                
    preg_match('/(Location:|URI:)(.*?)\n/'$header$matches);
                
    $url trim(array_pop($matches));
                
    $url_parsed parse_url($url);
                if (isset(
    $url_parsed)) {
                    
    curl_setopt($chCURLOPT_URL$url);
                    
    $redirects++;
                    return 
    curl_redirect_exec($ch$redirects$curlopt_returntransfer$curlopt_maxredirs$curlopt_header);
                }
            }
            else {
                
    $exist_more_redirects true;
            }
        }
        if (
    $data !== false) {
            if (!
    $curlopt_header)
                list(,
    $data) = explode("\r\n\r\n"$data2);
            if (
    $exist_more_redirects) return false;
            if (
    $curlopt_returntransfer) {
                return 
    $data;
            }
            else {
                echo 
    $data;
                if (
    curl_errno($ch) === 0) return true;
                else return 
    false;
            }
        }
        else {
            return 
    false;
        }
    }


    function 
    f1$url)
        {
    $user_agent 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) ' .
                
    'Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)';

    $cookie '';

    $login 'user_name@mail.ru';
    $password 'password';

    $ch curl_init();

    // чтобы сайт думал, что мы - браузер:
    curl_setopt($chCURLOPT_USERAGENT$user_agent);

    // ответ сервера будем записывать в переменную
    curl_setopt($chCURLOPT_RETURNTRANSFER1);

    curl_setopt($chCURLOPT_TIMEOUT10);

    //curl_setopt($ch, CURLOPT_HEADER, 1);

    curl_setopt($ch,CURLOPT_REFERER,'http://m.vk.com/login?fast=1&hash=&s=0&to=');

    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
    curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);

    curl_setopt($chCURLOPT_COOKIEFILEdirname(__FILE__) . '/cookie.txt');
    curl_setopt($chCURLOPT_COOKIEJARdirname(__FILE__) . '/cookie.txt');

    curl_setopt($chCURLOPT_POSTfalse);

    curl_setopt($chCURLOPT_POSTtrue);
    curl_setopt($chCURLOPT_URL'https://login.vk.com/?act=login&from_host=m.vk.com&from_protocol=http&ip_h=&pda=1');

    $answer curl_redirect_exec($ch);

    //формируем запрос
    $post = array(
                
    'email' => $login,
                
    'pass' => $password
            
    );

    curl_setopt($chCURLOPT_POSTFIELDShttp_build_query($post));
    // собственно этот ответ сервера уже доказывает что мы авторизировались
    $answer curl_redirect_exec($ch);


    curl_setopt($chCURLOPT_POSTfalse);

    // укажем страницу, с которой мы получим данные для проверки. она может быть как с мобильного так и с основного сайта


    curl_setopt($chCURLOPT_URL$url);

    $answer curl_redirect_exec($ch);

    // echo $answer; // здесь уже обрабатываем ответ как нам нужно.

    curl_close($ch);

    return 
    $answer;
    }



      
    $array_url[] = "http://vk.com/albums-283";
      
    $array_url[] = "http://vk.com/club27191908";
     
    foreach(
    $array_url as $id => $url){

    echo 
    f1($url);

    }