irssi, python i last.fm
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.