我试图让这个问题没有本地化,但由于我对Python的了解非常原始,请随时编辑它以使其更清晰!
Twitter正在最后阶段放弃对XML的支持,包括RSS,我正在努力通过解析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
列表中填写 title 和 description 的值,其输出来自这个函数,但函数似乎只是被忽略了,所以我得到了错误:
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()
答案 0 :(得分:1)
您不会从get_tweet_text
功能返回任何内容。你最后只需要return text
。