Задачи


  1. Отправление заявок в друзья пользователям сайта VK.COM.
  2. Создание базы для хранения фото друзей.

Создание приложения


  1. Заходим на сайт vk.com/dev и открываем «Мои приложения».
  2. Нажимаем «Создать приложение», создаем название и выбираем платформу «Standalone-приложение».
  3. Заходим в настройки приложения и находим его ID.

Получение ключа безопасности


Формулируем запрос вида:

#https://oauth.vk.com/authorize?client_id=ПолученныйID&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=friends,photos&response_type=token&v=5.52

friends, photos — пример получения прав доступа. Прочие права можно найти здесь.

  1. Помещаем в строку браузера и переходим по ссылке.
  2. В адресной строке получим новую ссылку: #https://oauth.vk.com/blank.html#access_token=??????????????????????????????????????????????&expires_in=?????&user_id=????????

??? — тут будут находиться ваши личные данные.

access_token — необходимый нам параметр для отправки заявок друзьям. Но он устаревает каждые 24 часа и нужно получать новый.

Импорт


import requests — выполнение HTTP-запросов
import os — взаимодействие с операционной системой
from multiprocessing import Pool — параллельные вычисления
import time — работа со временем

Код


  • Главная процедура


    Запуск процедуры
    token='345hbfgd1dff4d7746...'    #приравниваем переменной access_token
    
    if __name__ == '__main__':
        friends_id = []
        get_id(friends_id)
        s = input("Отправить заявки в друзья - '1'\nПолучить фото друзей - '2'\n")
        if s == '1':
            app_counter = 0
            for ID in friends_id:
                get_new_friends(ID, app_counter)
        elif s == '2':
            with Pool(5) as p:
                p.map(get_photos, friends_id)
    

    Теперь необходимо получить полный список ID друзей.

    ID друзей
    def get_id(friends_id):
        r = requests.get('https://api.vk.com/method/friends.get?user_id=ВАШ_ID_СТРАНИЦЫ&fields=list_id&v=5.62')     #не забудьте заменить ID
        for ID in r.json()['response']['items']:
             friends_id+=[{'first_name':ID['first_name'], 'last_name':ID['last_name'], 'id':ID['id']}]    
        return friends_id
    

  • Отправка заявок


    Отправлять заявки будем друзьям друзей.

    Формулирование запросов строится по типу: requests.get{https://api.vk.com/method/НазваниеМетода, params = {НеобходимыеПараметры}}. Список методов можно получить здесь.

    Новые друзья
    def get_new_friends(ID, app_counter):
        r = requests.get('https://api.vk.com/method/friends.get?user_id='+str(ID['id'])+'&fields=list_id&v=5.62')
        for i in r.json()['response']['items']:
            req = requests.get('https://api.vk.com/method/friends.add', params={'user_id':i['id'], 'access_token':token})
            try:
                if req.json()['response'] == 1:
                    app_counter+=1
                    print('Заявок отправлено: '+str(app_counter))
                    time.sleep(10)
                    return app_counter
            except:
                time.sleep(10)
    

  • Скачивание фото


    Создадим папку D:/Photos, программа станет заполнять ее новыми папками с именами друзей. Будем брать только те фото, что стояли на аватарке (работа с фотографиями).

    Получение фотографий
    def get_photos(ID):
        counter = 0
        try:
            for i in requests.get('https://api.vk.com/method/photos.get', params = {'owner_id':ID['id'], 'album_id':'profile', 'access_token':token}).json()['response']:
                if counter == 0:
                    os.mkdir('D:/Photos/'+ID['first_name']+'_'+ID['last_name'])
                else:
                    p = requests.get(i['src_big'])
                    out = open('D:/Photos/'+ID['first_name']+'_'+ID['last_name']+'/'+str(counter)+'.jpg', "wb")
                    out.write(p.content)
                    out.close()
                counter+=1
        except:
           None
    


Приведенная программа расширяет пользовательские возможности социальной сети vk.
Поделиться с друзьями
-->

Комментарии (3)


  1. vpiskunov
    04.04.2017 11:58
    +4

    Извините, но действиельно очень жаль, что статьи такого уровня идут у main Хабр-а.


  1. nightvich
    04.04.2017 12:01
    +2

    Складывается впечатление, что преподаватель одного из учебных заведений пообещал, что будет повышать оценку за публикацию своего «шедевра» на хабре.


  1. usja
    04.04.2017 12:38

    Сколько работает до того, как прийдется капчу вводить?