7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-01-28

前回作成したPythonでネットニュース通知アプリを作ってみたに2ちゃんねる投稿通知機能を追加しました。

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

・通知時の見え方(アイコンクリックで対象スレッドにジャンプ)
スクリーンショット 2015-01-28 21.38.45.png

・通知に気づかなくてもストックされる
スクリーンショット 2015-01-28 21.39.22.png

#参考にした資料
Pythonでニュース速報(嫌儲)のスレッド一覧を取得してみる。

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

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

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は下記2点を改修。
 ・通知対象URLの追加
 ・通知センターのタイトルをURLにより動的に変える

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 = "2ちゃんねる"
+        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

7
9
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
7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?