Автопостинг последних релизов в ваш Telegram канал

Dr_Brown

Пользователь
Забрать можно из моей репы:


Please Login or Register to view hidden text.



Мод позволяет брать из базы последние посты, заголовок, постер, описание, ссылку и постить в Ваш telegram канал.

Есть два режима работы:
1. Постинг релизов добавленых за последние 30 минут (настраивается по усмотрению, крон должен быть синхронизирован с интервалом установленным в переменной)
2. Рамдомно выбирает из базы, 10 постов, и постит в Telegram, по крон, интервал на Ваше усмотрение (внимание, это очень тяжелый запрос, не рекомендуется)

Системные требования:
1. Python 3.7 и выше
2. BeautifulSoup and PyMySQL libraries installed
3. Требуется битовое поле в таблице bb_bt_torents которое хранит 0 или 1, у меня оно назвывается pic_replase, можете назвать по своему.

Бота нужно создать в BotPhather, и добавить как админа, в ваш канал. Также требуется вписать ваш токен который вам выдаст BotPhather.

/*** Задача Cron запускается каждые 30 минут (режим 1) или интервал по пожеланию (режим 2) ***/

/usr/bin/python3 /home/main.py

файл main.py должен находиться в домашней папке или в любом удобном месте

смотри комментарии в коде., пример на картинке

Примечание:
сильно хитрожопые оформления не берет.
Также не удалось взорвать imageban
 

Вложения

  • Безымянный.png
    Безымянный.png
    368.7 KB · Просмотры: 26

vladios13

Пользователь
Подобное реализовавал, также помощью python, но без захода в БД, а просто парсинг tracker.php, по времени.

Небольшой кусок кода:
Python:
import json
import requests
from bs4 import BeautifulSoup

def get_first_news():
    headers = {
        "Accept": "*/*",
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
    }

    url = "http://tracker.ru/tracker.php"
    src = requests.get(url=url, headers=headers)

    soup = BeautifulSoup(src.text, "lxml")
    article_card = soup.findAll("tr", class_="tCenter hl-tr")
    # print(article_card)

    news_rel = {}
    for article in article_card:
        try:
            article_name = article.find("a", class_="genmed tLink").text.strip()
            article_url = article.find('a', "genmed tLink")['href'][1:]
            article_url = f'http://tracker.ru{article_url}' # преобразуем в полную ссылку
            article_id = article_url.split('=')[-1]
            article_size = article.find("a", class_="small tr-dl").text.strip()
        except AttributeError:
            print("Попался релиз с премодерацией")
            continue

        # собираем json-файл
        news_rel[article_id] = {
            "article_name": article_name,
            "article_url": article_url,
            "article_size": article_size,
        }
    
    with open("news_dict.json", "w") as file:
        json.dump(news_rel, file, indent=4, ensure_ascii=False)


def main():
    get_first_news()


if __name__ == '__main__':
    main()

Парсим данные в .json, и потом проверяем его, если есть что то новое отправляем в telegram. Опять же, это лишь кусок кода, как удалось парсить данные и собирать в json.
 

Вложения

  • 1689241502706.png
    1689241502706.png
    20.9 KB · Просмотры: 25

belomaxorka

Разработчик
Администратор
Подобное реализовавал, также помощью python, но без захода в БД, а просто парсинг tracker.php, по времени.

Небольшой кусок кода:
Python:
import json
import requests
from bs4 import BeautifulSoup

def get_first_news():
    headers = {
        "Accept": "*/*",
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
    }

    url = "http://tracker.ru/tracker.php"
    src = requests.get(url=url, headers=headers)

    soup = BeautifulSoup(src.text, "lxml")
    article_card = soup.findAll("tr", class_="tCenter hl-tr")
    # print(article_card)

    news_rel = {}
    for article in article_card:
        try:
            article_name = article.find("a", class_="genmed tLink").text.strip()
            article_url = article.find('a', "genmed tLink")['href'][1:]
            article_url = f'http://tracker.ru{article_url}' # преобразуем в полную ссылку
            article_id = article_url.split('=')[-1]
            article_size = article.find("a", class_="small tr-dl").text.strip()
        except AttributeError:
            print("Попался релиз с премодерацией")
            continue

        # собираем json-файл
        news_rel[article_id] = {
            "article_name": article_name,
            "article_url": article_url,
            "article_size": article_size,
        }
   
    with open("news_dict.json", "w") as file:
        json.dump(news_rel, file, indent=4, ensure_ascii=False)


def main():
    get_first_news()


if __name__ == '__main__':
    main()

Парсим данные в .json, и потом проверяем его, если есть что то новое отправляем в telegram. Опять же, это лишь кусок кода, как удалось парсить данные и собирать в json.
Спасибо большое за модификацию, это большой вклад в сообщество. ;):)
 

Dr_Brown

Пользователь
Подобное реализовавал, также помощью python, но без захода в БД, а просто парсинг tracker.php, по времени.

Небольшой кусок кода:
Python:
import json
import requests
from bs4 import BeautifulSoup

def get_first_news():
    headers = {
        "Accept": "*/*",
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
    }

    url = "http://tracker.ru/tracker.php"
    src = requests.get(url=url, headers=headers)

    soup = BeautifulSoup(src.text, "lxml")
    article_card = soup.findAll("tr", class_="tCenter hl-tr")
    # print(article_card)

    news_rel = {}
    for article in article_card:
        try:
            article_name = article.find("a", class_="genmed tLink").text.strip()
            article_url = article.find('a', "genmed tLink")['href'][1:]
            article_url = f'http://tracker.ru{article_url}' # преобразуем в полную ссылку
            article_id = article_url.split('=')[-1]
            article_size = article.find("a", class_="small tr-dl").text.strip()
        except AttributeError:
            print("Попался релиз с премодерацией")
            continue

        # собираем json-файл
        news_rel[article_id] = {
            "article_name": article_name,
            "article_url": article_url,
            "article_size": article_size,
        }
   
    with open("news_dict.json", "w") as file:
        json.dump(news_rel, file, indent=4, ensure_ascii=False)


def main():
    get_first_news()


if __name__ == '__main__':
    main()

Парсим данные в .json, и потом проверяем его, если есть что то новое отправляем в telegram. Опять же, это лишь кусок кода, как удалось парсить данные и собирать в json.
а картинки.. описание...
 
Сверху