2011-08-02 5 views
0

RSSフィードからランダムなリンク+その名前を表示します。私が使用 コードは次のとおりです。simplejson.loads usage

def updateFeed(url): 
    query_args = { 'q': 'http://news.google.com/?output=rss', 'v':'1.0', 'num': '15', 'output': 'json' } 
    qs = urllib.urlencode(query_args) 
    loader = 'http://ajax.googleapis.com/ajax/services/feed/load' 
    loadurl = '%s?%s' % (loader, qs) 
    logging.info(loadurl) 
    result = urlfetch.fetch(url=loadurl, 
          headers={'Referer': '...'}) 
    if result.status_code == 200: 
       news = simplejson.loads(result.content) 

私はJSONでのレスポンスデータを得るかが、私はランダムにアイテムを選択する方法がわかりません。アドバイスをお願いしますか?

{u'responseData': {u'feed': {u'feedUrl': u'http://news.google.com/?output=rss', u'description': u'Google News', u'author': u'', u'title': u'Top Stories - Google News', u'link': u'http://news.google.com/news?pz=1&amp;jfkl=true&amp;ned=us&amp;hl=en', u'entries': [{u'publishedDate': u'Tue, 02 Aug 2011 08:51:09 -0700', u'title': u'House Approved Debt Bill Faces Final Hurdle - NY1', u'author': u'', u'content': u'<table border="0" cellpadding="2" cellspacing="7" style="vertical-align:top"><tr><td width="80" align="center" valign="top"><font style="font-size:85%;font-family:arial,sans-serif"><a href="http://news.google.com/news/url?sa=t&amp;fd=R&amp;usg=AFQjCNEyXr4E-W9lA8bsV4_Zslubxd-6_g&amp;url=http://www.theglobeandmail.com/news/world/americas/little-sign-of-compromise-ahead-of-us-default-deadline/article2114420/"><img src="http://nt3.ggpht.com/news/tbn/dyFy2sz6rKRlJM/6.jpg" alt="" border="1" width="80" height="80"><br><font size="-2">Globe and Mail</font></a></font></td><td valign="top"><font style="font-size:85%;font-family:arial,sans-serif"><br><div style="padding-top:0.8em"><img alt="" height="1" width="1"></div><div><a 

編集:それは今、ほぼ完璧に動作し、私はこれをやってJSONを学ぶ:あなたがPythonでJSONをロードすると

def updateFeed(url): 
    query_args = { 'q': 'http://news.google.com/?output=rss', 'v':'1.0', 'num': '15', 'output': 'json' } 
    qs = urllib.urlencode(query_args) 
    loader = 'http://ajax.googleapis.com/ajax/services/feed/load' 
    loadurl = '%s?%s' % (loader, qs) 
    logging.info(loadurl) 
    result = urlfetch.fetch(url=loadurl,headers={'Referer': '...'}) 
    if result.status_code == 200: 
     news = simplejson.loads(result.content) 

     """ not working, using random.randrange instead 
     some_key = random.choice(news.keys()) 
     something = news[some_key] 
     """ 
     i = random.randrange(0,10)#to do: instead of 10, it should be number of entries 
     title = news[u'responseData'][u'feed'][u'entries'][i][u'title'] 
     link = news[u'responseData'][u'feed'][u'entries'][i][u'link'] 
    return mark_safe('<a href="%s">%s</a>' % (link, title)) 

答えて

3

、それは(ネスト)dictsとリストに変換されます。 { ... }オブジェクトが辞書になり、[ ... ]カンマ区切りの項目がリストになります。例えば、フィードURLを取得するには、あなたが行うことができます

feedUrl = news[u'responseData'][u'feed'][u'feedUrl'] 

を辞書からランダムな要素を選択するには、あなたが行うことができます:

import random 
some_key = random.choice(news.keys()) 
something = news[some_key] 
+0

素晴らしいです!最後に、JSDON構造をどのようにトラバースするかを理解できました。私はほぼ完璧に動作するコードで質問を更新しました。それはちょうど私がエントリの正しい数を得ることができなかったランダムな要素ですが、あまりにも困難ではありません。 –

+0

@Niklas:配列の中からランダムな要素が必要なようです(私の例はdictsです)。 'len(news [u'responseData '] [u'feed'] [u'entries ']))のように、ビルトインの' len'関数を使ってリストの長さを得ることができます。 ' – Cameron