Ludolph

Ludolph je jednoduchý XMPP klient napísaný v Pythone, ktorý dokáže odpovedať na správy podľa toho ako si ho naprogramujeme ;)

XMPP

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/

Instalacia Ludolpha

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


  File "<ipython-input-1-346069a824b0>", line 1
    pip install ludolph
              ^
SyntaxError: invalid syntax

Konfiguracia Ludolpha

ulozime si konfiguracny subor na miesto kde ho bude ludolph pri starte hladat:


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ť.

Pluginy v Ludolphovi

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.

Plugin na predpoveď počasia

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