Видео смотреть бесплатно

Смотреть 2022 видео

Официальный сайт seoturbina 24/7/365

Смотреть видео бесплатно

masai 01.11.2009 17:11

Tips & tricksОтправка jabber-сообщений из командной строки

О том, как отправить jabber-сообщение из консоли при помощи клиента Gajim, я уже писал ранее. Тем не менее, использование gajim-remote имеет ряд недостатков: нужно установить сам Gajim и запустить его. Это может вызвать некоторые затруднения, например, на сервере, где вовсе может не быть графического интерфейса. Однако, проблема имеет и более простое решение.

Сделаем скрипт, которому бы в качестве параметров передавались данные учётной записи jabber, JID отправителя и текст сообщения. В качестве основы возьмём питоновскую библиотеку xmpppy. В частности, рассмотрим повнимательнее один из примеров, входящих в её комплект, который (сюрприз!) как раз и предназначен для отправки сообщений из консоли. Остаётся только его чуть-чуть «допилить» по вкусу.

Итак, нам потребуется библиотека. Они есть в репозиториях Debian (да и других популярных дистрибутивов), поэтому устанавливаем как обычно:
1
sudo aptitude install python-xmpp python-dnspython


Без python-dnspython работать тоже будет, кстати. Но лучше поставить, так как в этом случае придётся вводить точное имя узла, на котором располагается сервер.

А вот и сам скрипт:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/python
import sys,os,xmpp,time,ConfigParser

name = os.path.basename(sys.argv<0>)

if len(sys.argv) &lt; 2:
print "Send a message via Jabber (XMPP)"
print "Syntax:", name, "JID text"
print "JID\trecipient's Jabber ID"
print "text\tmessage, use '-' for stdin"
sys.exit(0)

toJID = sys.argv<1>
if sys.argv<2> == '-':
text = ' '.join(sys.stdin.readlines())
else:
text = ' '.join(sys.argv<2:>)

configFile = os.path.join(os.environ<'HOME'>, '.' + name)
config = ConfigParser.RawConfigParser()

try:
config.read(configFile)
fromJID = config.get('Connection', 'JID')
password = config.get('Connection', 'Password')
except:
print "Default configuration was written to", configFile
config.add_section('Connection')
config.set('Connection', 'JID', 'user@example.com/home')
config.set('Connection', 'Password', '********')
f = file(configFile, 'w')
config.write(f)
f.close()
sys.exit(0)

fromJID = xmpp.protocol.JID(fromJID)
client = xmpp.Client(fromJID.getDomain(),debug=
)

conn = client.connect()
if not conn:
print 'Could not connect!'
sys.exit(1)
print 'Connected with', conn

auth = client.auth(fromJID.getNode(), password, resource=fromJID.getResource())
if not auth:
print 'Could not authenticate!'
sys.exit(1)
print 'Authenticated using', auth

messageID = client.send(xmpp.protocol.Message(toJID, text))
print 'Message was sent'

time.sleep(1)
client.disconnect()


Скрипт довольно простой, так что разбирать его работу не буду.

Всё это сохраняем в каталог «~/bin» под именем, например, «jsend». Имя и каталог значения не имеют, просто «~/bin» удобен для хранения пользовательских скриптов, так как он входит в переменную PATH и для запуска скритов из него достаточно указать их имена. В любом случае нужно разрешить выполнение нашей программки:
1
chmod +x jsend


Рассмотрим её работу. После первого запуска утилита создаёт в домашнем каталоге файл с JID и паролем отправителя. Это удобнее, чем вводить пароль в качестве параметра командной строки, так как в этом случае никто не сможет его подсмотреть. Да и доступ к файлу можно будет закрыть. Файл поличит имя, совпадающее с именем скрипта, но с точкой впереди, чтобы не отображаться лишний раз в списке файлов. В моём случае имя будет «~/.jsend». Естественно, файл после первого запуска нужно будет открыть и впесать свои JID и пароль.

Формат запуска скрипта:
1
jsend JID text


JID — это идентификатор получателя сообщения, а text — это собственно текст, который нужно отправить.

Если текста много или нужно отправить вывод какой-либо команды, то вместо text можно поставить «-». Например, команда
1
df | jsend user@example.com -


отправит информацию о заполненности разделов на дисках пользователю user@example.com.

Также можно настроить отправку сообщений в определённое время при помощи команды at, что тоже иногда оказывается удобным.

Кросспост


Тэги: Jabber xmpp консоль
+ 7 -
Похожие Поделиться

DEViANCE 01.11.2009 17:46 #
+ 1 -
Интересно. Спасибо, пригодится ;)
kapsh 01.11.2009 20:36 #
+ 0 -
А чем не устраивает старый добрый sendxmpp?
masai 01.11.2009 23:30 #
+ 0 -
Да я последний раз на перле лет пять назад что-то писал…
muhas 01.11.2009 21:05 #
+ 0 -
Отправка jabber-сообщений из командной строки
спасибо за 55 одну строку

а если серъезно то мну метает о хмпп либе на баше или хотя бы о парсилке хмл, а то самому так лениво...
yuretsz 02.11.2009 02:09 #
+ 1 -
Я пользуюсь xml2, помогает для многих xml задач.
masai 02.11.2009 08:19 #
+ 0 -
О! Не знал, спасибо!
idler 01.11.2009 23:03 #
+ 0 -
Спасибо, мега-полезно
h31 02.11.2009 12:54 #
+ 2 -
Интересно. Как раз то, что нужно для ботов.
А как насчет D-Bus/XML-RPC вместо gajim-remote?
nemckoff 04.11.2009 05:23 #
+ 0 -
Ещё отлично с командной строки можно отправить сообщение через centerim, бывший centericq.
blasux 18.11.2009 15:11 #
+ 2 -
Отлично слать сообщения (и не только) из командной строки можно с помощью hatexmpp.
splrlt 14.07.2014 23:22 #
+ 0 -
1
2
3
root@mail:~# ./sendxmpp.py root@****.***/work hello
An error occurred while looking up _xmpp-client._tcp.wnet.ua
Could not connect!



не запускается скрипт.
в питоне не силен. Может кто подскажет как исправить ?

Смотреть онлайн бесплатно

Онлайн видео бесплатно