add twitter feed
This commit is contained in:
@@ -4,7 +4,8 @@ from .vk_music import VKMusicFeedModuleConfig
|
||||
from .dank_memes import DankMemesFeedModuleConfig
|
||||
from .shitty_watercolour import ShittyWatercolourFeedModuleConfig
|
||||
from .wp_comic import WPComicFeedModuleConfig
|
||||
from .twitter import TwitterFeedModuleConfig
|
||||
|
||||
FEED_MODULES = [EchoFeedModuleConfig, VKFeedModuleConfig, VKMusicFeedModuleConfig, DankMemesFeedModuleConfig,
|
||||
ShittyWatercolourFeedModuleConfig, WPComicFeedModuleConfig]
|
||||
ShittyWatercolourFeedModuleConfig, WPComicFeedModuleConfig, TwitterFeedModuleConfig]
|
||||
|
||||
|
50
feeds/modules/twitter.py
Normal file
50
feeds/modules/twitter.py
Normal file
@@ -0,0 +1,50 @@
|
||||
import sentry_sdk
|
||||
import twitter
|
||||
from django.db import models
|
||||
from djconfig import config
|
||||
from telebot import TeleBot
|
||||
from telebot.types import InputMediaPhoto, InputMediaVideo
|
||||
|
||||
from feeds.models import FeedModuleConfig
|
||||
|
||||
|
||||
class TwitterFeedModuleConfig(FeedModuleConfig):
|
||||
screen_name = models.CharField(max_length=256)
|
||||
|
||||
MODULE_NAME = 'Twitter feed'
|
||||
|
||||
def execute(self, bot: TeleBot, chat_id, last_id):
|
||||
config._reload_maybe()
|
||||
|
||||
if last_id is None:
|
||||
last_id = 0
|
||||
|
||||
api = twitter.Api(config.twitter_consumer_api_key, config.twitter_consumer_api_secret,
|
||||
config.twitter_access_token, config.twitter_access_token_secret)
|
||||
for status in reversed(api.GetUserTimeline(screen_name=self.screen_name, since_id=last_id)):
|
||||
try:
|
||||
text = status.text # type: str
|
||||
for url in status.urls:
|
||||
text = text.replace(url.url, url.expanded_url)
|
||||
media = list(filter(lambda m: m.type in ('photo', 'animated_gif', 'video'), status.media))
|
||||
if not len(media):
|
||||
bot.send_message(chat_id, text)
|
||||
elif len(media) == 1:
|
||||
if media[0].type == 'photo':
|
||||
bot.send_photo(chat_id, media[0].media_url_https, text)
|
||||
elif media[0].type == 'animated_gif':
|
||||
bot.send_document(chat_id, media[0].video_info['variants'][-1]['url'], caption=text)
|
||||
else:
|
||||
bot.send_video(chat_id, media[0].video_info['variants'][-1]['url'], caption=text)
|
||||
else:
|
||||
converted_media = []
|
||||
for i, m in enumerate(media):
|
||||
if m.type == 'photo':
|
||||
converted_media.append(InputMediaPhoto(m.media_url_https, text if not i else None))
|
||||
elif m.type in ('animated_gif', 'video'):
|
||||
converted_media.append(InputMediaVideo(m.video_info['variants'][-1]['url'],
|
||||
caption=text if not i else None))
|
||||
bot.send_media_group(chat_id, converted_media)
|
||||
except Exception as e:
|
||||
sentry_sdk.capture_exception(e)
|
||||
yield status.id
|
Reference in New Issue
Block a user