pagenoare's devblog

python ftw!

irssi, python i last.fm

| written by pagenoare, on May 23, 2009 11:43:00 AM.

Wiele razy już informowałem o zmianie klienta irc, a to z irssi na weechat i odwrotnie. Migracja z irssi na wee była spowodowana faktem, iż w weechacie mogłem pisać pluginy w pythonie a w irssi tylko w perlu. Ostatecznie jednak wygrało irssi, bo ma lepszy system logowania, a plugin do last.fm’a sobie poprawiłem. Do czasu. Zaczęło mnie wkurzać, że piosenki z /np (now playing) są pokazywane z opóźnieniem, tzn słucham XXX, wcześniej słuchałem YYY to zamiast XXX wyświetla, że słucham YYY :-/. Dzisiaj usiadłem i skompilowałem irssi-python, było ciężko, ale udało się, więc opiszę ten proces na blogu. Później było już z górki, napisanie pluginu w pythonie to prościzna.

Zaczniemy od ściągniecia irssi - najnowsza nie działa z irssi-python (mi się wywalało). Użyjemy wersji 0.8.12, którą można ściągnąć tutaj.

wget http://irssi.org/files/irssi-0.8.12.tar.gz

Rozpakujmy i odpalmy configure - jeśli się coś wywali, należy doinstalować zależności.

tar -zxvf irssi-0.8.12.tar.gz
cd irssi-0.8.12/
./configure

Następnie ściągniemy irssi-python z svn.

cd ..
svn co http://svn.irssi.org/repos/irssi-python/
cd irssi-python/

Skorzystamy ze skryptu, którego znalazłem, z moim patchem.

Patch

 #AC_PREREQ(2.59)
 AC_INIT(irssi-python, test3, loafier@gmail.com)
-AC_CONFIG_SRCDIR([src/pyconstants.c])
-AC_CONFIG_HEADER([pyirssi-config.h])
+AC_CONFIG_SRCDIR([src/pycore.c])
+AM_CONFIG_HEADER(pyirssi-config.h)
 AM_INIT_AUTOMAKE([irssi-python], [test3])
 AM_DISABLE_STATIC
 AM_PROG_LIBTOOL
@@ -63,5 +63,5 @@
 #AC_CONFIG_FILES([src/Makefile src/objects/Makefile])
 #AC_OUTPUT([Makefile src/Makefile src/objects/Makefile])
 #AC_OUTPUT([Makefile src/Makefile src/objects/Makefile])
-AC_CONFIG_FILES([Makefile scripts/Makefile docs/Makefile src/Makefile src/objects/Makefile])
+AC_CONFIG_FILES([Makefile scripts/Makefile  src/Makefile src/objects/Makefile])
 AC_OUTPUT

build.sh

#!/bin/bash
patch -p0 < patch
sed -i 's/ docs//' Makefile.am &&
cp /usr/share/aclocal/ac_python_devel.m4 . &&
libtoolize -f -c &&
aclocal --force -I. &&
autoheader -f &&
autoconf -f &&
automake -a -c --gnu --foreign &&
./configure --with-irssi="$1" &&
make -C src constants &&
make &&
echo -e "\n\n***\nAll done!"

Zapiszmy go jako build.sh i dajmy prawa uruchamiania, oraz odpalmy go.

chmod +x build.sh
./build.sh ../irssi-0.8.12

Następnie już tylko make install, przeniesienie plików i irssi-python zainstalowany.

sudo make install
sudo mv /usr/local/lib/irssi/modules/libpython.* /usr/lib/irssi/modules

W irssi::

/load python
/py exec print "test"

Jeśli zobaczymy napis test to znaczy, że wszystko działa.

np plugin

#!/usr/bin/python
# -*- coding: utf-8 -*-

import irssi
import feedparser

username = 'pagenoare'

def nowplaying(data, server, witem):
    d = feedparser.parse('http://ws.audioscrobbler.com/2.0/user/%s/recenttracks.rss' % username)
    title = d.entries[0].title

    if not server or not server.connected:
        irssi.prnt("Not connected to server")
    if isinstance(witem, irssi.Channel) or isinstance(witem, irssi.Query):
        witem.command("/me slucha %s" % title.encode('utf-8'))

irssi.command_bind('np', nowplaying)

Wymaga feedparser

Opierałem się na tym tutorialu.

Comments

Leave a Reply