Add tapas feed module

This commit is contained in:
bakatrouble 2019-03-31 22:58:20 +03:00
parent 5d7a0a36e6
commit b51d06d305
2 changed files with 65 additions and 1 deletions

View File

@ -5,7 +5,9 @@ from .dank_memes import DankMemesFeedModuleConfig
from .shitty_watercolour import ShittyWatercolourFeedModuleConfig
from .wp_comic import WPComicFeedModuleConfig
from .twitter import TwitterFeedModuleConfig
from .tapas import TapasFeedModuleConfig
FEED_MODULES = [EchoFeedModuleConfig, VKFeedModuleConfig, VKMusicFeedModuleConfig, DankMemesFeedModuleConfig,
ShittyWatercolourFeedModuleConfig, WPComicFeedModuleConfig, TwitterFeedModuleConfig]
ShittyWatercolourFeedModuleConfig, WPComicFeedModuleConfig, TwitterFeedModuleConfig,
TapasFeedModuleConfig]

62
feeds/modules/tapas.py Normal file
View File

@ -0,0 +1,62 @@
import os
from tempfile import TemporaryDirectory
import sentry_sdk
from django.db import models
from djconfig import config
from telebot import TeleBot
from telebot.types import InputMediaPhoto, InputMediaVideo
from bs4 import BeautifulSoup
import requests
from PIL import Image
from feeds.models import FeedModuleConfig
class TapasFeedModuleConfig(FeedModuleConfig):
display_name = models.CharField(max_length=256)
MODULE_NAME = 'Tapas.io comic'
def execute(self, bot: TeleBot, chat_id, last_id):
config._reload_maybe()
if last_id is None:
last_id = 0
soup = BeautifulSoup(requests.get(f'https://tapas.io/series/{self.display_name}').text, 'html.parser')
for episode in soup.select('#episode-nav .episode'):
eid = int(episode['data-eid'])
if eid <= last_id:
continue
esoup = BeautifulSoup(requests.get(f'https://tapas.io/episode/{eid}').text, 'html.parser')
# series_title = esoup.select_one('#series-info-wrap a.series-header-title').text
title = esoup.select_one(f'#episodes [data-eid={eid}] h1').text
caption = f'{title}\nhttps://tapas.io/episode/{eid}'
imgs = []
for img in esoup.select(f'#episodes [data-eid={eid}] .art-image'):
imgs.append(img['src'])
if len(imgs) == 1:
bot.send_document(chat_id, imgs[0], caption=caption)
if len(imgs) > 1:
with TemporaryDirectory() as d:
ims = []
for i, img in enumerate(imgs):
img_path = os.path.join(d, f'{i}.jpg')
with open(img_path, 'wb') as f:
f.write(requests.get(img).content)
ims.append(Image.open(img_path))
widths, heights = zip(*(i.size for i in ims))
max_width = max(widths)
total_height = max(heights)
new_im = Image.new('RGB', (max_width, total_height))
offset = 0
for im in ims:
new_im.paste(im, (offset, 0))
offset += im.size[0]
new_im_path = os.path.join(d, 'combined.jpg')
new_im.save(new_im_path)
bot.send_document(chat_id, new_im_path, caption=caption)
yield eid