引き続き、「作ればわかる! Google App Engine for Java プログラミング」本にてPythonを修行中。
今回は今までのまとめのような感じ。
RSSをfeedparserで、XMLをlxmlで扱うやり方について学ぶことができた。
■実装時に困ったことと対応
gooのRSSを扱う方法
以下の記事によると、Pythonではいくつか方法があったが、使ったことがないfeedparserを使用してみることに。
めも帖 - PythonでRSSフィードなどを取得する
ダウンロード先がリンク切れとなっているので、Google Codeで同名のものがあったため、そちらを利用。
現時点での最新版は5.1.2、zipファイルをダウンロード・解凍。
すべてを配置すると非常に重いが、必要なのは、「/feedparser/feedparser.py」の一ファイルのみ。これを任意のフォルダへと配置するだけでOK。
使い方については、以下が詳しい。非常に簡単に扱える。
present - Python で RSS を取得する
Yahoo API の戻りXMLを扱う方法
chap7にて使用したlxmlが一番扱いやすそうなので、そちらを利用することに(端末にはインストール済)。
本では気づかなかったが、Yahoo APIの戻りXMLはxmlnsで名前空間指定していることから、それも考慮する必要がある(APIごとに異なる)。
- YAMAGUCHI::weblog - lxmlでXMLパースしたらnamespaceではまった
- スコトプリゴニエフスク通信 - lxmlメモ帳
- MyBASE - XML/XPath/XPathの書き方
実際に使ったコード例は、以下。text()の戻りがlistになるため、furigana[0]のように使う。
# ルビ振りサービスを呼び出す response = urlfetch.fetch( 'http://jlp.yahooapis.jp/FuriganaService/V1/furigana?appid=' + api_config.Yahoo.APPLICATION_ID + '&sentence=' + _encodeURIComponent(word) ) # 取得した単語を1つずつ処理する results = [] xml = etree.fromstring(response.content) entries = xml.xpath('//xs:Result/xs:WordList/xs:Word', namespaces={'xs':'urn:yahoo:jp:jlp:FuriganaService'}) for entry in entries: # xpathはlistで戻ってくる furigana = entry.xpath('./xs:Furigana/text()', namespaces={'xs':'urn:yahoo:jp:jlp:FuriganaService'}) if furigana[0] != '': # ふりがながあれば利用する results.append(furigana[0]) else: # ふりがながない(英数字など)場合は、単語をそのまま利用する alphameric = entry.xpath('./xs:Word/xs:Surface/text()', namespaces={'xs':'urn:yahoo:jp:jlp:FuriganaService'}) results.append(alphameric) return ''.join(results)
webapp2でリクエストされたURLを知る方法
知りたい内容そのものが以下の質問にあった。「self.request.path」でOK。
人力検索はてな - webapp2 でユーザが要求して来たURLを取得する方法を教えてください。
JavaScriptやCSSまわり
■ソース
GitHubのchap9へと追加。