Помогите подправить скрипт авторизации вконтакте

Discussion in 'PHP' started by namez2, 25 Feb 2011.

  1. namez2

    namez2 New Member

    Joined:
    23 Aug 2010
    Messages:
    45
    Likes Received:
    1
    Reputations:
    0
    Добрый день уважаемые!
    Перестал работать скрипт авторизации в контакте (выдает неправильное имя или пароль), видимо изменился способ авторизации. Прошу помочь указать на ошибки...
    PHP:
    <?php
    class Vkontakte{
        public  
    $cookies;
        
    //Конструктор класса
        //Для начала работы с контактом необходимо авторизоваться
        
    function __construct($login,$pass){
            
    //Проверяем наличие установленной библиотеки курл
            
    if(!function_exists('curl_init')){
                die(
    "Для работы необходимо установить lib_curl");
            }
            
    //Устанавливаем язык интерфейса
            
    $remixlang='0';

            
    //Отправляем логин и пароль
            
    $url 'http://login.vk.com/?act=login';
            
    $ch curl_init();
            
    curl_setopt($chCURLOPT_URL$url);
            
    curl_setopt($chCURLOPT_HEADER1);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
            
    curl_setopt($chCURLOPT_USERAGENT,"Opera/9.20 (Windows NT 5.1; U; ru)");
            
    curl_setopt($chCURLOPT_POST1);
            
    curl_setopt($chCURLOPT_POSTFIELDS"email=".$login."&pass=".$pass."&expire=&vk=");
            
    curl_setopt($chCURLOPT_REFERER"http://vkontakte.com/index.php");
            
    curl_setopt($chCURLOPT_FOLLOWLOCATION,1);
            
    //////////////////////////////////////////
            //Получаем необходимый результат
            
    $result curl_exec($ch);

            
    $str = new MyStr();

            
    //Вырезаем кукис
            
    $cookies $str->StGetCookiesFromHeader($result,";");
            
    //?act=login после получения логина и пароля отдает страницу с формой,
            //которая содержит сессию в скрытом поле, и редиректит на login.php. Он устанавливает
            //Куку remixsid. Вырежем куку

            
    $pattern "#name='s'.*value='(.*)'#U";
            
    preg_match($pattern,$result,$arr);
            
    $remixsid = @$arr[1];

            
    //И таскать будем все куки в переменной cookies
            
    $this->cookies .=$cookies."remixsid=".$remixsid.";remixlang=".$remixlang;
        }

        function 
    CheckAuth(){

            
    $ch curl_init();
            
    curl_setopt($chCURLOPT_URL"http://vkontakte.ru/profile.php");
            
    curl_setopt($chCURLOPT_HEADER0);
            
    curl_setopt($chCURLOPT_COOKIE,$this->cookies);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
            
    curl_setopt($chCURLOPT_USERAGENT,"Opera/9.20 (Windows NT 5.1; U; ru)");
            
    $result curl_exec($ch);
            if(
    substr_count($result,"Моя Страница")>0){
                return 
    $result;
            }else{

                return 
    $result;
            }
        }
        function 
    ViewGroupPage($url){
            global 
    $cookies;
            
    $ch curl_init();
            
    curl_setopt($chCURLOPT_URL$url);
            
    curl_setopt($chCURLOPT_HEADER0);
            
    curl_setopt($chCURLOPT_COOKIE,$this->cookies);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
            
    $result curl_exec($ch);
            
    $patern "#Обсуждения\: <span>\((.*)\)<\/span>#i";
            if(
    preg_match($patern,$result,$arr)){
                echo 
    "В этой группе <b>".$arr[1]."</b> тем обсуждений<br>";
            }else{
                echo 
    "В данной группе нет обсуждений, либо вы не можете их просматривать";
                die();

            }



        }
        function 
    ParseDialogs($url,$msg_count,$offset "",$timeout=0){

            
    //echo $url;
            //echo $cookies;
            
    $ch curl_init();
            
    curl_setopt($chCURLOPT_URL$url);
            
    curl_setopt($chCURLOPT_HEADER0);
            
    curl_setopt($chCURLOPT_COOKIE,$this->cookies);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
            
    $result curl_exec($ch);
            
    $pattern_topic_title '#id="topic_title">(.*)<\/a>#U';
            
    preg_match($pattern_topic_title,$result,$arr_topic_title);
            
    $out['topic_title'] = $arr_topic_title[1];
            
    $patern '#<a href="topic-.*?offset=(.*)" onclick="return getPage\((.*)\)">&raquo;<\/a>#i';
            
    preg_match($patern,$result,$arr);
            
    //echo "Всего сообщений <b>".$arr[2]."</b><br>";
            
                
    $last_page $offset/20;

            for(
    $i=0;$i<=$last_page;$i++){
                
    $ch curl_init();
                
    curl_setopt($chCURLOPT_URL$url."?offset=".$i*20);
                
    curl_setopt($chCURLOPT_HEADER0);
                
    curl_setopt($chCURLOPT_COOKIE,$this->cookies);
                
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
                
    $result curl_exec($ch);
                
    $patern_post '#<div class="postMessage" id=".*" style=".*">(.*)<\/div>#U';
                
    preg_match_all($patern_post,$result,$arr_post);
                
    $patern_ts '#<span class="postAuthor"><a href="(.*)">(.*)<\/a><\/span>#i';
                
    preg_match_all($patern_ts,$result,$arr_ts);
                
    $patern_image_url '#<a href="id[0-9]+">
         <img src="(.*)" alt=""\/>
        </a>#i'
    ;
                
    $patern_timestamp '#<span class="timestamp">(.*)<\/span>#i';
                
    preg_match_all($patern_timestamp,$result,$arr_timestamp);
                
    preg_match_all($patern_image_url,$result,$arr_image_url);
                
    //print_r($arr[1]);
                
    $out['timestamp'][$i] = $arr_timestamp[1];
                
    $out['posts'][$i] = $arr_post[1];
                
    $out['author_nickname'][$i] = $arr_ts[2];
                
    $out['author_id'][$i] = $arr_ts[1];
                
    $out['image_url'][$i] = $arr_image_url[1];
    if(
    $timeout){
                        
    sleep($timeout);
                    }

            }
            return 
    $out;

            
    /*else{

            }*/
        
    }
    function 
    VkSendPostFields($url,$post_fields,$refer 'http://vkontakte.com/index.php'){
            
    $ch curl_init();
            
    curl_setopt($chCURLOPT_URL$url);
            
    curl_setopt($chCURLOPT_HEADER1);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
            
    curl_setopt($chCURLOPT_USERAGENT,"Opera/9.20 (Windows NT 5.1; U; ru)");
            
    curl_setopt($chCURLOPT_COOKIE,$this->cookies);
            
    curl_setopt($chCURLOPT_POST1);
            
    curl_setopt($chCURLOPT_POSTFIELDS$post_fields);
            
    curl_setopt($chCURLOPT_REFERER$refer);
            
    curl_setopt($chCURLOPT_FOLLOWLOCATION,1);
            
    $result curl_exec($ch);
            return 
    $result;
        }

        function 
    GetThemes($url,$themes_count){
            
    $ch curl_init();
            
    curl_setopt($chCURLOPT_URL$url);
            
    curl_setopt($chCURLOPT_HEADER0);
            
    curl_setopt($chCURLOPT_COOKIE,$this->cookies);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
            
    $result curl_exec($ch);
            
    $pattern '#<a href=".*\/board([0-9]*)">(.*)<\/a>#U';
            
    preg_match($pattern,$result,$arr);
            
            
    $board_link 'http://vkontakte.ru/board'.$arr[1];
            
    $group_id $arr[1];
            
    //$themes_count = intval($arr[2]);
            
            
    $loop_count floatval($themes_count/50);
            if(
    $loop_count%50>0){
                
    $loop_countintval($loop_count)+1;
            }
            for(
    $i=0;$i<$loop_count;$i++){
                
    $offset $i*50;
                
    $post_fields ='offset='.$offset.'&order=0';
                
    $url 'http://vkontakte.ru/board.php?act=a_get_topics_page&gid='.$group_id;
                
    $result $this->VkSendPostFields($url,$post_fields);
                
                
    //<h3 class=\"topicTitle\"><a href=\"topic-1622_11811924\">Nokia N76<\/a>
                
    $pattern '#<h3.*><a href=[\\\]"(.*)[\\\]">(.*)<[\\\]\/h3>#U';
                
    preg_match_all($pattern,$result,$arr);
                
    $out[] = $arr[1];
            }

            for(
    $i=0;$i<count($out);$i++){
                for(
    $a=0;$a<count($out[$i]);$a++){
                    
    $newout[]=$out[$i][$a];
                }

            }
            return 
    $newout;
        }


    }

    ?>
     
    #1 namez2, 25 Feb 2011
    Last edited: 25 Feb 2011