Jump to content
  • Установка на свой сервер скрипта 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


    User Feedback

    Recommended Comments

    Если в целях тестирования вам необходимо временно отключить рекламу в 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-лент. Намного больше, чем сообщений в импортируемых каналах/группах.

    Link to comment
    Share on other sites



    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.
    Note: Your post will require moderator approval before it will be visible.

    Guest
    Add a comment...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

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

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...