vk api python. Получаем аудиозаписи со своей страницы

25 Дек 2019 , 1183

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

Устанавливаем библиотеку


pip install vk_api

Еще необходимо будет установить библиотеку beautifulsoup4. Эта библиотека используется в модуле VkAudio библиотеки vk_api для парсинга


 pip install beautifulsoup4

Напишем код , который авторизует нас в вконтакте , а потом получает все наши треки


import vk_api
from vk_api.audio import VkAudio


def main():
    vk_session = vk_api.VkApi('Ваш логин', 'Ваш пароль')

    try:
        vk_session.auth()
    except vk_api.AuthError as error_msg:
        # Если происходит исключение во время аутентификации, то выводим ошибку и выходи
        print(error_msg)
        return

    # Модуль для получения аудиозаписей без использования официального API.
    vkaudio = VkAudio(vk_session)

    for track in vkaudio.get_iter():
        print(f"Исполнитель : {track.get('artist')}")
        print(f"Название трека : {track.get('title')}")
        print(f"Ссылка на трек(url) : {track.get('url')}")
        print('--------------------------------------------')


if __name__ == '__main__':
    main()


Скриншот выполнения программы

Данная библиотека с помощью нескольких строчек кода позволяет нам авторизоваться на сайте и спарсить наши аудиозаписи.

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


import requests
import re

RE_LOGIN_HASH = re.compile(r'name="lg_h" value="([a-z0-9]+)"')

login, password = 'Ваш логин', 'Ваш пароль'

# Создаем сессию с исползованием библиотеки requests
client_http = requests.Session()

# Добавляем user_agents , эмулируя поведение браузера
client_http.headers.update({
        'User-agent': 'Mozilla/5.0 (Windows NT 6.1; rv:52.0) '
                      'Gecko/20100101 Firefox/52.0'
    })

# Выполняем запрос к сайту , чтобы получить cookies
response = client_http.get('https://vk.com/')

values = {
    'act': 'login',
    'role': 'al_frame',
    '_origin': 'https://vk.com',
    'utf8': '1',
    'email': login,
    'pass': password,
    'lg_h': search_re(RE_LOGIN_HASH, response.text)
}

# Отправляем post запрос с нашим логином и паролем.
response = client_http.post('https://login.vk.com/', values)

#Смотрим ответ
print(response.text)

#Далее мы должны написать много кода , на случай если используется двухфакторная авторизация 
# на случай неудачного ввода данных и все такое. Все это за нас написали разработчики данной библиотеки


Это упрощенный код для авторизации, чтобы показать как происходит авторизация с помощью библиотеки requests. А с помощью библиотеки vk_api авторизацию можно сделать всего лишь тремя строчками


import vk_api
vk_session = vk_api.VkApi('Ваш логин', 'Ваш пароль')
vk_session.auth()

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

А с помощью еще трек строчек кода , мы получаем все наши аудиозаписи


vkaudio = VkAudio(vk_session)
for track in vkaudio.get_iter():
    print(track)

Загляните в исходники данных методой и классов в библиотеке vk_apiи вы увидите какие запросы к api вконтакте выполняются и как парсятся аудиозаписи. В частности в методе __init__ класса VkAudio выполняется запрос к api users.get для получения Id авторизованного пользователя. А в методе get_iter() в цикле выполняются post запросы для получения аудиозаписей

В данной статье был рассмотрен конкретный пример использования библиотеки vk_api , которая предоставляет кучу возвоможностей и с замечательными примерами , которые можно посмотреть в репозитории.В следующих статьях мы рассмотрим еще больше примеров

comments powered by Disqus

Подписка

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

Рубрики

Теги