Так как последняя статья, которая на этом форуме была написана в 2к11 году, уже давным давно не актуальна, следует снова поднять эту тему и объяснить что к чему.
Если вы хотите просто посмотреть пример, в конце статьи ссылка на скачивание.
Будет много букв, так что если вы решили это дочитать, то возьмите чаек и вкусняшки.
На данный момент VK API предоставляет большие возможности в плане создания различных Standalone приложений.
Цитата:
Standalone в понимании контакта - то приложение, которое может получить из адресной строки браузера текст (а точнее - token). Ибо токен с расширенными правами можно получить только с сервера вконтакта (на него идёт редирект. Никаким js`ом его не вытащить, не имея доступа к браузеру )
ЧАСТЬ 1. РЕГИСТРАЦИЯ STANDALONE ПРИЛОЖЕНИЯ
Для начала мы должны зарегистрировать приложение. Заходим на сайт [Ссылки могут видеть только зарегистрированные пользователи. ], авторизируемся, и переходим на вкладку:"Мои приложения".
[Ссылки могут видеть только зарегистрированные пользователи. ]
Нажимаем:"Создать приложение", выбираем Standalone-приложение.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Название не играет роли.
Привязываем его к вашему устройству и вот, у вас есть собственное, никому не нужное приложение...
Опять переходим в:"Мои приложения". И нажимаем на кнопку:"Редактировать". Переходим в левом меню к настройкам.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Для нас, на данный момент основными являются id приложения и его защищенный ключ. Не закрываем эту страницу и переходим к теории.
ЧАСТЬ 2. OpenID, OAuth, Token, UserID.
Представь себе стандартную ситуацию. Заходишь на сайт, смотришь новости в интернете, следишь за долларом и нефтью, и очень хочешь оставить комментарий на каком нибудь сайте и тебе приходиться ввести «Имя», «Фамилию», «Логин», «Email», «Email еще раз», «Пароль», «Снова Пароль», «Прочитать правила и согласиться со всем что тут будет происходить» и «Капчу».
Но ведь люди не дураки, и придумали Open ID.
Если чуть-чуть проще, то для всех сайтов мы будем использовать один аккаунт. Вроде бы да, удобно, не нужно тысячу этих вводов Email и прочего, но с другой стороны если вдруг нас взломают, то скорее всего получат не только спам от ламоды. Такую систему ранее использовал Yandex.
Если это же рассказать своим языком, то мы можем отдавать свой аккаунт на пользование сторонним сайтам, но с ограниченными правами. Так как в данной статье будет использоваться именно он, поговорим о нем побольше.
Работает oAuth, если не вдаваться в подробности ,по такой схеме:
Получение авторизации
обращение к защищенным ресурсам
Результатом авторизации будет access token - ключ, который дает нам право пользоваться защищенными ресурсами.
VK поддерживает 3 способа передачи данного ключа:
Implicit flow - самый простой и быстрый способ.
Authorization code flow - Двухэтапная авторизация, которая возвращает ключ прямо на сервер, откуда и была запрошена.
Client credentials flow - это механизм прямой авторизации сервера приложения без участия пользователя.
В данной статье мы рассмотрим несколько способов авторизации.
Так же мы будем пользоваться библиотекой vknet, которая предоставит нам упрощенные методы авторизации и работы с API.
ЧАСТЬ 3. НАЧИНАЕМ ПИСАТЬ КОД
Решим последовательность действий для нашей программы.
На форме_1 расположить кнопку, которая будет загружать вторую форму. Это будет удобно ибо будет открываться WebBrowser, авторизация будет проходить в нем, мы получим token и свой id, после чего WebBrowser закроется и откроется основное меню программы.
Так как будет 2 формы, и с небольшим закосом на будущее, token и id будем сохранять в txt файле, рядом с программой.(Можно так же сделать записи в реестр, но мне больше нравиться такой способ)
Получать token и id мы будем из ссылки, значит, её нужно будет распарсить.
Получим имя и фамилию, которые записаны у нас вк и вывести её в label. Отправим сами себе сообщение, ведь мы программисты-одиночки
Создаем новый проeкт Windows Form и подключаем библиотеки.
VKNET подключаем через NuGet:
Создаем вторую форму и связываем с первой.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Так у нас выглядит первая форма. Создаем вторую и кидаем на неё WebBrowser. Пока с дизайном все, теперь сам код:
Подключаем директивы. В первой форме используемые мной это:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using VkNet;
Во второй:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
Запишем в первую форму основные переменные.
Код:
private static long UserId;
private static string Token = null;
Делаем обработчик при нажатии на кнопку.
Код:
private void button1_Click(object sender, EventArgs e)
{
VkAuth(null, null); // код кнопки, он будет обрабатывать функцию
}
Тут мы вставляем ссылку, по которой будем получать token и UserId.
client_id - ваш id приложения. Необходимо поменять, но можете и моим воспользоваться.
redirect_uri - url, на который мы перейдем после авторизации. Именно в этой ссылке передается Token и UserId.
scope - Права, которые предоставит нам token. Полный список можете посмотреть [Ссылки могут видеть только зарегистрированные пользователи. ]
response_type - тип ответа, который мы хотим получить.
display - Как у нас будет отображаться страница авторизации.
v= - Версия API VK.
revoke - указывает, обязательно ли нужна авторизация, или её можно пропустить.
Теперь перейдем к Form2.
Укажем переменные, которые будут доступны всем функциям.
Код:
public static string token;
public static string id;
Создадим обработчик событий для WebBrowser.
Код:
string url = webBrowser1.Url.ToString(); //перевод ссылки в переменную
string l = url.Split('#')[1]; //
if (l[0] == 'a') //
{ //Тут происходит парсинг ссылки, после чего нужные нам переменные
token = l.Split('&')[0].Split('=')[1]; //записываются в 2 файла. Файлы лежат рядом с исполняемым файлом
id = l.Split('=')[3]; //
StreamWriter SW = new StreamWriter(new FileStream("User_ID.txt", FileMode.Create, FileAccess.Write));
SW.Write(id);
SW.Close();
StreamWriter SW2 = new StreamWriter(new FileStream("Token.txt", FileMode.Create, FileAccess.Write));
SW2.Write(token);
SW2.Close();
if (token != "")
{
this.Hide();
MessageBox.Show("Авторизация удалась"); //Небольшая проверка, смогли мы авторизоваться или нет.
}
}
Все! На этом весь процесс авторизации заканчивается. Теперь мы можем использовать VK API в полной мере.
ЧАСТЬ 4. ПРИВЕТ, VKNET.
На [Ссылки могут видеть только зарегистрированные пользователи. ] есть множество методов, а так же примеров запросов. Мы будем использовать users.Get и messages.send.
На первую форму накинем 2 кнопки и 1 label.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Создадим для 2-х кнопок обработку события.
Многие из методов уже устарели, а мы ведь не хотим становиться динозаврами? Поэтому мы будем сразу приучаться писать в ногу со временем.(Жаль, что глаза можно об этот код сломать).
Напишем в кнопку с отправкой сообщения вот такой код.
Код:
StreamReader UserIdGet = new StreamReader(File.Open("User_ID.txt", FileMode.Open));
UserId = Convert.ToInt64(UserIdGet.ReadLine());
UserIdGet.Close();
StreamReader TokenGet = new StreamReader(File.Open("Token.txt", FileMode.Open));
Token = TokenGet.ReadLine();
TokenGet.Close();
var vk = new VkApi();
vk.Authorize(Token, UserId, 0);
string text = "Привет, aloha, belisimo";
var col = vk.Messages.Send(new MessagesSendParams
{
UserId = UserId,
Message = "Привет, aloha, belissimo",
}); //https://vknet.github.io/vk/messages/send/
Единственное, что мы еще не разбирали, это последняя строка в функции. Именно для этого нам и нужен VKNET. Чтобы обходилось все более-менее просто и без лишних костылей.
UserId - Id пользователя, которому мы отсылаем сообщение.
Message - Текст сообщения.
Вроде бы, это все, что я хотел рассказать об этой теме.
Исходники программы - [Ссылки могут видеть только зарегистрированные пользователи. ].
Единственное что, данный метод съедает достаточно памяти. Её нужно очищать, а об этом уже вам придется позаботиться самим.
________________
Всё новое — это хорошо забытое старое
Последний раз редактировалось kingSizeShoe; 13.01.2017 в 02:32.
Причина: Подредактировал цвета у глав