2013-03-20 123 views
0

我試圖讓這個問題沒有本地化,但由於我對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清單,從這個函數的輸出上描述的值,但功能似乎只是忽略,所以我收到錯誤:

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() 

回答

1

你不會從你的get_tweet_text函數返回任何東西。最後只需要return text

+0

哈哈哈,我需要一些時間才能習慣Python不是Bash的想法!謝謝! – 2013-03-20 18:04:23