vk music module

This commit is contained in:
bakatrouble 2019-01-26 09:36:56 +03:00
parent c677718c78
commit ed91a1f5ae
7 changed files with 107 additions and 1 deletions

View File

@ -1,7 +1,13 @@
from django.contrib import admin
from .models import Feed
from feeds.modules.echo import EchoFeedModuleConfig
from feeds.modules import EchoFeedModuleConfig, DankMemesFeedModuleConfig, ShittyWatercolourFeedModuleConfig,\
VKFeedModuleConfig, VKMusicFeedModuleConfig, WPComicFeedModuleConfig
admin.site.register(Feed)
admin.site.register(EchoFeedModuleConfig)
admin.site.register(DankMemesFeedModuleConfig)
admin.site.register(ShittyWatercolourFeedModuleConfig)
admin.site.register(VKFeedModuleConfig)
admin.site.register(VKMusicFeedModuleConfig)
admin.site.register(WPComicFeedModuleConfig)

View File

@ -28,6 +28,7 @@ class FeedsAppConfigForm(ConfigForm):
title = 'Feeds'
feed_bot_token = forms.CharField(required=True)
russian_proxy_string = forms.CharField()
vk_username = forms.CharField(required=True)
vk_password = forms.CharField(required=True)
vk_auth = forms.CharField(required=False, widget=forms.Textarea())

View File

@ -0,0 +1,23 @@
# Generated by Django 2.1.5 on 2019-01-26 06:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('feeds', '0003_dankmemesfeedmoduleconfig_shittywatercolourfeedmoduleconfig_wpcomicfeedmoduleconfig'),
]
operations = [
migrations.CreateModel(
name='VKMusicFeedModuleConfig',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('owner_id', models.IntegerField()),
],
options={
'abstract': False,
},
),
]

View File

@ -32,6 +32,9 @@ class Feed(models.Model):
self.save()
execute_feed.delay(self.pk)
def __str__(self):
return self.title
class Meta:
unique_together = ('config_type', 'config_id')

View File

@ -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
View 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

View File

@ -15,6 +15,7 @@ enum34==1.1.6
idna==2.8
kombu==4.2.2.post1
psycopg2-binary==2.7.6.1
PySocks==1.6.8
pyTelegramBotAPI==3.6.6
pytz==2018.9
PyYAML==3.13