Pythonで２ちゃんねる投稿通知アプリを作ってみた

前回作成した[*Pythonでネットニュース通知アプリを作ってみた*](http://qiita.com/NoB__G/items/5be8a927d804bbb57c06)に２ちゃんねる投稿通知機能を追加しました。

#やりたいこと
前回作成したネットニュース通知アプリに、２ちゃんねるスレッドの投稿も通知する機能を追加する。
頻繁に投稿されないけど、チェックはしておきたいスレッドを対象とする。
通知レイアウトはネットニュース通知と同等とする。

・通知時の見え方(アイコンクリックで対象スレッドにジャンプ)
![スクリーンショット 2015-01-28 21.38.45.png](https://qiita-image-store.s3.amazonaws.com/0/54999/de468b67-db78-754f-75e6-43b3b70dcb33.png)

・通知に気づかなくてもストックされる
![スクリーンショット 2015-01-28 21.39.22.png](https://qiita-image-store.s3.amazonaws.com/0/54999/b0b4db79-2c54-1597-0417-a9da1b20ff2a.png)

#参考にした資料
[Pythonでニュース速報(嫌儲)のスレッド一覧を取得してみる。](http://qiita.com/kurehajime/items/361ecab560d7f49f00b9)

#作成手順
全２工程で作成

1.mdfmonitorを改修
　・改修箇所
　　ネットニュースの記事取得処理
　
　ネットニュースの記事取得処理に、２ちゃんねるの投稿取得処理を追加しました。

```py:mdfmonitor.py
def _get_text(self, url):
    try:
        l=[]
        if (url.find("blog.esuteru") >= 0): 
            title = urladrs = icon = []
            for line in requests.get(url).iter_lines():
                # get title
                if line.find("<h2>") >= 0:
                    title = re.sub(".*html\">", "", line)
                    title = re.sub("</a>.*", "", title)
                # get url 
                if line.find("<h2>") >= 0:
                    urladrs = re.sub(".*href=\"", "", line)
                    urladrs = re.sub("\">.*", "", urladrs)
                # get icon
                if re.search("<img src=.* class=\"pict.*\"", line):
                    icon = re.sub("\s.*<a.*img src=\"", "", line)
                    icon = re.sub("\" width.*", "", icon)

                if title and urladrs and icon:
                    l.append([title, urladrs, icon])
                    title = urladrs = icon = []
        elif (url.find("2ch.sc") >= 0): 
            for line in requests.get(url).iter_lines():
                if re.search("<dt>.*<br>", line):
                    comment = re.sub("<dt>.*<dd>", "", line)
                    comment = re.sub(" <br> ", " ", comment)
                    comment = re.sub("<br><br>", "", comment)
                    comment = re.sub("<a href=.*gt;", ">>", comment)
                    comment = re.sub("</a>", "", comment)
                    comment =  unicode(comment, "cp932", 'ignore')
                    comment =  comment.encode('utf-8')
                    l.append([comment, url, "http://www.2ch.sc/img/2ch-logo-fix.gif"])
        return l
    except requests.exceptions.ConnectionError:
        raise ConnectionError("Monitor can't connect the server of url you added.")
```

2.mdfmoniter.pyを呼び出すnewsmoniter.pyは下記２点を改修。
　・通知対象URLの追加
　・通知センターのタイトルをURLにより動的に変える

```diff:newsmoniter.py
tmp $ diff -u org/newsmoniter.py new/newsmoniter.py 
--- org/newsmoniter.py	2015-01-28 22:14:51.000000000 +0900
+++ new/newsmoniter.py	2015-01-28 22:14:32.000000000 +0900
@@ -9,10 +9,15 @@
 
 # append file to mdfmonitor instance
 monitor.add_url("http://blog.esuteru.com")
+monitor.add_url("http://nozomi.2ch.sc/test/read.cgi/pcqa/1419898591/l50")
 
 for mdf in monitor.monitor():
     for title, urladrs, icon in mdf.diff:
-        cmd = "/usr/local/bin/terminal-notifier -title new! -message \"{0}\" -open {1} -sound Submarine -appIcon {2}".format(title, urladrs, icon)
+        if (mdf.url.find("2ch.sc") >= 0):
+            sitename = "２ちゃんねる"
+        else:
+            sitename = "はちま起稿"
+        cmd = "/usr/local/bin/terminal-notifier -title {0} -message \"{1}\" -open {2} -sound Submarine -appIcon {3}".format(sitename, title, urladrs, icon)
         f2 = open("/usr/local/bin/news_cmd.sh", "w")
         f2.write(cmd)
         os.chmod("/usr/local/bin/news_cmd.sh", 0777)
```

#今後やりたいこと
本ツールをpepper君へ移植し、新着記事は胸のタブレットに表示させる。
また、メッセージはpepper君にしゃべらせてみる。

#動作確認環境
・OS X Mavericks 10.9.5
・Python 2.7.5
・terminal-notifier 1.6.1