XMPPボット-Python実行環境の準備

Last-modified: 2014-08-16 (土) 12:41:50 (2015d)

[ 前のページ : XMPPボット-クライアントの導入 | ]

Pythonモジュールの用意

まず、PythonでBotを動作させるにあたり、追加のモジュールが必要です。 WindowsとLinux(Fedora9)で導入方法が大きく異なります。

Pythonは、2.5に対応します。それより新しくなると、ハッシュ化関数のパッケージの名前が変わっていたりして若干使いづらくなります。

2008年末の段階で、Python2.5が一番簡単だと個人的には思います。

Linux の場合

Python自体は標準インストールで入っていると思います。

Fedora 9

xmppモジュールは、Fedora9ではパッケージがリポジトリに登録されているため、yumでインストールできます。

# yum install python-xmpp
python-install-yum.png

python-dnsパッケージに依存していますが、自動で入ります。

Ubuntu 8

ubuntuのリポジトリにもパッケージは登録されていましたので、同様に

$ sudo apt-get install python-xmpp
$ sudo apt-get install python-dns

でインストールできます。python-dnsパッケージは自動でインストールされなかったため、手動で入れます。

それぞれパッケージ管理システムを使わない場合のインストール方法は下記のWindowsと一緒です。
その場合、setup.py を動作させるために、python-devel パッケージが別途必要です。

Windowsの場合

Windowsではパッケージ管理システムなどはありませんので、一つ一つ個別にインストールしてきます。

Python本体

http://www.python.org/download/

ここからダウンロードできます。バージョン2.5系の最終版が一番トラブルが少ないと個人的には思っています。

インストーラがあると思いますので、ダブルクリックでインストールしてください。

xmpppy

http://sourceforge.net/project/showfiles.php?group_id=97081

ここからダウンロード可能です。xmpppy の最終バージョン、tar.gz形式をダウンロードしてください。

pydns

http://sourceforge.net/project/showfiles.php?group_id=31674

xmpppyを正常動作させるために必要です。最終バージョン、tar.gz形式をダウンロードしてください。

xmpppy,pydnsをそれぞれtar.gzを伸張・展開してください。

7ziplhazなどで展開できます。

それぞれ、中に setup.py が入っていると思いますので、コマンドプロンプトを使って

python setup.py build
python setup.py install

とコマンドを打って、インストールします。

Python+XMPPモジュールの動作確認

コマンドプロンプト上で python と打つと pythonコンソールが起動します。

>>> import xmpp

と入力し、何もエラーが出ずにプロンプトが帰ってきた場合は、インストール自体は完了しています。エラーが表示される場合はXMPPモジュール(xmpppyかpydns)のインストールに失敗している可能性が高いです。

引き続き、このpythonコンソール上からIMを送信してみます。ejabberdサーバの5222ポートがファイアウォールで閉じられている場合、設定を変更してあけておいてください。

>>> cnx = xmpp.Client('example.com',debug=[])
>>> cnx.connect( server=('192.168.0.4',5222) )
>>> cnx.auth('user02','PASSWORD', 'console')
>>> cnx.send( xmpp.Message( "user01@example.com" ,"Hello World form Python" ))

これで、インスタントメッセージが送信されると思います。

hello-world-from-python.png

おおよそは見てわかると思いますが…

example.com
jabberドメイン名
192.168.0.4
サーバのアドレス。jabberドメイン名でDNSが引けるのであれば、jabberドメイン名と同じで良い。
5222
jabberのポート番号
user02
ejabberdにログインするユーザー名。
PASSWORD
ログインユーザーのパスワード
console
ログインユーザーのリソース情報。任意文字列で良い。
user01@example.com
送信先ユーザーアカウント
Hello World form Python
送信文字列

です。

送信機能のみ、スクリプト化

sendxmpp.py

#!/usr/bin/python
# sendxmpp.py

import sys
import xmpp

if len(sys.argv) <= 2 :
        print "Usage: ",sys.argv[0]," <Jabber-id> <Message>"
        sys.exit(0)

CONFIG={
        'domain'  :'example.com',
        'server'  :'192.168.0.4',
        'userid'  :'test-bot',
        'password':'PASSWORD',
        'resource':'sendxmpp',
}
cnx = xmpp.Client(CONFIG['domain'],debug=[])
cnx.connect( server=(CONFIG['server'],5222) )
cnx.auth(CONFIG['userid'],CONFIG['password'],CONFIG['resource'])
cnx.send( xmpp.Message( sys.argv[1] ,sys.argv[2] ))

このようなスクリプトにしておけば

$ ./sendxmpp.py user01@example.com "Message test."

といったコマンドでメッセージが送信できて便利です。

cronなどで定期的にメッセージを送信するだけなら、これで十分かもしれません。