The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  правила/FAQ  поиск  регистрация  вход/выход  слежка  RSS
"Раздел полезных советов: Автоматизация отправки сообщений в ..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Автоматизация отправки сообщений в ..."  +/
Сообщение от auto_tips on 18-Фев-17, 11:10 

++ Введение

Получаем новости с сайта OpenNet.ru в Jabber с возможностью шифрования OpenPGP.

++ Исходники

   #!/bin/bash

   #################################
   #                #
   #    Opennet.ru Jabber    #
   #       News Parser        #
   #                #
   #################################

   ### Login/Pass/Server of bot ####

   Jid=""     # Only login: test
   Pass=""    # Password
   JServer="" # Exapmle.com

   #################################

   ### Jid/PGP key of recipient ####

   Send_to=""  # Jid: test@example.com
   Crypt="1"   # Encrypt with OpenPGP or not: 1,0
   Key_Name="" # PGP key name: my_key

   #################################


   sqlite3=`which sqlite3`
   DB_FILE=./opennet_db.db

   $sqlite3 $DB_FILE  "
        create table IF NOT EXISTS  news (
       id integer primary key autoincrement,
           News TEXT UNIQUE,);"

   # Get news from Opennet.ru, and remove trash
   curl -s https://www.opennet.ru/opennews/opennews_3.txt | iconv -f koi8-r \
   | cut -d '<' -f 8 | cut -d '"' -f 2,3 | sed 's/"//g' | sed 's/>/ /g' > /tmp/opennet_temp.txt


   # Wrirt news to database
   while read line
    do
    $sqlite3 $DB_FILE  "insert into news (News) values  ('""$line""')"

    if [ $? == "0" ];then # If news not in database, encrypt it and send it to recipient

        if [ "$Crypt" == 1 ]; then
                  msg=$(echo "$line" | gpg -e -r "$Key_Name" --armor | grep -v 'PGP MESSAGE' | grep -v '^$')
                  msg_tmp="/tmp/$(( ( RANDOM % 25400 )  + 1 ))"

                  echo "<message to='$Send_to' from='$Jid@$JServer' type='chat'>" >> $msg_tmp
                  echo "<body>This message is encrypted.</body>" >> $msg_tmp
                  echo "<x xmlns='jabber:x:encrypted'>$msg</x>" >> $msg_tmp
                  echo "</message>" >> $msg_tmp

                  cat $msg_tmp | sendxmpp -u "$Jid" -p "$Pass" -j "$JServer" -t --raw
                else #Send not encrypted message
                  echo "$line"  | sendxmpp -u "$Jid" -p "$Pass" -j "$JServer" -e -t "$Send_to"
                fi
    fi
        sleep 2
    done < "/tmp/opennet_temp.txt"

    rm -rf /tmp/opennet_temp.txt "$msg_tmp"

    exit 0;


Актуальный исходный код и инструкцию по установке можно загрузить на странице https://github.com/nvb13/OpenNet_to_xmpp

++ Установка

Для работы скрипта требуются sendxmpp, sqlite3, curl

   apt-get install sendxmpp sqlite3 curl
   git clone https://github.com/nvb13/OpenNet_to_xmpp.git
   cd OpenNet_to_xmpp/
   chmod +x opennet_xmpp.sh

++ Настройка

Зарегистрируйте Jabber аккаунт бота на любом сервере.

Заполните поля в файле opennet_xmpp.sh

   Jid="" # Логин бота без собаки и хоста.
   Pass="" # Пароль бота
   JServer="" # Сервер бота
   Send_to="" # Jabber ID получателя куда будут приходить новости test@example.com
   Crypt="1" # Шифровать сообщения с OpenPGP или нет. Значения 1 или 0
   Key_Name="" # Имя вашего PGP ключа. Например my_key

Если используете шифрование, то импортируйте публичный ключ получателя.

   gpg --import key_file.asc где key_file.asc файл публичного ключа получателя

Проверьте работу скрипта

   ./opennet_xmpp.sh

Если все работает добавьте задание в cron

   crontab -e */30 * * * * /home/username/OpenNet_to_xmpp/opennet_xmpp.sh

URL: https://github.com/nvb13/OpenNet_to_xmpp
Обсуждается: https://www.opennet.ru/tips/info/3004.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Автоматизация отправки сообщений в Jabber на примере трансля..."  +/
Сообщение от Johny on 18-Фев-17, 11:10 
Ну во первых, sqlite тут избыточен, достаточно просто хранить id последней отправленной новости.
Во вторых , ну хотя бы проверку на успех можно было сделать?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Автоматизация отправки сообщений в Jabber на примере трансля..."  +/
Сообщение от Ksaelan on 23-Фев-17, 13:01 
а в третьих - подписаться на RSS и не изобретать велосипедов. А то код ради кода это конечно похвально, но безполезно
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Автоматизация отправки сообщений в Jabber на примере трансля..."  +/
Сообщение от Aviv (ok) on 26-Фев-17, 13:13 
Выдает две ошибки
Error: near ")": syntax error
Error: no such table: news

Где искать проблему?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Автоматизация отправки сообщений в Jabber на примере трансля..."  +/
Сообщение от Aviv (ok) on 26-Фев-17, 13:15 
RSS это очень хорошо, но не всегда помнишь о том, что хотел что-то нужное\полезное почитать. А так приходят сообщения - удобно
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

6. "Автоматизация отправки сообщений в Jabber на примере трансля..."  +/
Сообщение от nvb13 email on 02-Мрт-17, 03:31 
News TEXT UNIQUE,);" Необходимо убрать запятую.

News TEXT UNIQUE);"

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Автоматизация отправки сообщений в Jabber на примере трансля..."  +/
Сообщение от Aviv (ok) on 04-Мрт-17, 11:16 
Старая ошибка пропала, появилась новая

Use of uninitialized value $args{"file"} in lc at /usr/share/perl5/Net/XMPP/Debug.pm line 154.
Connect securely wether using -e (--ssl) or -t (--tls)

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Автоматизация отправки сообщений в Jabber на примере трансля..."  +/
Сообщение от nvb13 email on 11-Мрт-17, 07:05 
Попробуйте поменять
echo "$line"  | sendxmpp -u "$Jid" -p "$Pass" -j "$JServer" -e -t "$Send_to"
на
echo "$line"  | sendxmpp -u "$Jid" -p "$Pass" -j "$JServer" -t "$Send_to"
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "Автоматизация отправки сообщений в Jabber на примере трансля..."  +/
Сообщение от nlugr7 on 13-Мрт-17, 15:41 
Репозиторий на Github есть. Автор ждет твоих пул-реквестов!
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

10. "Автоматизация отправки сообщений в Jabber на примере трансля..."  +/
Сообщение от freehck email(ok) on 20-Мрт-17, 19:49 
Именно. Или NNTP.
1) gwene.ru.opennet.opennews.opennews.full
2) gwene.ru.opennet.opennews.opennews.mini.full
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

11. "Автоматизация отправки сообщений в Jabber на примере трансля..."  +/
Сообщение от Аноним (??) on 23-Мрт-17, 21:45 
> msg_tmp="/tmp/$(( ( RANDOM % 25400 )  + 1 ))"

Расскажите ему кто-нибудь про mktemp(1). И про shellcheck заодно, чтобы не позорился.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру