Видео ролики бесплатно онлайн

Смотреть 18 лет видео

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

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

01.11.09 17:11 masai

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

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

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

Итак, нам потребуется библиотека. Они есть в репозиториях Debian (да и других популярных дистрибутивов), поэтому устанавливаем как обычно:
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
#!/usr/bin/python
import sys,os,xmpp,time,ConfigParser

name = os.path.basename(sys.argv[0])

if len(sys.argv) < 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', '[email protected]/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 и для запуска скритов из него достаточно указать их имена. В любом случае нужно разрешить выполнение нашей программки:
chmod +x jsend

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

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

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

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

отправит информацию о заполненности разделов на дисках пользователю [email protected].

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

Кросспост



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

а если серъезно то мну метает о хмпп либе на баше или хотя бы о парсилке хмл, а то самому так лениво...
yuretsz 02.11.09 02:09 # +1
Я пользуюсь xml2, помогает для многих xml задач.
masai 02.11.09 08:19 # +0
О! Не знал, спасибо!
idler 01.11.09 23:03 # +0
Спасибо, мега-полезно
h31 02.11.09 12:54 # +1
Интересно. Как раз то, что нужно для ботов.
А как насчет D-Bus/XML-RPC вместо gajim-remote?
nemckoff 04.11.09 05:23 # +0
Ещё отлично с командной строки можно отправить сообщение через centerim, бывший centericq.
blasux 18.11.09 15:11 # +1
Отлично слать сообщения (и не только) из командной строки можно с помощью hatexmpp.

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 153)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 3080 из 227 городов)
            Топ пользователей Топ блогов

            Новенькие: sozinho, Whiter, Stixy90, slashdc, jpff
            welinux.ru

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

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


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

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

            School смотреть онлайн