第2回 ビュークラスとZPTを使って簡易RSSリーダ作成

田原 悠西

2008/9/11

Webブラウザからの入力に対応させる

 最後に、Webブラウザからの入力に対して動的に処理する機能を追加したいと思います。新しいapp.pyは次のようになります。

import grok
import urllib
import xml.dom.minidom

class Sample(grok.Application, grok.Container):
    pass

class Index(grok.View):
    pass # see app_templates/index.pt

class HelloWorld(grok.View):
    pass

class RSSViewer(grok.View):

    def getEntries(self):
        url = self.getRssUrl()
        data = urllib.urlopen(url).read()
        document = xml.dom.minidom.parseString(data)
        result = []
        for item in document.getElementsByTagName('item'):
            entry = {}
            for node in item.childNodes:
                if node.nodeType==xml.dom.Node.ELEMENT_NODE:
                    if len(node.childNodes):
                        entry[node.nodeName] = node.childNodes[0].data
            result.append(entry)
        return result

    def getRssUrl(self):
        return self.request.get('rss_url') or default_rss_url

default_rss_url = 'http://www.zope.org/Planet/planet_rss10.xml'

 追加したのは、getRssUrlというメソッドです。ここで、requestオブジェクトからrss_urlという名前の値が取得できれば、それをRSSのURLとしてエントリーを取得する処理を行います。入力がなければ、デフォルトのPlanetZope.orgのRSSを使います。

 次に、新しいZPT rssviewer.ptです。

<html>
<head>
</head>
<body>
<h1>RSS Viewer</h1>

<form action="" tal:attributes="action view/url">
<input type="text" name="rss_url" value="" size="50" tal:attributes="value view/getRssUrl">
<input type="submit">
</form>

<div tal:repeat="entry view/getEntries">
  <h2>
    <a href=""
        tal:attributes="href entry/link"
        tal:content="entry/title">
    </a>
  </h2>
  <div tal:replace="structure entry/description"></div>
  <div tal:content="python:entry.get('dc:date')"></div>
</div>
</body>
</html>
app_templates/rssviewer.pt

 追加したのは、HTMLページ上部のformタグです。ここで、rss_urlという名前でユーザーが値を入力できるようにしています。formタグのaction属性は動的に生成しています。これは、ビューに確実にサブミットするために使っています。

 それでは、サーバを再起動して、変更を確かめてみてください。例えば、@IT Coding EdgeのRSS「http://rss.rssad.jp/rss/itmatmarkit/fcoding/rss2dc.xml」を入力してサブミットすれば、Coding Edgeフォーラムの最新情報が表示されます。

 さて、今回はビューの基本的な使い方が分かりました。Python以外はデータベースやWebサーバさえも事前に準備する必要がないので、お手軽に始めることができたかと思います。

 次回は、本格的なアプリケーションの作成を通して、データを保存する方法と高レベルなビュー機能について取り上げます。お楽しみに。

3/3
 

Index
ビュークラスとZPTを使って簡易RSSリーダ作成
  Page1
プロジェクトディレクトリの確認
ひな型のアプリケーションの仕組み
ビューの追加
  Page2
動的なビューを作るプログラム
ビュークラスを使うZPTを追加する
Page3
Webブラウザからの入力に対応させる
Zope 3とは何ぞや?

 Coding Edgeお勧め記事
いまさらアルゴリズムを学ぶ意味
コーディングに役立つ! アルゴリズムの基本(1)
 コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう
Zope 3の魅力に迫る
Zope 3とは何ぞや?(1)
 Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか?
貧弱環境プログラミングのススメ
柴田 淳のコーディング天国
 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く?
Haskellプログラミングの楽しみ方
のんびりHaskell(1)
 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう
ちょっと変わったLisp入門
Gaucheでメタプログラミング(1)
 Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

>

Coding Edge 記事ランキング

本日 月間