Как я написал сервис для воспроизведения и скачивания песен с 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)

И так окно входа выглядит как на рисунке 1.  а форма вошедшего человека выглядит так как на картинке 2 .


Функция exit убивает сессию . Усё !
Как я написал сервис для воспроизведения и скачивания песен с c социальной сети 'Вконтакте'  - vksound.online #2 Python, ВКонтакте, API, Vkapi, BDSM, Разработчики, Flask, Bootstrap, Длиннопост
Как я написал сервис для воспроизведения и скачивания песен с c социальной сети 'Вконтакте'  - vksound.online #2 Python, ВКонтакте, API, Vkapi, BDSM, Разработчики, Flask, Bootstrap, Длиннопост