feedparser谷歌appengine推迟没有条目?

时间:2011-01-03 20:46:30

标签: python google-app-engine feedparser

我在谷歌应用引擎中的延期任务中使用feedparser,如下所示:

class RSSFetchHandler(webapp.RequestHandler):
   def get(self):
      deferred.defer(parse_dk_indeed_com, feed)

然后在parse_dk_indeed_com我有以下代码段:

import feedparser
    def parse_dk_indeed_com(feed):
    d = feedparser.parse(feed.url)

我可以看到,当我记录asset.url时,它返回一个有效的URL,我知道feed中有项目。但是当我记录len(d['entries'])时它返回0?当我使用nosetest运行相同的代码段时,以下测试通过:

assert len(d['entries']) > 0

我错过了什么?

2 个答案:

答案 0 :(得分:2)

似乎我自己发现了错误。似乎Google已禁用app引擎中的某些库,这就是使用上面的代码段,feedparser无法运行的原因。相反,我应该使用urlfetch:

from google.appengine.api import urlfetch
import feedparser
feed = urlfetch.fetch(asset.url)

if feed.status_code == 200:
rss = feedparser.parse(feed.content)

logging.info("%d", len(rss['entries']))

日志现在包含一个条目,表示有20个条目可用。

答案 1 :(得分:0)

我遇到了与AppEngine限制相关的非常类似的问题。虽然我的原始代码是这样的:

    raw_feed = urlfetch.fetch(self.rss_feed_url).content
    feed = feedparser.parse(raw_feed)

所有的单元测试都经过了,但是当使用dev_appserver测试时,我得到了一些来自feedparser的无意义的异常(钻取后)似乎是缓冲区溢出(当feedparser试图从字符串中读取时)。我试图解析的Feed很大,我遇到了一些引擎限制 解决方法是用StringIO(和/或临时文件)替换字符串。现在我的代码看起来像这样

    tf = tempfile.TemporaryFile()
    tf.write(urlfetch.fetch(self.rss_feed_url).content)
    tf.seek(0)
    feed = feedparser.parse(tf)