Add tapas feed module
This commit is contained in:
parent
5d7a0a36e6
commit
b51d06d305
@ -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
62
feeds/modules/tapas.py
Normal 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
|
Loading…
Reference in New Issue
Block a user