Донецкий техникум промышленной автоматики

API всьому голова: ВКонтакте - від початку до відправки повідомлення одному

  1. Почнемо - отримаємо APP_ID і SECRET_KEY
  2. отримаємо ACCESS_TOKEN
  3. Пишемо одного повідомлення за допомогою API

Робота з API сервісів це завжди історія на кшталт "Очікування ... реальність". Бо навіть просте API може з'їсти день, а то і 2 дні робочого часу.

API Вконтакте не виняток. Вже є дуже багато матеріалів на тему використання цього інтерфейсу:

http://habrahabr.ru/search/page2/?q=vk+api&target_type=posts&order_by=relevance

Багато практичних задач вирішили за допомогою API:

І навіть вже є кілька готових реалізацій-бібліотек для роботи з Вконтакте:

І з раз в раз гугл мучиться від запитів "Vk.com api". Користувачі шукають приклади авторизація, документацію, приклади використання. Тому я приведу один з варіантів старту в API Вконтакте, а саме. Ми відправимо hello world одному.

Почнемо - отримаємо APP_ID і SECRET_KEY

Варто відзначити, що API Вконтакте непогано описано - включивши мозок можна зрозуміти що і куди тикати. У цьому можна переконається самостійно - https://vk.com/dev/main

Для того щоб почати робити запити в API необхідно отримати APP_ID і SECRET_KEY - це властиво багатьом сучасним сервісів. Для цього йдемо на сторінку https://vk.com/apps?act=manage Бачимо приблизно таку картину:

act=manage   Бачимо приблизно таку картину:

Створюємо свій додаток:

Створюємо свій додаток:

Вибираємо "Standalone-додаток" - для нашого сайту це в самий раз

У підсумку отримуємо додаток:

На сторінці "настройки" бачимо ID додатки і Захищений ключ:

Запишіть їх, вони нам знадобляться. А також не забудьте включити додаток. А ще в Права доступу вкажіть необхідні доступи - можна вказати всі, поки не розібралися що до чого.

В результаті ми отримали ID додатки і Захищений ключ, які називаються часто APP_ID і SECRET_KEY.

отримаємо ACCESS_TOKEN

Отримали якісь APP_ID і SECRET_KEY, а всюди в документації просять ACCESS_TOKEN. Давай-ті навчимося його отримувати.

Як обгортки над API візьмемо vk (чому? Без причини, сподобалася ця обгортка), встановимо:

А потім візьмемо готовий код (все написано за нас). Для прикладу візьмемо візьмемо готовий шматок коду і трохи перетворимо по Python3:

# - * - encoding: utf-8 - * - from __future__ import unicode_literals import pprint from urllib.parse import parse_qs import webbrowser import pickle from datetime import datetime, timedelta import vk import time # id of vk.com application APP_ID = <вставити ТВІЙ APP_ID> # file, where auth data is saved AUTH_FILE = '.auth_data' # chars to exclude from filename FORBIDDEN_CHARS = '/ \\ \?% *: | "<>!' def get_saved_auth_params (): access_token = None user_id = None try: with open (AUTH_FILE, 'rb') as pkl_file: token = pickle. load (pkl_file) expires = pickle. load (pkl_file) uid = pickle. load (pkl_file) if datetime. now () <expires: access_token = token user_id = uid except IOError: pass return access_token, user_id def save_auth_params (access_token, expires_in, user_id): expires = datetime. now () + timedelta (seconds = int (expires_in)) with open (AUTH_FILE, 'wb') as output: pickle. dump (access_token, output) pickle. dump (expires, output) pickle. dump (user_id, output) def get_auth_params (): auth_url = ( "https: // oauth. vk.com/authorize?client_id={app_id} "" & scope = wall, messages & redirect_uri = http: //oauth.vk.com/blank.html "" & display = page & response_type = token ". format (app_id = APP_ID)) webbrowser. open_new_tab (auth_url) redirected_url = input ( "Paste here url you were redirected: \ n") aup = parse_qs (redirected_url) aup [ 'a ccess_token '] = aup. pop ( 'https://oauth.vk.com/blank.html#access_token') save_auth_params (aup [ 'access_token'] [0], aup [ 'expires_in'] [0], aup [ 'user_id'] [0 ]) return aup [ 'access_token'] [0], aup [ 'user_id'] [0] def get_api (access_token): session = vk. Session (access_token = access_token) return vk. API (session) def main (): access_token, _ = get_saved_auth_params () if not access_token or not _: access_token, _ = get_auth_params () api = get_api (access_token) main ()

Що ж робить цей код? Спочатку ми читаємо файл AUTH_FILE, якщо такий файл є, то вигрібаємо від туди токен і перевіряємо - протух він або ще немає.

Якщо ж токена немає або протух, то скрипт генерує посилання для авторизації і відкриває її в браузері. Браузер відкриється, vk api попросить доступ до ваших даних.

Після авторизації необхідно скопіювати посилання сторінки в консоль і натиснути Enter - скрипт сам дістане потрібні параметри і збереже в файл.

Посилання, яка буде в браузері приблизно така:

https://oauth.vk.com/blank.html#access_token=147a6effsfsd342452345ea8b59e03ef0538f20e0a474887bb46299fc99aed4bfsda11c0be900&expires_in=86400&user_id=16932517

Тепер у нас є ACCESS_TOKEN, залишилося мале справа - написати одного повідомлення

Пишемо одного повідомлення за допомогою API

Модифікуємо функцію main, а також додамо функцію send_message (вгадайте що вона робить):

def send_message (api, user_id, message, ** kwargs): data_dict = { 'user_id': user_id, 'message': message,} data_dict. update (** kwargs) return api. messages. send (** data_dict) def main (): access_token, _ = get_saved_auth_params () if not access_token or not _: access_token, _ = get_auth_params () api = get_api (access_token) users = [<СПИСОК ID 'шників користувачів>] user_text = "Привіт. Я навчився за допомогою API писати повідомлення" for user_id in users: print ( "User", user_id) res = send_message (api, user_id = user_id, message = user_text) time. sleep (1) print (res)

Об'єднайте ці два исходника і зможете надіслати другу повідомлення з допомогою VK API

Ru/search/page2/?
Com/apps?
Ому?
Auth_data' # chars to exclude from filename FORBIDDEN_CHARS = '/ \\ \?
Com/authorize?