14

feedparser と etags を使用して変更されていない RSS フィードをスキップしようとしています。ドキュメントのガイドラインに従う: http://pythonhosted.org/feedparser/http-etag.html

import feedparser

d = feedparser.parse('http://www.wired.com/wiredscience/feed/')
d2 = feedparser.parse('http://www.wired.com/wiredscience/feed/', etag=d.etag)

print d2.status

これは以下を出力します:

200

このスクリプトは 304 を返すべきではありませんか? 私の理解では、RSS フィードが更新されると etag が変更され、一致する場合は 304 が返されるはずです。

期待した結果が得られないのはなぜですか?

4

1 に答える 1

21

どうやら、このサーバーは「If-Modified-Since」ヘッダーをチェックするように構成されているようです。最終変更時刻も渡す必要があります。

>>> d = feedparser.parse('http://www.wired.com/wiredscience/feed/')
>>> feedparser.parse('http://www.wired.com/wiredscience/feed/', 
                     etag=d.etag, modified=d.modified).status
304
>>> feedparser.parse('http://www.wired.com/wiredscience/feed/', 
                     etag=d.etag).status
200
于 2013-05-27T09:17:31.583 に答える