Extensible Messaging and Presence Protocol (XMPP) (predtým známy ako Jabber) je protokol používaný na sieťovú komunikáciu, podobne ako AIM, ICQ, MSN alebo Skype.
XMPP je súbor protokolov a technológií založených na XML, ktoré umožňuje akýmkoľvek dvom entitám na internete vzájomne si vymieňať textové správy, informácie o prítomnosti, a ďalšie štruktúrované informácie v (takmer) reálnom čase.
Zoznam verejných jabber serverov: https://xmpp.net/directory.php
Opensource jabber servery: https://www.ejabberd.im/, https://prosody.im/
Podrobný popis inštalácie na Ludolphovej wiki: https://github.com/erigones/Ludolph/wiki/How-to-install-and-configure-Ludolph
Na meetupe budeme inštalovať Ludolpha do virtual environments, resp pyvenv (izolované virtuálne prostredie, ktoré umožnuje inštalovať balíky rôznych verzií nezávisle na balíkoch nainštalovaných v OS.).
In [1]:
pip install ludolph
In [ ]:
wget -O ~/.ludolph.cfg https://raw.github.com/erigones/Ludolph/master/ludolph/ludolph.cfg.example
V sekcii [xmpp] musíme zadefinovat username a password aby sa mal kam prihlásiť Ludolph po spusteni.
Máme plne funkčného Jabberbota, ktorý sa po spusteni prihlási a môžeme si ho pridať medzi priateľov a začať s ním komunikovať.
Podrobný popis tvorby pluginu na Ludolphovej wiki: https://github.com/erigones/Ludolph/wiki/How-to-create-a-plugin
Napísať si vlastný plugin do Ludolpha nie je nič zložité, Ludolph má predpripravený "hello_world" plugin projekt. Projekt slúži ako čo možno najjednoduchší príklad na vytvorenie pluginu a popisu dekorátorov. "hello_world" plugin je štrukturovaný ako inštalovateľný balíček pre PyPI. V prípade pluginu však stačí aby sa súbor nachádazal v python path, tj. aby import bol schopný importovať triedu.
Do "hello_world" pluginu si pridáme novú metódu, ktorá bude obsahovať nasledovný kód:
In [ ]:
import requests
def weather(self, msg):
apikey = 'xxxxxxxxxxxxxxxxxxxxxxxxx'
city = 'Bratislava,sk'
url = 'http://api.openweathermap.org/data/2.5/forecast/city?q=%s&APPID=%s&units=metric'
res = requests.get(url % (city, apikey)).json()
# Odpoved obsahuje atribut list, ktory obsauje zoznam odpovedi zodpovedajucich najdenemu mestu.
# Pre jednoduchost vyberieme prvu odpoved
try:
data = res['list'][0]
except IndexError:
return 'Zadane mesto %s nebolo najdene' % city
else:
return 'Teplota: %s, Popis: %s' % (data['main']['temp'], data['weather'][0]['description'])
In [ ]: