【问题标题】:Get variable from a function into a list从函数中获取变量到列表中
【发布时间】:2013-03-20 17:57:08
【问题描述】:

我试图让这个问题不本地化,但由于我对 Python 的了解非常原始,请随时编辑它以使其更清晰!

Twitter 正处于放弃对包括 RSS 在内的 XML 支持的最后阶段,我正在努力通过解析 Twitter 提供的 json 并使用 PyRSS2Gen 获取输出来获得相同的行为。我以这个链接为例:https://github.com/dschep/Twitter-user_timeline.rss-proxy/blob/master/timeline_rss_proxy.py

我确实让它工作了,但转发的大部分时间都被截断了。但是可以使用item['retweeted_status']['text'] 而不是item['text'] 来获取整个推文。我需要获得item['text'] (^RT @username:) 的正则表达式部分,并与item['retweeted_status']['text'] 一起加入。

所以我创建了一个名为“get_tweet_text”的函数,我想用这个函数的输出填充items 列表中titledescription 的值,但该功能似乎只是被忽略了,所以我得到了错误:

Traceback (most recent call last):
  File "1.py", line 59, in <module>
    ) for item in feed
  File "/usr/lib/python2.7/dist-packages/PyRSS2Gen.py", line 397, in __init__
    "must define at least one of 'title' or 'description'")
TypeError: must define at least one of 'title' or 'description'

这是完整的代码。我用 X 隐藏了我的应用程序和用户密钥。sys.argv[1] 指的是要下载其时间线的用户。请随时纠正您可能发现的更多错误:)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, re, datetime, urlparse, json, PyRSS2Gen
import oauth2 as oauth

name = sys.argv[1]

consumer = oauth.Consumer(
    'XXXXXXXXXXXXXXXXXXXXXX',
    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
)
token = oauth.Token(
    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
)
client = oauth.Client(consumer, token)

resp, content = client.request(
    'http://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=%s'
    % name,
    method='GET',
)
feed = json.loads(content)

link_tmpl = 'http://twitter.com/{user}/status/{id}'

def get_tweet_text(item):
#   try:
    text = '%s: %s %s' % (
        name,
        re.search('^RT @\w+:', item['text']).group(0),
        item['retweeted_status']['text']
    )
#   except:
#       text = item['text']

rss = PyRSS2Gen.RSS2(
    title = 'Twitter / {0}'.format(name),
    link = 'http://twitter.com/{0}'.format(
        feed[0]['user']['name'].encode('utf-8')
    ),
    description = feed[0]['user']['description'],

    lastBuildDate = datetime.datetime.now(),

    items = [
        PyRSS2Gen.RSSItem(
            title       = get_tweet_text(item),
            link        = link_tmpl.format(user=name, id=item['id']),
            description = get_tweet_text(item),
            guid        = PyRSS2Gen.Guid(link_tmpl.format(
                user=name, id=item['id']
            )),
            pubDate     = datetime.datetime.strptime(
                item['created_at'][:19] + item['created_at'][25:],
                '%a %b %d %H:%M:%S %Y'
            )
        ) for item in feed
    ]
)

print rss.to_xml()

【问题讨论】:

    标签: python json twitter rss


    【解决方案1】:

    get_tweet_text 函数不会返回任何内容。最后只需要return text

    【讨论】:

    • 哈哈哈,我需要一段时间才能习惯 Python 不是 Bash 的想法!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多