Php пост в odnoklassniki

Тема в разделе "PHP", создана пользователем tltzzz, 13 апр 2012.

Модераторы: latteo
  1. tltzzz

    tltzzz Писатель

    Регистр.:
    25 июл 2011
    Сообщения:
    7
    Симпатии:
    0
    Кто подскажет как автоматически сделать пост на odnoklassniki.ru

    может кто видел библиотеку такую или знает где её купить ?
     
  2. shaen

    shaen Постоялец

    Регистр.:
    23 июн 2011
    Сообщения:
    51
    Симпатии:
    9
    Готового решения не встречал. Смотрите их документацию по api.

    Документация по API (только она мягко говоря хреновая)

    http://dev.odnoklassniki.ru/wiki/display/ok/Odnoklassniki+Rest+API
     
  3. tltzzz

    tltzzz Писатель

    Регистр.:
    25 июл 2011
    Сообщения:
    7
    Симпатии:
    0
    смотрел уже. Это через приложение, а его фиг создашь у них.
     
  4. DrakonHaSh

    DrakonHaSh

    Регистр.:
    29 июн 2010
    Сообщения:
    358
    Симпатии:
    122
    а что мешает отправить сообщение вручную, подсмотреть куки и прочие моменты в сниффере и на php через curl сделать то же самое ?
     
  5. might2012

    might2012 Создатель

    Регистр.:
    12 апр 2012
    Сообщения:
    10
    Симпатии:
    0
    Юзай curl и API одноклассников
     
  6. shaen

    shaen Постоялец

    Регистр.:
    23 июн 2011
    Сообщения:
    51
    Симпатии:
    9
    А как Вы id сессии подставите, что бы проверку проити?
     
  7. DrakonHaSh

    DrakonHaSh

    Регистр.:
    29 июн 2010
    Сообщения:
    358
    Симпатии:
    122
    shaen
    чем запросы браузера отличаются от запросов на curl ? - при желании ничем
    если что-то можно делать через браузер, то же самое можно делать и через curl - надо лишь проснифать протокол общения между браузером и сайтом.

    любой id, как правило, можно получить съэмулировав вход(логин/пасс) пользователя в систему.
     
  8. shaen

    shaen Постоялец

    Регистр.:
    23 июн 2011
    Сообщения:
    51
    Симпатии:
    9
    PHP:
    <?php
     
    class Odnoklassniki_API {
     
        public function 
    __construct($email$passwd)
        {
            
    $this->email $email;
            
    $this->passwd $passwd
     
            if (isset(
    $this->email) && isset($this->passwd))
            {
                
    // autenticate the user
                
    if ( ! $this->authenticate())
                {
                    throw new 
    Exception('Failed to authenticate, please check your email and password.');
                }
            }     
        }
     
        private function 
    authenticate()
        { 
            
    $postdata = array(
                
    'st.email'        => $this->email,
                
    'st.password'    => $this->passwd,
                
    '...'            => '...'
            
    );
         
            
    $response $this->post_to("http://www.odnoklassniki.ru"$postdata);
     
            
    //process the response;
            
    if ($response)
            {
                
    // Проверка ответа  authenticate?
     
                
    var_dump($response);
     
                return 
    true;
     
            }
     
            return 
    false
        }
     
        private function 
    post_to($url$data=array(), $header=array())
        {
         
            
    //check that the url is provided
            
    if ( ! isset($url))
            {
                return 
    FALSE;
            }
         
            
    //send the data by curl
            
    $ch curl_init();
            
    curl_setopt($chCURLOPT_URL$url);
            
    curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
            
    curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);
         
            if (
    count($data) > 0)
            {
                
    //POST METHOD
                
    curl_setopt($chCURLOPT_POSTTRUE);
                
    curl_setopt($chCURLOPT_POSTFIELDS$data);
            }
            else
            {
                
    $header[] = array("application/x-www-form-urlencoded");
                
    curl_setopt($chCURLOPT_HTTPHEADER$header);
            }
         
            
    $response curl_exec($ch);
            
    $info curl_getinfo($ch);
         
            
    curl_close($ch);
         
            if(
    $info['http_code'] == 200)
            {
                return 
    $response;
            }
            elseif (
    $info['http_code'] == 400)
            {
                throw new 
    Exception('Bad request - '.$response);
            }
            elseif (
    $info['http_code'] == 401)
            {
                throw new 
    Exception('Permission Denied - '.$response);
            }
            else
            {
                return 
    FALSE;
            }
         
        }
    Вот вам простой класс для авторизации через curl у меня съэмулировать не получилось, мне кажется без API не обойтись
     
  9. DrakonHaSh

    DrakonHaSh

    Регистр.:
    29 июн 2010
    Сообщения:
    358
    Симпатии:
    122
    вы проснифали протокол общения между браузером и однокласниками ? видно что нет.
    если же его проснифать и определить необходимые пункты, то этот протокол можно съэмулировать курлом.

    для задач ТС согласен, что проще юзать API, чем собирать свой "велосипед". но он написал что API он юзать [не "хочет"]/[не может]
     
  10. shaen

    shaen Постоялец

    Регистр.:
    23 июн 2011
    Сообщения:
    51
    Симпатии:
    9
    PHP:
    class Odnoklassniki_API {
     
        public function 
    __construct($email$passwd)
        {
            
    $this->email $email;
            
    $this->passwd $passwd;
     
            
    $this->user_agent $_SERVER['HTTP_USER_AGENT'];
     
            if (isset(
    $this->email) && isset($this->passwd))
            {
                
    // autenticate the user
                
    if ( ! $this->authenticate())
                {
                    throw new 
    Exception('Failed to authenticate, please check your email and password.');
                }
            } 
        }
     
        private function 
    authenticate()
        {
            
    $postdata = array(
                  
    'st.redirect'      => '',
                  
    'st.posted'      => 'set',
                  
    'st.email'          => $this->email,
                  
    'st.password'      => $this->passwd,
                  
    'st.screenSize'  => '',
                  
    'st.browserSize' => '',
                
    'st.flashVer'      => ''
              
    );
     
            
    $response $this->post_to("http://www.odnoklassniki.ru/dk?cmd=AnonymLogin&amp;st.cmd=anonymLogin&amp;tkn=2039"$postdata);
     
            
    //process the response;
            
    if ($response)
            {
                
    // Проверка ответа  authenticate?
     
                
    var_dump($response);
     
                return 
    true;
     
            }
     
            return 
    false;
        }
     
        private function 
    post_to($url$data=array())
        {
     
            
    //check that the url is provided
            
    if ( ! isset($url))
            {
                return 
    false;
            }
     
            
    //send the data by curl
            
    $ch curl_init();
            
    curl_setopt($chCURLOPT_USERAGENT$this->user_agent);
            
    curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
            
    curl_setopt($chCURLOPT_COOKIEFILEdirname(__FILE__) . '/cookie.txt');
            
    curl_setopt($chCURLOPT_COOKIEJARdirname(__FILE__) . '/cookie.txt');
            
    curl_setopt($chCURLOPT_HEADERtrue);
            
    curl_setopt($chCURLOPT_TIMEOUT10);
            
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
            
    curl_setopt($chCURLOPT_URL$url);     
     
            if (
    count($data) > 0)
            {
                
    //POST METHOD
                
    curl_setopt($chCURLOPT_POSTtrue);
                
    curl_setopt($chCURLOPT_POSTFIELDShttp_build_query($data));
            }
     
            
    $response curl_exec($ch);
     
            
    curl_close($ch);
     
            return 
    $response
        
    }
    Да вы оказались правы авторизоваться можно и через curl, но через api еще проще, при необходимости можно допилить эту заготовку