• Home
  • Уроки новичков
  • Автоматизация публикации контента: Парсинг постов Reddit и автоматическая публикация в Telegram канале

Автоматизация публикации контента: Парсинг постов Reddit и автоматическая публикация в Telegram канале

Image

Добро пожаловать на мой новый урок на YouTube, где я покажу вам, как полностью автоматизировать процесс поиска и публикации контента с помощью парсинга постов Reddit и их автоматической публикации в вашем Telegram канале. Если вы хотите сократить время, затрачиваемое на поиск и публикацию интересного контента, то это видео для вас!

В этом уроке я покажу вам, как использовать Python для парсинга постов с популярного сайта Reddit. Вы узнаете, как извлечь информацию о постах, такую как заголовок, текст, изображения и другие элементы, используя мощный инструмент парсинга данных.

Затем я покажу вам, как настроить автоматическую публикацию этих постов в вашем Telegram канале. Вы научитесь создавать ботов, которые будут публиковать посты с Reddit напрямую в ваш канал. Это позволит вам сохранить время и силы, и сосредоточиться на других аспектах управления вашим каналом.

Но это еще не все! Я также расскажу вам о библиотеке apscheduler и покажу, как использовать ее для запуска скрипта по расписанию. Вы научитесь настраивать автоматический запуск скрипта на определенное время или в определенные интервалы, что позволит вам полностью автоматизировать процесс публикации контента.

Я покажу весь процесс шаг за шагом и предоставлю вам полный код, который вы сможете использовать в своих проектах. Вы увидите, как каждый этап автоматизации взаимодействует между собой, чтобы сделать вашу работу проще и более эффективной.

В конце видеоурока я предоставлю вам полный код и объясню каждый шаг настройки и использования парсинга Reddit, Telegram бота и apscheduler.

import asyncio
import logging
import asyncpraw
from aiogram import Bot
from datetime import datetime
from apscheduler.schedulers.asyncio import AsyncIOScheduler

PUBLIC_POSTS = []
TELEGRAM_CHANNEL = -1001705326511


async def get_posts():
    reddit_client = asyncpraw.Reddit(
        client_id="bDr5IC444OQYbwBBwxv4lg",
        client_secret="2wa1JXrevxIk_sqdOAzXo45D2QbSnA",
        user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                   "Chrome/110.0.0.0 Safari/537.36"
    )
    list_posts = []
    posts_sub = await reddit_client.subreddit('facepalm')
    posts_new = posts_sub.hot(limit=5)

    async for post_new in posts_new:
        if post_new.title not in PUBLIC_POSTS:
            list_posts.append(post_new.url)
            PUBLIC_POSTS.append(post_new.title)

    return list_posts


async def publish_content():
    bot = Bot(token='1695706849:AAG91Yzkhvxe0whMP9TtUj7IssaGQPEzVuk', parse_mode='HTML')
    try:
        posts = await get_posts()

        for post in posts:
            post: str
            if post.lower().split('.')[-1] in ['png', 'jpg', 'jpeg']:
                await bot.send_photo(chat_id=TELEGRAM_CHANNEL, photo=post)
            elif post.lower().split('.')[-1] in ['gif']:
                await bot.send_animation(chat_id=TELEGRAM_CHANNEL, animation=post)


    finally:
        await bot.session.close()


if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format="%(asctime)s - [%(levelname)s] -  %(name)s - "
                               "(%(filename)s).%(funcName)s(%(lineno)d) - %(message)s"
                        )

    loop = asyncio.new_event_loop()
    apscheduler = AsyncIOScheduler(event_loop=loop, timezone="Europe/Moscow")

    apscheduler.add_job(
        func=publish_content,
        trigger='interval',
        minutes=1,
        next_run_time=datetime.now()
    )

    apscheduler.start()

    loop.run_forever()
Image