Автоматическая авторизация вконтакте

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
Zzevvsess
Сообщения: 100
Зарегистрирован: 2011.08.19, 21:19
Откуда: Уральск
Контактная информация:

Автоматическая авторизация вконтакте

Сообщение Zzevvsess »

Привествую!
Хочу много контента спарсить с вк. Действую через API. Все хорошо, но вручную приходится прописывать ключи. Очень нужно автоматизировать, а не получается.
Что я сейчас пробую: беру форму входа которую мне присылают и иметирую ее ввод, но меня редирект кидает опять на туже форму. Как поступить?

Код: Выделить всё

<?php
// Простая функция обрезки
function cut($start, $stop, $str)
{
    //Поиск начала
    $spos = strpos($str, $start);
    //Удлиняем строку
    $spos = $spos + strlen($start);
    //Режем строку от этой позиции
    $text = substr($str, $spos);
    //Ищем конец в полученной строке
    $end_pos = strpos($text, $stop);
    //Режем по конечной позиции
    $text = substr($text, 0, $end_pos);
    //Возвращаем результат
    return $text;
}

$redirect_uri = $_SERVER['HTTP_HOST'] . '/vk.php';

if($_GET['code']) {
    $url = 'https://api.vk.com/oauth/access_token?client_id=3364365&client_secret=Aqd46ZyQCUqLMuxdjcH1&code=' .
        $_GET['code'] . '&redirect_uri=' . $redirect_uri;
} else
    if(!$access_token) {
        // Авторизуемся
        $url = 'https://oauth.vk.com/authorize?client_id=3364365&scope=friends,video,offline&redirect_uri=' .
            $redirect_uri . '&response_type=code';
    }


// КУРЛ!
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT,
    'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13');
curl_setopt($ch, CURLOPT_COOKIEFILE, './coockie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, './coockie.txt');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// получаем HTML в качестве результата
$output = curl_exec($ch);


if($_GET['code']) {
    $token = json_decode($output, true);
    $str = join(',', $token);
    file_put_contents(dirname(__file__) . '/../../access_toren.txt', $str);
    echo $str;
    die('Полный доступ!!');

} else
    if(!$access_token) {
        // Вот тут делаем автоматизация входа
        echo $output;


        $params['email'] = '************';
        $params['pass'] = '************';
        $params['ip_h'] = cut('name="ip_h" value="', '"', $output);
        $params['_origin'] = cut('name="_origin" value="', '"', $output);
        $params['to'] = cut('name="to" value="', '"', $output);
        $params['expire'] = cut('name="expire" value="', '"', $output);
        $url = cut('id="login_submit" action="', '"', $output);

        echo '<h1>Отправляю курл с пост наднными на адрес ' . $url . '</h1>
                <br />
                данные: <pre>', print_r($params), '</pre>
                <hr/>';

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

        $output = curl_exec($ch);
        if(curl_errno($ch)) {
            echo 'Curl error: ' . curl_error($ch);
        }

        echo $output;
        preg_match('/(Location:|URI:)(.*?)\n/', $output, $matches);

        curl_setopt($ch, CURLOPT_URL, trim($matches[2]));
        $output = curl_exec($ch);
        if(curl_errno($ch)) {
            echo 'Curl error: ' . curl_error($ch);
        }
        echo $output;

    }


 

http://turistamznat.ru/vk.php

Аватара пользователя
Zzevvsess
Сообщения: 100
Зарегистрирован: 2011.08.19, 21:19
Откуда: Уральск
Контактная информация:

Re: Автоматическая авторизация вконтакте

Сообщение Zzevvsess »

Вот форма

Код: Выделить всё

<form method="POST" id="login_submit" action="https://login.vk.com/?act=login&soft=1">
<input type="hidden" name="ip_h" value="3ecb02ef9c6c68dafc" />
<input type="hidden" name="_origin" value="https://oauth.vk.com">
<input type="hidden" name="to" value="aHR0cHM6Ly9vYXV0aC52ay5jb20vb2F1dGgvYXV0aG9yaXplP2NsaWVudF9pZD0zMzY0MzY1JnJlZGlyZWN0X3VyaT10dXJpc3RhbXpuYXQucnUlMkZ2ay5waHAmcmVzcG9uc2VfdHlwZT1jb2RlJnNjb3BlPTY1NTU0JnN0YXRlPSZkaXNwbGF5PXBhZ2U-">
<input type="hidden" id="expire" name="expire" value="0">
<input type="submit" class="submit">

<table class="login">
<tr>
<td class="label">Телефон или e-mail:</td>
<td><input type="text" name="email" value=""></td>
</tr>
<tr>
<td class="label">Пароль:</td>
<td><input type="password" name="pass"></td>
</tr>

<tr>
<td class="label"></td>
<td><div class="checkbox fl_l" id="expire_checkbox" onclick="checkbox(this)"><div></div>Чужой компьютер</div></td>
</tr>
</table>
</form>

  </div>
  </div>
</div>



<div class="bottom_buttons">
  <div class="button_gray fl_r"><button id="install_cancel" onclick="return cancel();">Отмена</button></div>
  <div class="button_blue fl_r"><button id="install_allow" onclick="return login();" type="submit">Войти</button></div>
  <br class="clear" />
</div>
Вот она отправляется через js

Код: Выделить всё

  function login() {
    ge('expire').value = (isChecked('expire_checkbox')) ? 1 : 0;
    ge('login_submit').submit();
    return false;
  }
не понимаю почему у cUrl не получается тоже самое.

Аватара пользователя
anagamin
Сообщения: 56
Зарегистрирован: 2012.01.19, 12:25

Re: Автоматическая авторизация вконтакте

Сообщение anagamin »

Немного не понял связь между:
Действую через API
и
беру форму входа которую мне присылают и иметирую ее ввод
Там же в OAuth авторизации совсем другая логика.

Аватара пользователя
Zzevvsess
Сообщения: 100
Зарегистрирован: 2011.08.19, 21:19
Откуда: Уральск
Контактная информация:

Re: Автоматическая авторизация вконтакте

Сообщение Zzevvsess »

Если вы имели вввиду http://vk.com/developers.php?oid=-1&p=% ... 0%B8%D1%8F вот этот метод, то тут закрыт доступ к видео.

Код: Выделить всё

$url = 'https://oauth.vk.com/access_token?client_id=3364365&client_secret=Aqd46ZyQCUqLMuxdjcH1&grant_type=client_credentials';

$token = file_get_contents($url);
$token = json_decode($token,true);

$url = 'https://api.vk.com/method/video.search?q=' . urlencode('Мой парень ангел') .
    '&access_token=' . $token['access_token'];
echo file_get_contents($url); 
Дает ответ - User authorization failed: method is unavailable with server auth. А мне видео какраз и нужно.

Если так http://vk.com/developers.php?oid=-1&p=% ... 0%BE%D0%B2, то тут надо вручную вводить данные пользователя, т.е. что и я и пытаюсь автоматизировать. Иначе я не знаю как сделать.

Аватара пользователя
anagamin
Сообщения: 56
Зарегистрирован: 2012.01.19, 12:25

Re: Автоматическая авторизация вконтакте

Сообщение anagamin »

Так можно же один раз авторизоваться вручную, а потом автоматически парсить сколько угодно.

Аватара пользователя
Zzevvsess
Сообщения: 100
Зарегистрирован: 2011.08.19, 21:19
Откуда: Уральск
Контактная информация:

Re: Автоматическая авторизация вконтакте

Сообщение Zzevvsess »

anagamin писал(а):Так можно же один раз авторизоваться вручную, а потом автоматически парсить сколько угодно.
С фильмами да, их не так уж и много 15000 фильмов. Но еще этот скрипт необходим для парсинга музыки, а песен около миллиона. Так работают еще генераторы дорвеев основанные на вк http://bigduglas.ru/soft/1-razrabotki/1 ... boblo.html, тут скрипт ходит в вк и парсит там контент для доров на автомате.
Так что мне без автоматизации не как.

Аватара пользователя
anagamin
Сообщения: 56
Зарегистрирован: 2012.01.19, 12:25

Re: Автоматическая авторизация вконтакте

Сообщение anagamin »

Нет, я не о том. Этот ввод данных зачем нужен? Чтобы привязан аккаунт пользователя к текущему app_id, чтобы app_id мог совершать действия от имени пользователя (искать видео, в данном случае). Стоит 1 раз привязать (если включить scope=offline, или как он там называется), и можно годами парсить все, что нужно.

Аватара пользователя
Zzevvsess
Сообщения: 100
Зарегистрирован: 2011.08.19, 21:19
Откуда: Уральск
Контактная информация:

Re: Автоматическая авторизация вконтакте

Сообщение Zzevvsess »

понял буду пробывать, извините что потревожил.

Аватара пользователя
anagamin
Сообщения: 56
Зарегистрирован: 2012.01.19, 12:25

Re: Автоматическая авторизация вконтакте

Сообщение anagamin »

Нет проблем) Я именно так и делал - один раз авторизовывался, а потом пользовал.

Аватара пользователя
jumper423
Сообщения: 61
Зарегистрирован: 2015.05.23, 02:30
Откуда: Тирасполь
Контактная информация:

Re: Автоматическая авторизация вконтакте

Сообщение jumper423 »

Может кому-то ещё пригодится. Как раз что врач прописал. Компонент для работы с API VK
Хотите купить дешёвый, быстрый и качественный VPS сервер, моим выбором стал Rootwelt. Всем советую, не прогадаете ;)

Ответить