Vk api получить токен

Приветствую тебя, дорогой читатель! В статье описан процесс создания простейшего WindowsForms приложения, которое будет работать с API социальной сети «ВКонтакте».

Задачи приложения:

  1. Получить User Token и выполнять все дальнейшие запросы с помощью него.
  2. Получить на вход ID пользователя.
  3. Вывести информацию о пользователе с введённым ID.

Для удобства я буду использовать две библиотеки:

  • xNet — для произведения GET-запросов.
  • JSON.Net — для считывания ответов на эти запросы.

Можно приступать к созданию приложения, заходим в VisualStudio и создаём новое WindowsForms приложение.

Подключаем библиотеки
Библиотека JSON.Net подключается с помощью консоли диспетчера пакетов, достаточно ввести команду:

Install-Package Newtonsoft.Json

Для подключения библиотеки xNet нам потребуется зайти сюда, скачать xNet.dll и добавить его в проект с помощью менеджера ссылок.

После подключения библиотек создаём две формы: MainForm (Можно использовать стандартную Form1) и AuthorizationForm. Формы выглядят так:

Автопостинг ВК | Получение access token, выполнение запроса, извлечение шуток

MainForm

AuthorizationForm
Эта форма состоит из элемента WebBrowser с параметром Name = GetToken.

Создадим ещё один файл класса. Назовём его VkAPI.

Приступаем к написанию кода.

Для начала реализуем получение токена. Для этого в MainForm создадим обработчик нажатия на кнопку Button_GetToken:

private void Button_GetToken_Click(object sender, EventArgs e)
using System; using System.Windows.Forms; using System.IO; namespace VkAPITutorial < public partial class AuthorizationForm : Form < public AuthorizationForm() < InitializeComponent(); >private void AuthorizationForm_Load(object sender, EventArgs e) < GetToken.DocumentCompleted += GetToken_DocumentCompleted; GetToken.Navigate(«https://oauth.vk.com/authorize?client_id=»+ VkAPI.__APPID +»redirect_uri=https://oauth.vk.com/blank.htmlresponse_type=token); >private void GetToken_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) < if (GetToken.Url.ToString().IndexOf(«access_token=») != -1) < GetUserToken(); >> private void GetUserToken() < char[] Symbols = < ‘=’, ‘; string[] URL = GetToken.Url.ToString().Split(Symbols); File.WriteAllText(«UserInf.txt», URL[1] + «n»); File.AppendAllText(«UserInf.txt», URL[5]); this.Visible = false; > private void GetToken_DocumentCompleted_1(object sender, WebBrowserDocumentCompletedEventArgs e)<> > >

Теперь разберём всё по порядку:

При нажатии на кнопку открывается AuthorizationForm с Web-браузером, в браузере открывается ссылка:

https://oauth.vk.com/authorize?client_id=ApplicationIDredirect_uri=https://oauth.vk.com/blank.htmlresponse_type=token using xNet; using Newtonsoft.Json; namespace VkAPITutorial < class VkAPI < public const string __APPID = «APPLICATION_ID»; //ID приложения private const string __VKAPIURL = «https://api.vk.com/method/»; //Ссылка для запросов private string _Token; //Токен, использующийся при запросах public VkAPI(string AccessToken) < _Token = AccessToken; >public Dictionary GetInformation(string UserId, string[] Fields) //Получение заданной информации о пользователе с заданным ID < HttpRequest GetInformation = new HttpRequest(); GetInformation.AddUrlParam(«user_ids», UserId); GetInformation.AddUrlParam(«access_token», _Token); GetInformation.AddUrlParam(«v», «5.52»); string Params = «»; foreach (string i in Fields) < Params += i + «,»; >Params = Params.Remove(Params.Length — 1); GetInformation.AddUrlParam(«fields», Params); string Result = GetInformation.Get(__VKAPIURL + «users.get»).ToString(); Result = Result.Substring(13, Result.Length — 15); Dictionary Dict = JsonConvert.DeserializeObject(Result); return Dict; > public string GetCityById(string CityId) //Перевод ID города в название < HttpRequest GetCityById = new HttpRequest(); GetCityById.AddUrlParam(«city_ids», CityId); GetCityById.AddUrlParam(«access_token», _Token); GetCityById.AddUrlParam(«v», «5.52»); string Result = GetCityById.Get(__VKAPIURL + «database.getCitiesById»).ToString(); Result = Result.Substring(13, Result.Length — 15); DictionaryDict = JsonConvert.DeserializeObject(Result); return Dict[«name»]; > public string GetCountryById(string CountryId) //Перевод ID страны в название < HttpRequest GetCountryById = new HttpRequest(); GetCountryById.AddUrlParam(«country_ids», CountryId); GetCountryById.AddUrlParam(«access_token», _Token); GetCountryById.AddUrlParam(«v», «5.52»); string Result = GetCountryById.Get(__VKAPIURL + «database.getCountriesById»).ToString(); Result = Result.Substring(13, Result.Length — 15); DictionaryDict = JsonConvert.DeserializeObject(Result); return Dict[«name»]; > > >
using System; using System.Windows.Forms; using System.Collections.Generic; using System.IO; namespace VkAPITutorial < public partial class MainForm : Form < VkAPI _ApiRequest; private string _Token; //Токен, использующийся при запросах private string _UserId; //ID пользователя private Dictionary_Response; //Ответ на запросы public MainForm() < InitializeComponent(); >private void Button_GetToken_Click_1(object sender, EventArgs e) < AuthorizationForm GetToken = new AuthorizationForm(); GetToken.ShowDialog(); >private void MainForm_Load(object sender, EventArgs e) < try < StreamReader ControlInf = new StreamReader(«UserInf.txt»); _Token = ControlInf.ReadLine(); _UserId = ControlInf.ReadLine(); ControlInf.Close(); if (_Token != null) < _ApiRequest = new VkAPI(_Token); string[] Params = < «city», «country», «photo_max» >; _Response = _ApiRequest.GetInformation(_UserId, Params); if (_Response != null) < User_ID.Text = _UserId; User_Photo.ImageLocation = _Response[«photo_max»]; User_Name.Text = _Response[«first_name»]; User_Surname.Text = _Response[«last_name»]; User_Country.Text = _ApiRequest.GetCountryById(_Response[«country»]); User_City.Text = _ApiRequest.GetCityById(_Response[«city»]); Button_GetToken.Visible = false; >> > catch < >> private void Button_GetInformation_Click_1(object sender, EventArgs e) < try < StreamReader ControlInf = new StreamReader(«UserInf.txt»); _Token = ControlInf.ReadLine(); ControlInf.Close(); _ApiRequest = new VkAPI(_Token); _UserId = User_ID.Text; string[] Params = < «city», «country», «photo_max» >; _Response = _ApiRequest.GetInformation(_UserId, Params); if (_Response != null) < User_ID.Text = _UserId; User_Photo.ImageLocation = _Response[«photo_max»]; User_Name.Text = _Response[«first_name»]; User_Surname.Text = _Response[«last_name»]; User_Country.Text = _ApiRequest.GetCountryById(_Response[«country»]); User_City.Text = _ApiRequest.GetCityById(_Response[«city»]); Button_GetToken.Visible = false; >> catch < >> > >

Еще по теме:  Зачем меняют имя и фамилию Вконтакте в армии

При запуске приложение пытается считать токен и ID пользователя:

Получение токена пользователя в VK вконтакте для работы с API


StreamReader ControlInf = new StreamReader(«UserInf.txt»); _Token = ControlInf.ReadLine(); _UserId = ControlInf.ReadLine(); ControlInf.Close();

Если считывание прошло успешно, то приложение пытается произвести запрос информации о пользователе (Проверка токена на валидность):

_ApiRequest = new VkAPI(_Token); string[] Params = < «city», «country», «photo_max» >; _Response = _ApiRequest.GetInformation(_UserId, Params);

Если запрос успешен, то все поля в форме заполняются и кнопка GetToken становится неактивной:

User_ID.Text = _UserId; User_Photo.ImageLocation = _Response[«photo_max»]; User_Name.Text = _Response[«first_name»]; User_Surname.Text = _Response[«last_name»]; User_Country.Text = _ApiRequest.GetCountryById(_Response[«country»]); User_City.Text = _ApiRequest.GetCityById(_Response[«city»]); Button_GetToken.Visible = false;

Иначе кнопка GetToken активна, и при нажатии на неё срабатывает функция:

private void Button_GetInformation_Click(object sender, EventArgs e) < try < StreamReader ControlInf = new StreamReader(«UserInf.txt»); _Token = ControlInf.ReadLine(); ControlInf.Close(); _ApiRequest = new VkAPI(_Token); _UserId = User_ID.Text; string[] Params = < «city», «country», «photo_max» >; _Response = _ApiRequest.GetInformation(_UserId, Params); if (_Response != null) < User_ID.Text = _UserId; User_Photo.ImageLocation = _Response[«photo_max»]; User_Name.Text = _Response[«first_name»]; User_Surname.Text = _Response[«last_name»]; User_Country.Text = _ApiRequest.GetCountryById(_Response[«country»]); User_City.Text = _ApiRequest.GetCityById(_Response[«city»]); Button_GetToken.Visible = false; >> catch < >>

Теперь разберёмся как происходит GET-запрос. Сначала создаётся переменная:

HttpRequest GetInformation = new HttpRequest();

Далее в неё заносятся параметры:

GetInformation.AddUrlParam(«user_ids», UserId); GetInformation.AddUrlParam(«access_token», _Token); GetInformation.AddUrlParam(«v», «5.52»); string Params = «»; foreach (string i in Fields) < Params += i + «,»; >Params = Params.Remove(Params.Length — 1); GetInformation.AddUrlParam(«fields», Params);

И производится GET-запрос:

string Result = GetInformation.Get(__VKAPIURL + «users.get»).ToString();

Результат обрезается до строки, которую можно конвертировать:

Result = Result.Substring(13, Result.Length — 15);

Происходит конвертация json в словарь:

Dictionary Dict = JsonConvert.DeserializeObject(Result);

Источник: habr.com

Как получить токен вконтакте

Что такое токен ВКонтакте и почему все хотят его получить?

Токен ВКонтакте — это специальный ключ ВКонтакте, позволяющий тем или иным лицам получать доступ к приложениям, получать доступ к фотографиям, сообщениям, переписке. Токен известен только владельцу страницы. То есть после получения токена с определенными правами мы практически получаем доступ к странице.

Давно писал статью о том, как читать чужую переписку ВКонтакте с помощью токена, а вот о получении своего или чужого токена написал очень мало. Поэтому сегодня я немного расширю эту тему.

Получите токен для ВК

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

Для этого, как всегда, нам понадобится сайт vkserv.ru, который мы использовали в прошлый раз. В нем есть специальная вкладка «Получить токен ВКонтакте«.

Переходим в эту вкладку, авторизуемся на сайте. Мы не боимся за свои данные, потому что никуда не отправляем свой токен!
Далее видим единственную кнопку с названием «Перейти получить токен», нажимаем на нее (правда, других здесь нет).

Как получить токен вконтакте

Далее мы попадаем на страницу с множеством непонятных кнопок. Нам это интересно, потому что нижняя часть, которую я зачеркнул, нужна продвинутым пользователям (если интересно, я тоже об этом напишу).

Как получить токен вконтакте

Затем нажмите кнопку с надписью «Клевер», позже я объясню, почему именно эта кнопка.
После катапультирования на страницу подтверждения скопируйте адрес из строки и отправьте его жертве (если вы получите чужой токен). Если вы хотите получить свой, просто нажмите кнопку «Разрешить».

Как получить токен вконтактеКак получить токен вконтакте

После того, как жертва нажмет кнопку «Разрешить», она будет перенаправлена ​​на страницу с токеном ВКонтакте. Это выглядит так страшно.

Как получить токен вконтакте

В адресной строке будет находиться наш токен ВКонтакте. А чуть ниже просто страшная надпись «Пожалуйста, не копируйте данные из адресной строки для сторонних сайтов. Поэтому вы можете потерять доступ к своей учетной записи.»

Нам просто нужно убедиться, что жертва отправляет нам ссылку из адресной строки браузера, которую он открыл. Здесь в игру вступает ваше воображение.

Как получить токен вконтакте

Почему я рекомендовал вам использовать приложение Clover? А как получить чужой токен ВКонтакте.

это просто, здесь вы можете сказать своей жертве, что хотите увеличить достижения в игре и поделиться с вами одним способом, но вам нужно как минимум два человека и жетон каждого из них.
Также для правдоподобия спросите перед тем, как зайти в группу Clover ВКонтакте и зарегистрироваться, и только потом отпускать ссылку для получения токена.
После этого вы получаете токен, через некоторое время говорите спасибо, что все заработало и спасибо за помощь.
И мы сами сразу идем читать переписку нашей жертвы, ничего ей не говоря.

Еще по теме:  Как посмотреть прямую трансляцию в ВК

Вы уже знаете, что делать с токеном, это прочитать совпадение ВКонтакте с токеном или перейти на страницу ВК по этому же токену. О втором способе я опубликую чуть позже.

Если хотите, я опубликую на сайте больше способов получить чужой токен, которые будут работать в 90% случаев. Пишите в комментариях и подписывайтесь на телеграм-канал, если будет достаточно людей обязательно напишу!

Источник: faq-vk.ru

Собираем данные по рекламным кампаниям ВКонтакте

В пятничном лонгриде проделаем большую работу: возьмём информацию по рекламным кампаниям ВКонтакте и сопоставим их с данными Google Analytics в Redash. Чтобы снова не поднимать сервер, будем передавать данные через Google Docs, используя Spreadsheet API.

Получение access token
Для получение пользовательского ключа ВКонтакте нужно создать приложение. Идём в раздел «Разработчики» по https://vk.com/apps?act=manage, жмём на кнопку «Создать приложение». В поле «Тип приложения» выбираем «Standalone-приложение» и даём любое название. После этого в меню слева идём в настройки и сохраняем себе ID приложения.

Актуальную информацию о ключах можно посмотреть в статье «Получение ключа доступа»

Теперь копируем себе эту ссылку:

https://oauth.vk.com/authorize?client_id=YourClientIDresponse_type=token

Но вместо YourClientID вставляем ID своего созданного приложения. В scope у этой ссылки только ads, так что с этим ключом можно будет получать только информацию о рекламном кабинете. Вставляем её в браузер и нас скидывает на другую страницу — в адресе этой странице будет указан ваш сгенерированный access token.

Срок жизни токена — 86400 секунд: ровно сутки. Чтобы получить токен без временных ограничений можно добавить в scope параметр offline. Если токен понадобилось отозвать — смените пароль от страницы или в настройках безопасности завершите активные сессии.

Ещё для запросов к API нам пригодится ID рекламного кабинета — проходим по https://vk.com/ads?act=settings и копируем «номер кабинета».

Сбор данных через запросы к API
Напишем скрипт, который обращается к серверу ВКонтакте с нашим access token и номером рекламного кабинета и берёт информацию о всех кампаниях пользователя: количество просмотров на рекламах, кликов и затрат. Затем скрипт будет формировать из него DataFrame и отправлять в Google Docs.

from oauth2client.service_account import ServiceAccountCredentials from pandas import DataFrame import requests import gspread import time

Зададим несколько константных значений: access token, ID рекламного кабинета и версию API ВКонтакте, которую будем использовать. Актуальной является версия 5.103.

token = ‘fa258683fd418fafcab1fb1d41da4ec6cc62f60e152a63140c130a730829b1e0bc’ version = 5.103 id_rk = 123456789

За получение статистики по рекламе отвечает метод ads.getStatistics , но один из обязательных параметров при его вызове — ’ids’, ID рекламного объявления, статистику по которому мы хотим получить. Так как ID у нас пока нет, придётся сначала воспользоваться методов ads.getAds , который возвращает ID объявлений и кампаний.

Подробнее со всеми методами ВКонтакте API можно ознакомиться в документации

Библиотекой requests отправляем запрос к серверу и передаём свои параметры. Полученный ответ сразу переведём в формат json

campaign_ids = [] ads_ids = [] r = requests.get(‘https://api.vk.com/method/ads.getAds’, params=< ‘access_token’: token, ‘v’: version, ‘account_id’: id_rk >) data = r.json()[‘response’]

Вот, как выглядит объект data : нам вернулся обычный список словарей, с которым мы уже имели дело в материале “Передаём и анализируем собранные данные по рекламным капманиям в Redash”.

Заполняем словарь ad_campaign_dict . Ключом будет ID объявления, а значением — ID кампании, к которой принадлежит объявление. Так будет удобнее присваивать к объявлению ID кампании, к которой оно принадлежало.

ad_campaign_dict = <> for i in range(len(data)): ad_campaign_dict[data[i][‘id’]] = data[i][‘campaign_id’]

Теперь, имея ID каждого нужного объявления, можно обратиться к методу ads.getStatistics . Мы будем собирать количество просмотров, кликов, затрат и даты начала и конца объявления, поэтому заблаговременно заведём пустые списки.

ads_campaign_list = [] ads_id_list = [] ads_impressions_list = [] ads_clicks_list = [] ads_spent_list = [] ads_day_start_list = [] ads_day_end_list = []

Вызывать getStatistics нужно отдельно для каждого объявления — будем делать это в итераторе по ad_campaign_dict . Отправляем запрос, передавая в ‘period’ значение ‘overall’ — берём данные за всё время. У некоторых объявлений могут отсутствовать данные по полю «Просмотры» или «Клики» если они не были запущены, и, потребовав их, мы словим KeyError — во избежание этого добавим обработчик try — except , который заставит скрипт не обращать внимания на эту ошибку.

Еще по теме:  Как отправить себе подарок ВК с телефона

for ad_id in ad_campaign_dict: r = requests.get(‘https://api.vk.com/method/ads.getStatistics’, params=< ‘access_token’: token, ‘v’: version, ‘account_id’: id_rk, ‘ids_type’: ‘ad’, ‘ids’: ad_id, ‘period’: ‘overall’, ‘date_from’: ‘0’, ‘date_to’: ‘0’ >) try: data_stats = r.json()[‘response’] for i in range(len(data_stats)): for j in range(len(data_stats[i][‘stats’])): ads_impressions_list.append(data_stats[i][‘stats’][j][‘impressions’]) ads_clicks_list.append(data_stats[i][‘stats’][j][‘clicks’]) ads_spent_list.append(data_stats[i][‘stats’][j][‘spent’]) ads_day_start_list.append(data_stats[i][‘stats’][j][‘day_from’]) ads_day_end_list.append(data_stats[i][‘stats’][j][‘day_to’]) ads_id_list.append(data_stats[i][‘id’]) ads_campaign_list.append(ad_campaign_dict[ad_id]) except KeyError: continue

Теперь сформируем из списков DataFrame и выведем первые 5 элементов:

df = DataFrame() df[‘campaign_id’] = ads_campaign_list df[‘ad_id’] = ads_id_list df[‘impressions’] = ads_impressions_list df[‘clicks’] = ads_clicks_list df[‘spent’] = ads_spent_list df[‘day_start’] = ads_day_start_list df[‘day_end’] = ads_day_end_list print(df.head())

Экспорт данных в Google Docs
Для экспорта DataFrame в таблицу Google Sheets необходим ключ доступа Google API. Пройдём по https://console.developers.google.com и создадим новый проект. Даём ему любое имя и в Dashboard жмём на кнопку “Подключить API и сервисы”. Нужно включить два API — Google Drive API и Google Sheets API. Ищем первый в поиске, нажимаем на “Включить API”, затем ищем второй и проделываем то же самое.

После включения нас отправят на панель управления API. Жмём на «Создать учётные данные» — по ним будем проводить авторизацию в скрипте. Отмечаем, что используем Google Sheets API из веб-сервера и обращаемся к данным пользователя. Нажимаем на «Выбрать тип учётных данных» и создаем сервисный аккаунт. В поле «Роль» выбираем Проект — Редактор, а тип ключа оставим JSON.

После этого нам отправят файл в формате JSON с нашими учетными данными — назовём его «credentials.json» — и перенаправят на страницу с сервисными аккаунтами. Ниже будет поле с почтой — копируем её себе.

Переходим по https://docs.google.com/spreadsheets и создаем пустой файл с названием data , в который будут отправляться данные из DataFrame. В настройках доступа даём доступ по почте, скопированной ранее из сервисных аккаунтов — от неё будут приходить данные из скрипта.

Закинем файл credentials.json в директорию со скриптом и продолжим писать код. Перечисляем область видимости в виде ссылок:

scope = [‘https://spreadsheets.google.com/feeds’, ‘https://www.googleapis.com/auth/drive’]

И при помощи библиотек oauth2client и gspread проводим авторизацию методами ServiceAccountCredentials.from_json_keyfile_name и gspread.authorize , указывая в параметрах первого наш файл и переменную scope. Через переменную sheet будем обращаться к нашему файлу в Google Docs.

creds = ServiceAccountCredentials.from_json_keyfile_name(‘credentials.json’, scope) client = gspread.authorize(creds) sheet = client.open(‘data’).sheet1

Для ввода значений в ячейку таблички есть метод update_cell . Важно: нумерация индексов ячеек при обращении начинается не с нуля, а с единицы. Первым циклом пройдём по первой строке и перенесем туда заголовки нашего DataFrame.

Во втором будем идти по каждой ячейке и вставлять соответствующие значения DataFrame. По умолчанию стоит ограничение — 100 запросов в 100 секунд. Это ограничение может остановить наш скрипт на полпути: чтобы избежать ошибки пропишем time.sleep , чтобы после каждой вставки скрипт секунду выжидал.

count_of_rows = len(df) count_of_columns = len(df.columns) for i in range(count_of_columns): sheet.update_cell(1, i + 1, list(df.columns)[i]) for i in range(1, count_of_rows + 1): for j in range(count_of_columns): sheet.update_cell(i + 1, j + 1, str(df.iloc[i, j])) time.sleep(1)

Если всё сделаем правильно — получим таблицу такого вида:

Экспорт данных в Redash

Подключение Google Analytics к Redash описано в статье «Как подключить Google Analytics как Redash?».

Имея в Redash таблицу с Google Analytics и рекламным кампаниям ВКонтакте, можем сопоставить их друг другу. Напишем такой запрос:

SELECT query_50.day_start, CASE WHEN ga_source LIKE ‘%vk%’ THEN ‘vk.com’ END AS source, query_50.spent, query_50.impressions, query_50.clicks, SUM(query_49.ga_sessions) AS sessions, SUM(query_49.ga_newUsers) AS users FROM query_49 JOIN query_50 ON query_49.ga_date = query_50.day_start WHERE query_49.ga_source LIKE ‘%vk%’ AND DATE(query_49.ga_date) BETWEEN ‘2020-05-16’ AND ‘2020-05-20’ GROUP BY query_49.ga_date, source

ga_source — источник, с которого человек пришел на сайт. Всё, что похоже на vk оператором CASE объединяем в столбец «vk.com». Оператором JOIN добавляем таблицу с данными из ВКонтакте, объединяя по полю даты. Отсеиваем данные — возьмём день последней рекламной кампании и посмотрим на несколько дней после него. На выходе получим таблицу такого вида:

Итоги
Получилась таблица, сообщающая, сколько всего было затрачено на объявления в этот день, сколько человек его посмотрели, зашли к нам на сайт и стали нашими новыми пользователями.

Источник: leftjoin.ru

Рейтинг
( Пока оценок нет )
Загрузка ...