2012-03-28 5 views
-2

CNNのトップストーリーRSSフィードから最新の10,000件を取得したいと考えています。私は、これを行うには、次のPythonプログラムを使用して、次のようにGoogleのアーカイブツールに接続しています:Googleリーダーのアーカイブフィードが無効なxmlですか?

import string 
import urllib2 
from xml.dom import minidom 

feedAddr = "http://www.google.com/reader/atom/feed/http://rss.cnn.com/rss/cnn_topstories.rss?r=n&n=1000" 

feedString = urllib2.build_opener().open(urllib2.Request(feedAddr)).read() 
xml = minidom.parseString(feedString) 
items = xml.getElementsByTagName("item") 

for item in items: 
    titleNode = item.childNodes[1] 
    linkNode = item.childNodes[3] 

    titleString = titleNode.firstChild.data 
    linkString = linkNode.firstChild.data 

    print titleString, linkString 

私は次のエラーを取得しています:

xml.parsers.expat.ExpatError: mismatched tag: line 1285, column 4 

が、これはGoogleのアーカイブツールの問題ですまたはフィードジェネレータ?私のPythonコードには問題がありますか?私は上に見られるように、このページからCNNのフィードURLにスプライシングをフィードURLを取得しています:

http://googlesystem.blogspot.com/2007/06/reconstruct-feeds-history-using-google.html

答えて

3

あなたが実際にurllibはで返されたデータを調べたことがありますか?あなたはフィードを手に入れているのですか? Google Readerでは認証が必要です。認証せずにURLを読み込もうとすると、HTMLエラーページが返されます。試してみてください:

feedString = urllib2.build_opener().open(urllib2.Request(feedAddr)).read() 
open('feed.xml', 'w').write(feedString) 

feed.xmlファイルを調べてください。また

、あなただけの `http://www.google.com/reader/atom/feed/」の部分を剥離して使用することにより、直接CNNからそれをつかむことができます。

http://rss.cnn.com/rss/cnn_topstories.rss?r=n&n=1000. 

これは返します有効RSSフィード。

+0

まあ、CNN RSSを直接​​使うことの提案は本当に価値があります。 – Kirill

+0

直接打つことはできません。それはちょうど10個ほどの最新の物語の部分的なリストを返します。認証が必要ですが、ブラウザをhttp://www.google.com/reader/atom/feed/http://rss.cnn.com/rss/cnn_topstories.rss?r=n&n=に誘導してください1000は私が望むものを与えます。だから私はファイルからそれを開くだけです。 また、ファイルを本当に閉じる必要があります。 Pythonは閉じられるまで実際にファイルを書きません。 – JeremyKun

+0

これは、コードスニペットであなたを助けてくれる人にするのはばかげたコメントでした。 *もちろん*完全なプログラムではありません。ああ... – larsks

関連する問題