LoginSignup
9
11

More than 5 years have passed since last update.

ファイルやURLの更新をモニタリングするモジュールをつくった

Last updated at Posted at 2014-03-25

mdfmonitor - ファイルとURLの更新をモニタリング

mdfmonitorは、ファイルのタイムスタンプやURLのDataヘッダーを使って、ファイルやURLの更新をモニタリングするPythonモジュールです。

mdfmonitor contains:

  • FileModificationMonitor
  • URLModificationMonitor

FileModificationMonitor

FileModificationMonitor(これ以降「monitor」と呼びます)は、 ファイル の更新をモニタリングします。

Monitorはファイルの タイムスタンプデータファイルの中身のデータ を持つリポジトリを持っています。まず最初にオリジナルなタイムスタンプデータとファイルの中身のデータを挿入します。次に、新しくタイムスタンプデータ、ファイルの中身データを取得し、これら古いデータと新しいデータを 比較 して、異なっていた場合、それを 更新 とみなし、オブジェクトにしてyieldします。

使い方

シンプルに使えます。

  1. モジュールをimportします
  2. FileModificationMonitorのインスタンスを作ります
  3. ファイルを登録します
  4. monitorメソッドがモニタリングを開始し、オブジェクトを返すのでfor文を使って処理を描いて下さい。
#!/usr/bin/python

import os
from mdfmonitor import FileModificationMonitor

files = os.listdir(".") # >>> ['sample.txt', 'sample.py']

# create Watcher instnce
monitor = FileModificationMonitor()

# append file to mdfmonitor instance
monitor.add_file("sample.txt")

# or 
# append files to mdfmonitor instance
monitor.add_files(os.listdir("."))

for mdf in monitor.monitor():

    print mdf.file.center(30, "=")
    print "Catch the Modification!!"
    print "Old timestamp: %s" % mdf.old_mtime
    print "New timestamp: %s" % mdf.new_mtime
    print "manager: %s" % str(mdf.manager.o_repository)
    print "Diff".center(30,"=")
    print mdf.diff

URLModificationMonitor

URLModificationMonitor(これも「monitor」と呼びます)は、URLのコンテンツの更新をモニタリング出来ます。

Monitorの構造はだいたいFileModificationMonitorと同じです。
違うところはタイムスタンプデータじゃなくて、URLのResponseヘッダーについてくる Date ヘッダーを使用して更新を見つけているところ。

使い方

これもだいたい同じ。

  1. モジュールをimportします
  2. URLModificationMonitorのインスタンスを作ります
  3. URLを登録します
  4. monitorメソッドがモニタリングを開始し、オブジェクトを返すのでfor文を使って処理を描いて下さい。
#!/usr/bin/python

import os
from mdfmonitor import URLModificationMonitor

files = os.listdir(".") # >>> ['sample.txt', 'sample.py']

# create Watcher instnce
monitor = URLModificationMonitor()

# append file to mdfmonitor instance
monitor.add_url("http://sampe.com/path/")

for mdf in monitor.monitor():

    print mdf.url.center(30, "=")
    print "Catch the Modification!!"
    print "Old timestamp: %s" % mdf.old_dtime
    print "New timestamp: %s" % mdf.new_dtime
    print "manager: %s" % str(mdf.manager.o_repository)
    print "Diff".center(30,"=")
    print mdf.diff

mdfmonitorの強み

① 差分
FileModificationMonitorURLModificationMonitor どちらも ModificationObject というオブジェクトをyieldするのですが、このオブジェクトには新しいBodyデータと、古いデータがあり、それに基づいて diff という差分文字列を生成します。(Pythonのdifflibといモジュールを使用しています)

ModificationObjectManager
更新に履歴はつきものですよね。
ModificationObjectManagerは、その履歴を保存するクラスです 。
Managerのo_repositoryという配列には、更新のオブジェクトが挿入されており、その配列がそのまま更新の履歴になります。

インストール方法

Pythonのモジュールなので、pipeasy_installが使えます。

shell
$ sudo easy_install mdfmonitor
`

それか、gitを使って下さい

$ git clone https://github.com/alice1017/mdfmonitor.git
$ cd mdfmonitor
$ sudo pyton setup.py build install

LICENSE

MITライセンスです

というわけで

というわけで、mdfmonitorの紹介でした。
PYPIで探したところ、こういうモジュールはあまりなかったので、改めて作ってみました。READMEやdocstringの英語がひどいのは仕様です。

「もっとこういう設計にしたほうがいい」とか、「バグがある」とかいう場合はgithubにプルリクかコメントお願いします。

mdfmonitorを使って何ができるか

mdfmonitorは、ファイルの更新をモニタリングするスクリプトなので、
git でバージョン管理している人は、自動 add や自動 commit を実装することが可能です。

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11