Как я написал сервис для воспроизведения и скачивания песен с c социальной сети 'Вконтакте' - vksound.online #2
1.Список материалов
GIT - https://github.com/tagunzet/vksound
Решил написать приложение под Flask , так как по сути будет использоваться всего 2-3 страницы , незачем использовать Django .
И так импорт библиотек будет выглядит примерно так :
import vk_api
from vk_api import audio
from vk_api.audio import VkAudio
from vk_api import audio
import collections
import requests,vk_audio
import lxml
from flask import Flask,render_template,request, url_for,redirect , session
Давайте для начала запустим Flask.
app = Flask(__name__)
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' - Секретный ключ требуется для сессий , без него не заработает , может принимать любые значения , я обычно делаю рандом или пишу ахинею , можно генерировать .
if __name__ == '__main__':
app.run(host='тут пишите свой ip' , port = тут порт) - указываем в параметрах Flask IP-адрес на котором запускаем и порт . Если это локальная машина то пишем её локальный адрес 127.0.0.1 и порт три топора 777 ( на свой вкус ) , если на внешнем то пишем внешний .
Далее нужно создать страницу которую Flask будет отображать .
Так как мы импортировали библиотеку render_template то мы научились обрабатывать html файлы . Создаем папку рядом с python файлом в котором мы пишем всю эту дичь , называем папку обязательно templates , никак по другому , иначе магия не произойдет , templates - это такая папка которая хранит ваши html файлы , пока что этого достаточно .
Теперь добавляю форму логина .
файл на github - /templates/login
Далее подвязываю на функцию фласка
@app.route('/')
def hello_world():
if 'username' in session:
return redirect("/login/")
else:
return render_template("login.html")
То есть когда мы переходим в корень и у нас есть сессия то фласк перекидывает на функцию авторизации , если нет перекидывает на форму авторизации .
ФУНКЦИЮ И ФОРМУ ДЛЯ НЕВНИМАТЕЛЬНЫХ !
Далее функция авторизации .
@app.route("/login/", methods=["GET", "POST"]) - если переходит в ip/login/
def login(): - функция
message = ''
if request.method == 'POST' : - если сюда с формы приходит через пост данные то
session['username'] = request.form['username'] присваиваем в сессию пользовательский логин
#print(request.form)
users_id = [] - id пользака из вк хранится тут
access_tokens = [] - тут токен
username = request.form.get('username') запрашиваем логин
password = request.form.get('password') запрашиваем пароль
print(username,password) печатаем в консоль
vk_session = vk_api.VkApi(тут идет авторизация
username, password,
# функция для обработки двухфакторной аутентификации
auth_handler=auth_handler если она есть если нету то выполнится vk_session_auth()
)
try:
vk_session.auth()
session['username'] = 'starting' - пишем в сессию что начата
del bigmass[:] - незабываем очистить массив при использовании функции а то будут отображаться старые данные других пользоавтелей
except vk_api.AuthError as error_msg:
print(error_msg)
если ошибка печатаем её
return
import vk_audio - импортим либу vk_audio
one_comm = (vk_session.token['user_id'])
two_comm = (vk_session.token['access_token'])
users_id.append(one_comm) добавляем айди и токен в массив
access_tokens.append(two_comm)
vk = vk_audio.VkAudio(vk=vk_session)
owner = int(str(request.form.get('code'))) # Если None - аудио будут браться из своей музыки code - это id вк
data = vk.load(owner) # получаем наши аудио
print(data)печатаем что получили
second_audio = data.Audios
limit = 25 - ставим 25 песен , можете изменить на то сколько хотите , но > 1000 долго грузились у меня , больше 7 минут
Тут идем проходом по всем песням и смотрим
index = 1
for audios in data.Audios:
index += 1
if len(str(audios['url'])) >= 3 : Удаляем треки где нет названий
print(audios)
bigmass.append(audios) добавляем треки в массив
if index==limit:
break
если достигаем лимита заданного на 25 песен прекращаем проход
print(bigmass) - печатаю в консоль
#return (str(users_id)+' '+str(two_comm))
return render_template("home.html",one_comm=one_comm,two_comm=two_comm,mass=bigmass)
передаю параметры в jinja2 шаблонизатор
else:
если мы не авторизированы но случайно сюда попали то не передаём ничего
return render_template("home.html",mass=bigmass)
Функция exit убивает сессию . Усё !