2011-04-02 142 views
0

嘿傢伙,所以我非常新的Objective-C領域,甚至更新的編程網絡連接體育場。我正在嘗試使用RSS閱讀器應用程序,並且已經能夠設置一個像樣的NSXMLParser等解析XML提要。然後我想添加綁定到Google閱讀器的功能。我可以連接,驗證,然後從頁面請求,但它返回的是我的連接是直接的HTML代碼的網站,而不是像我希望的飼料的XML ...我的問題是如何獲得來自Google閱讀器Feed的XML數據?這裏是我的代碼:分析谷歌閱讀器數據

NSMutableURLRequest* request=[NSMutableURLRequest requestWithURL:URL]; 

[request setValue:[authCodes objectForKey:@"Auth"] forHTTPHeaderField:@"Auth"]; 
[request setValue:[authCodes objectForKey:@"SID"] forHTTPHeaderField:@"SID"]; 
//[request setHTTPMethod:@"GET"]; 

NSURLConnection* conn=[NSURLConnection connectionWithRequest:request delegate:self]; 

[conn start]; 

,然後將兩個委託方法:

-(void)connection: (NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
if (connectionData==nil) { 
     connectionData=[[NSMutableData alloc] init ]; 
    } 
    NSLog(@"CONNECTION"); 
    [connectionData appendData:data]; 

} 

-(void) connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"Connection Closed"); 

    NSString *tempString = [[NSString alloc] initWithData:connectionData encoding:NSASCIIStringEncoding]; 
    NSLog(@"The Data is Equal To: %@", tempString); 

    rssParser=[[NSXMLParser alloc] initWithData:connectionData]; 

    [rssParser setDelegate:self]; 
    [rssParser setShouldProcessNamespaces:YES]; 
    [rssParser setShouldReportNamespacePrefixes:YES]; 
    [rssParser setShouldResolveExternalEntities:NO]; 

    [rssParser parse]; 

} 

然後它的推移和解析,顯然是給我一個錯誤說,它不知道如何解析它。 (錯誤代碼76)

這是我試圖連接到的網址: http://www.google.com/reader/view/feed/http%3A%2F%2Fnews.cnet.com%2F2547-1_3-0-20.xml

這裏纔是它打印出的數據收到......只是在開玩笑,當我把它放在那裏Stack Overflow將其解析爲HTML並將其顯示爲這樣...

我知道這不是驗證錯誤,並且確實難以確定從哪裏獲取提要。我從錯誤的URL獲取?如果我知道它不是解析器,因爲它解析了很好的cnet的原始提要,以及其它任何直接來自他們網站的提要。

回答

1

NSURLConnection將向所提供的URL發送請求並下載存儲在那裏的任何數據。當您在網絡瀏覽器中輸入http://www.google.com/reader/view/feed/http://news.cnet.com/2547-1_3-0-20.xml時,您會看到它會將您帶到Google閱讀器網站(HTML),而不是您可以直接解析的XML Feed。

我不確定您從哪裏生成您的網址。如果您知道XML提要本身的網址,則應直接使用該提要。看起來Google Reader網址的格式爲http://www.google.com/reader/view/feed/[feed_url]。因此,如果您已有Google閱讀器網址,則可以提取Feed網址並將其用於您的請求。

如果由於某種原因您絕對需要通過Google,您可以下載HTML並解析它以找到_INPUT_STREAM_ID。這包含從中下載XML的URL,然後您可以發出第二個請求。

+0

好的互動,這是有道理的,謝謝。我想綁定到谷歌閱讀器的原因是它是所有提要的緩存,並拉起舊的條目。那可能嗎? – utahwithak 2011-04-02 15:56:06

+0

不幸的是,我沒有辦法,我知道,訪問緩存。 – 2011-04-02 16:20:27

0

對於那些尋求實現這一點,仍在尋找這裏是我發現解決這個問題。

首先,你必須連接到谷歌,然後得到一個令牌,然後與網站交互google.com/reader/api/0/...

這裏要說的是,我發現非常有幫助的網站:

http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI

它概述了關鍵字,以及如何與Google閱讀器