ニュースサイトのAPIを使った掲示板 改め、ニュースサイトを読み込んだ結果を表示する掲示板

今日の作業内容は次の通り。

  • サイトのAPIを使うことは諦めた。
  • フィードを解析するものにしようとしたが、家に帰らないと十分な調査ができないのでやり方がよくわからない。
  • HTMLParseの適切な方法も見つからず。
  • なのでurlopenして力技でParseした。でもhttp://www.nikkei.co.jp/news/main/でしか使えない。
  • www.nikkei.co.jp/news/main/が更新されてもちゃんと動作することを祈る。

その結果、こんなコードになった。

# encoding: utf-8
# ---------------------------------------------------------------------------
#   messageb5.py                                       (2008/10/14)
# ---------------------------------------------------------------------------
import wx
import time
import urllib

class MyApp(wx.App):
    def __init__(self):
        wx.App.__init__(self)
        self.wlength = 350
        self.hlength = 80

        self.frm = wx.Frame(None, -1, u"日経ネット", size=(self.wlength, self.hlength))
        self.pnl = wx.Panel(self.frm, -1)
        self.frm.Show()
        self.ReadURL()

        self.n = 2       # このマジックナンバーをどうにかする。
        self.l = self.wlength
        self.tid = wx.NewId()
        self.t = wx.Timer(self.frm, self.tid)
        self.Bind(wx.EVT_TIMER, self.OnTimer, id=self.tid)
        self.t.Start(30)

    def OnTimer(self, event):
        self.l -= 1
        self.pnl.DestroyChildren()
        self.txt = wx.StaticText(self.pnl, -1, self.topics[self.n], pos=(self.l, 10))
        if self.l <= -self.wlength:
            self.l = self.wlength
            self.n += 1
            if self.n +1 > len(self.topics):
                self.t.Stop()

    def ReadURL(self):
    # ニュースサイトの読み込み
        u = "http://www.nikkei.co.jp/news/main/"
        f = urllib.urlopen(u)
        data = f.read().split()
        self.topics = []
        for i in xrange(len(data)):      # この部分汎用性なし
            if data[i].find('N-headLine')!= -1\
                and data[i].find('>')!=-1 and data[i].find('&gt') == -1:
                self.topics.append(data[i][data[i].find('>')+1:data[i].find('<')])
        f.close()
        
app = MyApp()
app.MainLoop()

実行結果。



動いた!

気づいたこと

  • 日本語文字列をリストに入れてリストをprintしたら文字化けしてた。
  • Parseはもっとスマートにやりたい。