vk music module
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
from .echo import EchoFeedModuleConfig
|
||||
from .vk_feed import VKFeedModuleConfig
|
||||
from .vk_music import VKMusicFeedModuleConfig
|
||||
from .dank_memes import DankMemesFeedModuleConfig
|
||||
from .shitty_watercolour import ShittyWatercolourFeedModuleConfig
|
||||
from .wp_comic import WPComicFeedModuleConfig
|
||||
|
||||
FEED_MODULES = [EchoFeedModuleConfig, VKFeedModuleConfig, DankMemesFeedModuleConfig, ShittyWatercolourFeedModuleConfig,
|
||||
WPComicFeedModuleConfig]
|
||||
|
||||
|
70
feeds/modules/vk_music.py
Normal file
70
feeds/modules/vk_music.py
Normal file
@@ -0,0 +1,70 @@
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
import requests
|
||||
import sentry_sdk
|
||||
from django.db import models
|
||||
from djconfig import config
|
||||
from telebot import TeleBot
|
||||
from telebot.types import InputMediaPhoto
|
||||
from vk_api import VkApi
|
||||
from vk_api.audio import VkAudio
|
||||
|
||||
from feeds.models import FeedModuleConfig
|
||||
from feeds.utils import DatabaseConfig
|
||||
|
||||
|
||||
def get_vk_photo(attachment):
|
||||
for size in (2560, 1280, 807, 604, 130, 75):
|
||||
if f'photo_{size}' in attachment:
|
||||
return attachment[f'photo_{size}']
|
||||
return None
|
||||
|
||||
|
||||
def get_file(url, session=None):
|
||||
if session is None:
|
||||
session = requests
|
||||
|
||||
fname = '?'.join(url.split('?')[:-1])
|
||||
extension = os.path.basename(fname).split('.')[-1]
|
||||
f = tempfile.NamedTemporaryFile(suffix=f'.{extension}' if extension else None)
|
||||
r = session.get(url, stream=True)
|
||||
for chunk in r.iter_content(1024 * 1024):
|
||||
if chunk:
|
||||
f.write(chunk)
|
||||
f.seek(0)
|
||||
return f
|
||||
|
||||
|
||||
class VKMusicFeedModuleConfig(FeedModuleConfig):
|
||||
owner_id = models.IntegerField()
|
||||
|
||||
MODULE_NAME = 'VK music'
|
||||
|
||||
def execute(self, bot: TeleBot, chat_id, last_id):
|
||||
config._reload_maybe()
|
||||
|
||||
if last_id is None:
|
||||
last_id = 0
|
||||
|
||||
vk_session = VkApi(login=config.vk_username, password=config.vk_password, config=DatabaseConfig,
|
||||
api_version='5.60')
|
||||
if config.russian_proxy_string:
|
||||
vk_session.http.proxies = {
|
||||
'http': config.russian_proxy_string,
|
||||
'https': config.russian_proxy_string,
|
||||
}
|
||||
vk_session.auth()
|
||||
vk_audio = VkAudio(vk_session)
|
||||
lst = []
|
||||
for audio in vk_audio.get_iter(self.owner_id):
|
||||
if audio['id'] > last_id:
|
||||
lst = [audio] + lst
|
||||
else:
|
||||
break
|
||||
for track in reversed(lst):
|
||||
f = get_file(track['url'], vk_session.http)
|
||||
bot.send_audio(chat_id, f, duration=track['duration'], performer=track['artist'],
|
||||
title=track['title'])
|
||||
last_id = track['id']
|
||||
return last_id
|
Reference in New Issue
Block a user