Python で Skype にロギングする
id:moriyoshi さんが "Linux上で動くSkype用のbotを作る方法" というブログを書かれていたので便乗します。会社で Python から Skype へログを出力するためのハンドラーを試験的に使っていました。便利ですが、利用はお勧めしません。理由は最後に書きます。
コードはこんな感じになります。
# -*- coding: utf-8 -*-
# skype_handler.py
from logging import Handler
try:
import Skype4Py
skype = Skype4Py.Skype()
except:
skype = None
if skype and not skype.Client.IsRunning:
# Skype が起動してなかったら起動する
skype.Client.Start()
class SkypeHandler(Handler):
u"""Skype 用ハンドラ
Args:
group_name - Skype group name
encoding - encoding (Default: 'utf-8')
この例では、ブックマークしたグループに対してログを出力します。
`get_chat` を変えたら個人に送信できたりします。
"""
@staticmethod
def get_chat(group_name):
u"""指定したグループ名のチャットをブックマークから取得"""
if skype is None:
return None
for chat in skype.BookmarkedChats:
if chat.FriendlyName == group_name:
return chat
return None
def __init__(self, group_name, encoding='utf-8'):
u"""Create SkypeHandler Instanse"""
Handler.__init__(self)
self.chat = SkypeHandler.get_chat(group_name)
self.encoding = encoding
def send(self, record):
if self.chat is None:
return
message = self.format(record)
if type(message) is not unicode:
message = unicode(message, self.encoding)
self.chat.SendMessage(message)
def emit(self, record):
try:
self.send(record)
except (KeyboardInterrupt, SystemExit):
raise
except:
self.handleError(record)
使い方はこんな感じ。
# -*- coding: utf-8 -*-
# test.py
import logging
import skype_handler
# Skype チャット名 (ブックマークしたやつ)
CHAT_NAME = 'Test'
# ロガー (`my_logger`) を作成
my_logger = logging.getLogger('my_logger')
my_logger.setLevel(logging.DEBUG)
# Skype ハンドラーを作成
handler = skype_handler.SkypeHandler(CHAT_NAME)
# ロガーに Skype ハンドラーを追加
my_logger.addHandler(handler)
my_logger.debug(u"ほげ")
Skype にログがはかれます。時間はリアルタイムだし、ある程度負荷をかけてもちゃんと出力してくれるし、サーバ毎に skype ユーザ変えるとログ管理も簡単だし、、、。
ですが!使わないほうがいいです。最初はさくさく動いてくれてて問題なかったのですが、しばらく使っていると子ノードがいっぱいになったのか、ブラジルとかコートジボアールとかからもっすごい量のパケットを受信し始めちゃいました orz でっネットワークに負荷がかかり "やめろ" とお叱りが・・・。自宅で使ってる分にはなんの問題もでてないですが、会社でやっちゃうとネットワーク管理者に怒られるかも。
是非使ってみてくださいw
コメント
コメントを投稿