Jump to content

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

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

Zero108

Актив

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

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
Добавить комментарий...