07.03.2011

Python a Jabber (knihovna xampp)

Ukážeme si jak napsat jednoduchý program v pythonu používající jabber. Program bude schopný odesílat zprávy přes protokol xampp a využívající stejnojmenou knihovnu.

Abychom mohli pracovat v pythonu s protokolem xmpp, který využívá jaber, musíme si nejprve doinstalovat potřebnou knihovnu:

sudo apt-get install python-xmpp

Nyní se podíváme na jednuduchou třídu, která bude odesílat zprávy. V první části si naimportujeme potřebné knihovny.

#!/usr/bin/python
import sys,os

try:
	import xmpp
except:
	print ("%s") % "Knihovna xmpp neni instalovana"

Vytvoříme si metodu konstruktoru, který nám bude ukládat a zpřístupňovat konfiguraci uloženou na disku. Při prvním spuštění se nám v naší domovské složce vytvoří soubor ".xsend", do které uložíme příštupové hodnoty na jabberovský účet. Seznam kontaktů slouží jen k urychlení přístupu adres, na které budeme odesílat zprávy.

class jabber:
	def __init__(self):
		self.jidparams={}
		if os.access(os.environ['HOME']+'/.xsend',os.R_OK):
		    for ln in open(os.environ['HOME']+'/.xsend').readlines():
        		key,val=ln.strip().split('=',1)
		        self.jidparams[key.lower()]=val

		for mandatory in ['jid','password']:
		    if mandatory not in self.jidparams.keys():
        		open(os.environ['HOME']+'/.xsend','w').write('#JID=romeo@montague.net\n#PASSWORD=juliet\n')
		        print 'Please ensure the ~/.xsend file has valid JID for sending messages.'
        		sys.exit(0)

		#seznam kontaktu
		self.list= [
			"user1@mail.com",
			"user2@mail.com",
		]


	def get_list(self):
		return self.list

Metoda zajišťující připojení k serveru bude vypadat velice jednoduše.

	def connect(self):
		jid=xmpp.protocol.JID(self.jidparams['jid'])
		self.cl=xmpp.Client(jid.getDomain(),debug=[])

		self.cl.connect()
		auth = self.cl.auth(jid.getNode(),self.jidparams['password'])

		if not auth:
			print ("nemohu se pripojit")
			exit(0)

Poslední metodou bude odeslání zprávy na adresu vybranou podle indexu z nadefinovaného seznamu.

	def send(self,tojid,text):
		print ("send to %s") % (self.list[int(tojid)])
		#self.cl.sendInitialPresence()
		self.cl.send(xmpp.protocol.Message(self.list[int(tojid)],text))

Teď už stačí jen vytvořit hlavní část programu, která bude pracovat s naší nadefinovanou třídou. Program bude jako první parametr brát číslo určující index uživatele, kterému bude zpráva poslána a jako drouhý argument text zprávy, např, python prog.py 0 "Testovací zpráva".

oj = jabber()
oj.connect()

text=' '.join(sys.argv[2:])
oj.send(sys.argv[1],text)

Práce s knihovnou xampp je jednoduchá a její využití může být velké. Příkladem může být zapasování do djanga na odesílání informací o chybách nebo aktivitě uživatelů, popřípadě informování o chybových stavem na serverů.