Автоматизация отправки сообщений в Jabber на примере трансляции новостей с OpenNet |
[исправить] |
Введение
Получаем новости с сайта 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.dev/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
|
|
|
|
Раздел: Корень / Программисту и web-разработчику / Shell / Готовые скрипты |
1.1, Johny (?), 11:10, 18/02/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Ну во первых, sqlite тут избыточен, достаточно просто хранить id последней отправленной новости.
Во вторых , ну хотя бы проверку на успех можно было сделать?
| |
|
2.2, Ksaelan (?), 13:01, 23/02/2017 [^] [^^] [^^^] [ответить]
| +/– |
а в третьих - подписаться на RSS и не изобретать велосипедов. А то код ради кода это конечно похвально, но безполезно
| |
|
3.5, Aviv (ok), 13:15, 26/02/2017 [^] [^^] [^^^] [ответить]
| +/– |
RSS это очень хорошо, но не всегда помнишь о том, что хотел что-то нужное\полезное почитать. А так приходят сообщения - удобно
| |
3.10, freehck (ok), 19:49, 20/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
Именно. Или NNTP.
1) gwene.ru.opennet.opennews.opennews.full
2) gwene.ru.opennet.opennews.opennews.mini.full
| |
|
|
1.4, Aviv (ok), 13:13, 26/02/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Выдает две ошибки
Error: near ")": syntax error
Error: no such table: news
Где искать проблему?
| |
1.6, nvb13 (?), 03:31, 02/03/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
News TEXT UNIQUE,);" Необходимо убрать запятую.
News TEXT UNIQUE);"
| |
|
2.7, Aviv (ok), 11:16, 04/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
Старая ошибка пропала, появилась новая
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)
| |
|
1.8, nvb13 (?), 07:05, 11/03/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Попробуйте поменять
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"
| |
1.11, Аноним (-), 21:45, 23/03/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
> msg_tmp="/tmp/$(( ( RANDOM % 25400 ) + 1 ))"
Расскажите ему кто-нибудь про mktemp(1). И про shellcheck заодно, чтобы не позорился.
| |
|