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 [ ]: