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
コメント
コメントを投稿