Сайт о телевидении

Сайт о телевидении

» » Авторизоваться в контакте

Авторизоваться в контакте

Для чего этого необходимо? Для вызова некоторых функций Вконтакте, которые не доступны через API Вконтакте, или из-за существующий ограничений.

Раньше достаточно было отправить GET запрос на http://login.vk.com/?act=login передав параметры &email=*** (логин) и &pass=*** (пароль). С недавних пор авторизация не происходит, вместо этого производится переадрессация по адресу:

Http://vk.com/login.php?&to=&s=0&m=1&email=

Решение

Для того, чтобы произвести авторизацию необходимо отправить запрос на авторизацию по адресу https://login.vk.com/?act=login . Для этого нужно использовать POST запрос, в котором кроме логина и пароля необходимо указать следующие параметры:

Act: login role: al_frame ip_h: lg_h: email: <логин> pass: <пароль> expire: captcha_sid: captcha_key: _origin: http://vk.com q: 1

1. С помощью CURL открываем http://vk.com и парсим значения ip_h и lg_h . Простенькие регулярки будут иметь вид:

Preg_match("//i", $vk_html, $ip_h); preg_match("//i", $vk_html, $lg_h)

2. Передаем полученные значения вместе с остальными параметрами POST запросом на url https://login.vk.com/?act=login . В итоге запрос будет иметь приблезительно такой вид:

Https://login.vk.com/?act=login&ip_h=***&lg_h=***&role=al_frame&email=***&pass=***&expire=&captcha_sid=&captcha_key=&_origin=http://vk.com&q=1

3. Сохраняем куки в файл и вызываем необходимую страницу Вконтакте для парсинга, например https://vk.com/feed?section=photos

Curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");

Проделайте предварительно п.1 и п.2 вручную чтоб убедится что все работает, получив предварительно значения ip_h и lg_h через исходный код страницы (комбинация Ctrl+U в браузере). В результате вас должно перенаправить на пустую страницу, а в адресной строке должно содержатся некое значение __q_hash .

Продолжаем просвещать новичков. На этот раз затронем тему программирования. Программировать будем на php авторизацию вконтакте .

Рассмотрим возможные способы авторизации вконтакте на php .
Зачем может понадобиться авторизация вконтакте? Впринципе каждый решает сам. Для тех, кто совсем не может предположить зачем входит вконтакт с помощью php, подскажу – можно, к примеру отправить сообщение, вставить рисунок вместо графити или добавить кучу фоток в свой аккаунт.
Хватит лишних слов, переходим непосредственно к способам авторизации .

Способ 1. Отправляем обычный http get-запрос к серверу авторизации контакта login.vk.com и получаем в ответ идентификатор сессии:

$login = "ваше@мыло"; $pass = "password"; $ans = file_get_contents("http://login.vk.com/?email={$login}&pass={$pass}" . "&act=login&to=&from_host=m.vkontakte.ru&pda=1"); $sid = substr($ans, strpos($ans, ""s" value="")+11, 60); echo $sid;

Теперь, чтобы получить страницу, доступную только авторизованным пользователям можно воспользоваться этим кодом:

$cookie = "remixsid=" . $sid; $ch = curl_init("http://m.vkontakte.ru/"); curl_setopt($ch, CURLOPT_COOKIE, $cookie); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $answer = curl_exec($ch); curl_close($ch);

В итоге в переменной $answer будет содержимое страницы. Можете делать с ним все что нужно

Здесь будет немного больше кода, но эффект будет аналогичным – мы получим версию страницы, доступную после авторизации вконтакте.

Привожу сразу код с пояснениями:

$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 = "ваше@мыло"; $password = "пароль"; $ch = curl_init(); // true т.к. мы будем отправлять post запрос: curl_setopt($ch, CURLOPT_POST, true); // чтобы сайт думал, что мы - браузер: curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); // ответ сервера будем записывать в переменную curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 10); // по редиректам будем переходить автоматически. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_URL, "http://login.vk.com/?act=login"); //Формирование запроса таким образом, я счел более наглядным $post = array("act" => "login", "q" => "", "al_frame" => "1", "expire" => "", "captcha_sid" => "", "captcha_key" => "", "from_host" => "vkontakte.ru", "email" => $login, "pass" => $password); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); $answer = curl_exec($ch); /* В $answer нам приходит javascript, который и устанавливает куки с названием: remixsid Нам нужно cпарсить эти 60 символов, идентификатора сессии. с помощью них vkontakte поймет, что мы авторизировались.*/ $sid = substr($answer, strpos($answer, "setCookieEx("sid", "") + 20, 60); $cookie = "remixsid=" . $sid; curl_setopt($ch, CURLOPT_POST, false); curl_setopt($ch, CURLOPT_COOKIE, $cookie); // укажем страницу, с которой мы получим данные для проверки curl_setopt($ch, CURLOPT_URL, "http://vkontakte.ru/"); $answer = curl_exec($ch); echo $answer; curl_close($ch);

В переменной $answer окажется содержимое страницы. С ним также вы можете делать все что вам угодно

Здравствуйте, дорогие друзья! Как-то недавно мне потребовалось сделать на одном из своих сайтов вход через «вконтакте». Это очень удобно, так как нет необходимости в регистрации на самом сайте, а сразу же пользоваться всеми его возможностями со своего аккаунта «вконтакте». Пришлось вникать в тонкости для осуществления этой задачи. Кстати, к слову сказать, в самой официальной документации по ВК API написано немного, да и всё очень запутано.

Итак, для того чтобы начать пользовать ВК API, нам нужно создать новое приложение «Вконтакте». Делаем это так: переходим по ссылке: http://vk.com/editapp?act=create , выбираем «веб-сайт», вводим имя нашего приложения, а также адрес сайта, к которому оно привязано и базовый домен нашего сайта.

После создания, нам стали известны ID нашего созданного приложения, а также секретный код, который потому и «секретный» что не стоит его публиковать, следовательно ниже написанный id и secret code вымышленные.:)

ID: 3328234
Secret Code: Q5f2PSwkiFw23TysdDgr

Теперь начинаем «кодить». Создаём файл «vklogin.php», например, в корне сайта. А шаблон или код вставляем следующую ссылку:

https://oauth.vk.com/authorize?client_id=3328234&scope=1&redirect_uri=http://www.mydomain.ru/vklogin.php&response_type=code

Это может быть текстовая ссылка на сайте, ссылка-картинка или даже переадресация из js скрипта. Главное, что нажав на неё, пользователь перешёл по этом адресу. Теперь о передаваемых параметрах: client_id – это идентификатор нашего приложения ВК, redirect_uri – адрес на нашем сайте, куда будет переадресован пользователь, после получения прав «Вконтакте», response_type – это тип авторизации, который в нашем случае с использование кода. После перехода по данной ссылки, пользователь увидит следующую страницу сайта «Вконтакте»:


После того как пользователь нажмёт «Разрешить», тем самым делегирует права вашему сайту, он будет переадресован на наш скрипт «vklogin.php». Далее привожу сам скрипт, пояснение позже.

‹?php $VK_APP_ID = "3328234"; $VK_SECRET_CODE = " Q5f2PSwkiFw23TysdDgr "; if(!empty($_GET["code"])) { $vk_grand_url = "https://api.vk.com/oauth/access_token?client_id=".$VK_APP_ID."&client_secret=".$VK_SECRET_CODE."&code=".$_GET["code"]."&redirect_uri=http://www.mydomain.ru/vklogin.php"; // отправляем запрос на получения access token $resp = file_get_contents($vk_grand_url); $data = json_decode($resp, true); $vk_access_token = $data["access_token"]; $vk_uid = $data["user_id"]; // обращаемся к ВК Api, получаем имя, фамилию и ID пользователя вконтакте // метод users.get $res = file_get_contents("https://api.vk.com/method/users.get?uids=".$vk_uid."&access_token=".$vk_access_token."&fields=uid,first_name,last_name,nickname,photo"); $data = json_decode($res, true); $user_info = $data["response"]; echo $user_info["first_name"]." ".$user_info["last_name"]."
"; echo "‹img .$user_info["photo"]."" border="0" /›"; } ?›

Итак, с переменными ID и Sercet Code думаю всё ясно. Далее проверяем, передали ли нам ВК при редиректе параметр «code», который мы добавляем во вновь созданный url и опять обращаемся к «контакту», но уже напрямую из нашего скрипта. Для этого используем функцию «file_get_contents».

На данном этапе, следует заострить внимание на нескольких важных замечаниях:

1. Данный код врят-ли получится тестировать на локальном сервере(например, на «Дервере»), а также, на используемом сервере, в настройка php.ini, директива «allow_url_fopen» должна быть установлена в «1».
2. На используемом сервере должен быть установлено расширение json для PHP.
3. И самое коварное, на чём я споткнулся. Параметры «redirect_uri» в обоих запросах к API, должны быть абсолютно одинаковыми.

Осталось только упомянуть о самой работе с ВК API. Как вы заметили, после второго запроса к ВК, мы получили параметры «access_token» и «user_id». На данном этапе мы уже авторизированны на ВК и можем обращаться к API, используя 2 эти переменные.

В последнем запросе к ВК API, мы используя метод «users.get», получаем имя пользователя ВК, фамилию, а также ID пользователя и просто выводим их. Для конкретной реализации логина на сайте через ВК, всё зависит от используемой CMS. Если у Вас собственноручно написанная CMS, вы может поступить следующий образом. Например, сохранять ID пользователя в сессионных переменных $_SESSION[‘vk_id’] и $_SESSION[‘vk_login’] предварительно обнулив первую. И проверят авторизацию пользователя по значению «vk_id».

Более подробно, о работе с ВК API вы сможете прочитать, по следующим ссылкам:

Официальная документация по ВК API.

Доброго времени суток уважаемые читатели! Сегодня мы с вами поговорим про API ВКонтакте, точней об использовании API в Delphi. Я буду использовать в этой статье Delphi 2010, в принципе вам ее использовать не обязательно, данный материал будет применим к любой версии Delphi. И так, сегодня мы с вами рассмотрим метод авторизации в VK.COM с помощью indy, настройку компонентов indy для работы с API VK. На самом деле все очень-очень просто и 100 раз находится в гуглояндексе и других поисковиках. Но большинство из них написаны еще под vkontakte.ru, API тогда естественно было другое. Ну да ладно, давайте начинать. Для начала нам понадобятся компоненты:

  • IdHTTP
  • IdSSLIOHandlerSocketOpenSSL
  • IdCookieManager

Ну и стандартно:

  • TLabel
  • TEdit
  • TButton

Настраиваем компоненты

ВАЖНО! В папку с исполнительным файлом программы копируем эти DLL

Они есть в архиве к этому материалу.
И так, настройка компонентов для авторизации вконтакте завершена, необходимые DLL библиотеки скопированы, теперь напишем немного кода.

Procedure TForm1.Button1Click(Sender: TObject); var TmpStr: string ; json: TJSONObject ; client_id ,client_secret: string ; Token, IdUser: string ; begin client_id:= Ваш ID полученный на сайте Вконтакте; client_secret:= Секрет от туда же; try TmpStr:= IdHTTP.Get("https://oauth.vk.com/token?grant_type=password&client_id="+client_id+"&client_secret="+client_secret+"&username="+EdtEmail.Text+"&password="+EdtPass.Text); except on E: Exception do begin MessageBox(Application.Handle, PChar(Format("Ошибка: %s",)), "Error", MB_ICONHAND); exit ; end; end; json:= TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(TmpStr),0) as TJSONObject; Token:= json.Get(0).JsonValue.ToString; Token:= StringReplace(Token, """, "", ); IdUser:= json.Get(2).JsonValue.ToString; end;

я осознанно опускаю ту часть в которой обычно рассказывают про то как получить ID и секрет от вконтакте, это вы уже читали в предыдущих постах. У нас же будет только самое необходимое, не какого левого материала).
Объясню код:
Первое что вы наверное не видели в других уроках это json: TJSONObject, да да, я правильно разбираю ответы от сервера, так как того просит религия;). Другими словами это правильная переменная для хранения ответа от сервера на наш GET запрос. Инициализируется она просто: json:= TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(TmpStr),0) as TJSONObject; поля вытащить из нее тоже не составляет большого труда: Token:= json.Get(0).JsonValue.ToString;
Токен и айди пользователя нужны для дальнейшего выполнения API функций, о которых мы поговорим с вами в следующих статьях.
Ну собственно и все на этом по коду. Проверку авторизации не делаю, оставляю это вам)))

Иногда случается так, что вам нужно зайти на сайт ВКонтакте, но из данных аккаунта у вас имеется только access_token. Никаких логинов или паролей, и даже не hash, только токен. Как тогда быть? ВКонтакте не предоставляет возможности авторизовываться таким образом, поэтому мы отыскали несколько хитрых способов заходить в ВК через акцесс в обход самой социальной сети.


Заходим на сайт сервиса VKApi: vkapi.zf-projects.ru и проходим авторизацию через любой аккаунт ВКонтакте, от которого у вас имеется логин или пароль. Как только закончили, открываем Cookie Manager. Справа в окне Domains ищем сайт vkapi.zf-projects.ru и кликаем на него. Затем в центре в окне Cookies находим строку с заголовком token и кликаем, после чего справа, ищем поле Value , удаляем из него токен от текущего аккаунта (с которого авторизовались) и вставляем токен от аккаунта, на который нужно зайти. Сохраняем изменения кнопкой Save (дискетка). Готово! После обновления страницы на VKApi произойдёт переавторизация на новый аккаунт!
Заключение
В заключение хочу добавить, что для авторизации в самом ВКонтакте одного лишь акцесса недостаточно. Но его более чем достаточно, чтобы читать и отправлять сообщения, просматривать и оценивать фотографии, прослушивать музыку и много другое при помощи сервисов APIdog и VKApi.