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

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

https://github.com/alice1017/mdfmonitor

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

**mdfmonitor** contains:

 - **FileModificationMonitor**
 - **URLModificationMonitor**

## FileModificationMonitor

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

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

### 使い方

シンプルに使えます。

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


```python
#!/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文を使って処理を描いて下さい。

```python
#!/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の強み

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

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

## インストール方法

Pythonのモジュールなので、`pip`や`easy_install`が使えます。

``shell
$ sudo easy_install mdfmonitor
```

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

```shell
$ 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** を実装することが可能です。