Перейти к содержанию
  • Установка на свой сервер скрипта TelegramRSS - импорт RSS-ленты из публичного Телеграм канала/группы


    Zero108

    rssfg-telegram-350.png.a3b15dd020328e7760210f680bb2c0d8.pngПроцесс последовательной установки расписан по пунктам тут: 

    https://github.com/xtrime-ru/TelegramRSS#installation
    https://github.com/xtrime-ru/TelegramApiServer?tab=readme-ov-file#installation

    С автором скрипта можно связаться тут: 
    Telegram: @xtrime
    Email: alexander(at)i-c-a.su

     

    Моя установка на Centos 7

    1. Проверить, что порт 9504 на сервере доступен из сети. Это можно сделать по адресу https://www.reg.ru/web-tools/port-checker


    2. Создать на сервере домен третьего уровня (или любой другой), который будет отвечать за создание RSS-ленты. Настроить для него SSL сертификат. Проверить, что домен доступен из сети в браузере (открывается тестовая страница).

    Например: https://rss.vashdomen.ru

    Если сервер работает через Nginx, внести следующую директиву в конфигурационный файл для этого домена (в двух местах, если Nginx работает для 80 и 443 портов):

    /etc/nginx/vhosts/<пользователь>/rss.vashdomen.ru.conf

    proxy_pass http://127.0.0.1:9504;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    Образец: https://github.com/xtrime-ru/TelegramRSS?tab=readme-ov-file#additional-steps


    3. Зарегестрироваться  на https://my.telegram.org, получить App api_id, App api_hash. Процесс несложный, результат показан на скриншоте и доступен по адресу https://my.telegram.org/apps

    pic1.thumb.jpg.bae591e378ffc5e1dfadf311be23fbe9.jpg


    4. Авторизоваться в консоли сервера с правами root по ssh и в консоли ввести по очереди следующие команды для установки docker (докера) (будет установлен в ту папку, из которой выполнялась соманда curl):

    curl -fsSL https://get.docker.com -o get-docker.sh
    sh ./get-docker.sh


    5. Установить Telegram Api Server (будет установлен в ту папку, из которой выполнялась соманда git) согласно мануалу: 

    git clone https://github.com/xtrime-ru/TelegramApiServer.git TelegramApiServer
    cd TelegramApiServer
    cp .env.docker.example .env.docker
    docker compose pull

    Открыть файл для редактирования:

    .../TelegramApiServer/.env.docker

    Ввести данные API_ID и API_HASH, полученные в п.1:

    pic3.thumb.jpg.a61f7b18b9c3a596fe41a97c995338b6.jpg

    Сохранить файл и загрузить обратно на сервер.

    Запустить docker, выполнив команду: 

    docker compose run --rm api

    Авторизовать сессию, введя по запросу свой номер телефона, к которому привязан Телеграм, в формате: +79998887766

    Успешный запуск Tekegram Api Server будет подтвержден сообщением в консоли:

    TelegramApiServer ready. 
    Number of sessions: 1.

    Выйти с помощью клавиш Ctrl+C

    Запустить docker и добавить его в автозагрузку на случай рестарта сервера:

    docker compose up -d
    systemctl start docker.service
    systemctl enable docker.service
    systemctl enable containerd.service


    6. Установить скрипт Telegram RSS

    git clone https://github.com/xtrime-ru/TelegramRSS.git TelegramRSS
    cd TelegramRSS
    cp .env.docker.example .env.docker


    Открыть на редактирование файл:
    .../TelegramRSS/.env.docker

    Отредактировать и загрузить обратно на сервер:

    REAL_IP_HEADER=X-Forwarded-For
    
    SELF_URL=https://rss.vashdomen.ru 
    (см. п.2 выше)
    
    FORBIDDEN_REFERERS_REGEX="^((?!vashdomen.ru).)*$"
    (чтобы медиа из RSS-ленты открывались только на своём домене)
    
    RPM=150
    MEDIA_RPM=150
    (количество запросов к летнте в минуту и количество запросов медиа в минуту)

    Выполнить команду в консоли:

    service docker restart


    Примечение: у меня после установки оба пакета находятся в одной папке:

    pic2.jpg.a6451023d87e20ba596ffe1e5dd8edb3.jpg


    7. Проверить, что импорт доступен, выполнив тестовый запрос к произвольному Телеграм-каналу в консоли:

    curl "https://rss.vashdomen.ru/rss/zv_art" 

    или в браузере:

    https://rss.vashdomen.ru/rss/zv_art


    8. Отредактировать главную страницы сайта https://rss.vashdomen.ru  можно в следующем файле: 

    .../TelegramRSS/public/index.html


    9. Далее вы можете использовать данную ленту для импорта данных в форумы, виджеты, RSS-ридеры и т.п. Обратите внимание, что согласно пользовательскому соглашению, Телеграм встраивает свою рекламу в RSS-ленту, которую вы импортируете (см. ниже). Поэтому рекомендуется использовать импорт на свой сайт в премодерируемом режиме. Либо необходимо приобрести платную подписку для своего аккаунта в Телеграме. Либо вы можете модифицироватьт скрипт импорта и рассказать в комментариях, чем это быстро закончилось. Автор скрипта к рекламе не имеет никакого отношения.

    Цитата

     

    https://core.telegram.org/api/terms#3-advertising-amp-monetization

    Пункт 3.3

    3.3. If your app allows accessing content from Telegram channels (https://telegram.org/tour/channels), you must include support for official sponsored messages (https://core.telegram.org/api/sponsored-messages) in Telegram channels and may not interfere with this functionality.

    https://core.telegram.org/api/sponsored-messages#sponsored-messages-in-third-party-apps

     


    10. Как это все работает, показано на схеме ниже:

    68747470733a2f2f6873746f2e6f72672f776562742f6a2d2f6f622f6b792f6a2d6f626b796531647636386e67737267693132716576757472612e706e67.thumb.png.cb217962260902df08d0fd9760785dea.png


    Обратная связь

    Рекомендуемые комментарии

    Если в целях тестирования вам необходимо временно отключить рекламу в RSS-ленте, то следует выполнить следующие манипуляции:

    1. Открыть файлы и закомментировать:

    .../TelegramRSS/app/Controller/BaseFeedController.php

        /*
            if ($isChannel) {
                $result['sponsored_messages'] = $this->client->getSponsoredMessages($channel);
            }
         */

    .../TelegramRSS/app/TgClient.php

     /*
        public function getSponsoredMessages(string $peer): array
        {
            if ($this->isPremium === null) {
                $self = self::getContents($this->get('getSelf'));
                $this->isPremium = $self['premium'] ?? null;
            }
            $messages = [];
            if (!$this->isPremium) {
                $messages = self::getContents($this->get('getSponsoredMessages', $peer));
                $futures = [];
                foreach ($messages as $message) {
                    if (!empty($message['from_id'])) {
                        $futures[] = async(function() use(&$message) {
                            $id = $this->getId($message['from_id']);
                            $message['peer'] = $this->getInfo($id);
                        });
                    }
                }
                awaitAll($futures);
            }
            return $messages;
        }
    
        public function viewSponsoredMessage(string $peer, array $message)
        {
            return $this->get('viewSponsoredMessage', ['peer' => $peer, 'message' => $message]);
        }*/

    2. Перезапустить сервис docker:

    service docker restart

    (Или аналогичная команда для вашей ОС).

    PS Рекламы приходит очень много - порядка 30-40 сообщений из нескольких RSS-лент. Намного больше, чем сообщений в импортируемых каналах/группах.

    Ссылка на комментарий
    Поделиться на другие сайты



    Присоединяйтесь к обсуждению

    Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
    Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

    Гость
    Добавить комментарий...

    ×   Вставлено с форматированием.   Вставить как обычный текст

      Разрешено использовать не более 75 эмодзи.

    ×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...