Парсинг данных Google Reader - PullRequest
0 голосов
/ 02 апреля 2011

Привет, ребята, так что я очень плохо знаком с областью Objective-C и еще новее со стадионом программирования интернет-соединений. Я пытаюсь работать с приложением для чтения RSS, и мне удалось настроить приличный NSXMLParser и тому подобное для анализа XML-каналов. Затем я хотел добавить возможность привязки к Google Reader. Я могу подключиться, аутентифицироваться и затем запросить со страницы, но на моем соединении возвращается прямой html-код сайта, а не XML-канал, как я надеялся ... Мой вопрос: как мне получить XML-данные из ленты от Google Reader? Вот мой код:

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)

Это URL, к которому я пытаюсь подключиться: http://www.google.com/reader/view/feed/http%3A%2F%2Fnews.cnet.com%2F2547-1_3-0-20.xml

и вот что он распечатывает как полученные данные ... шучу, когда я их туда вставляю, переполнение стека анализирует его как HTML и отображает как таковое ...

Я знаю, что это не ошибка аутентификации, и я действительно озадачен тем, куда идти, чтобы получить каналы. Я получаю неправильный URL? Если я знаю, что это не синтаксический анализатор, так как он анализирует просто исходный канал cnet, а также любой другой файл прямо с их сайта.

Ответы [ 2 ]

1 голос
/ 02 апреля 2011

NSURLConnection отправит запрос на указанный URL-адрес и загрузит все данные, которые там хранятся. Когда вы введете http://www.google.com/reader/view/feed/http://news.cnet.com/2547-1_3-0-20.xml в свой веб-браузер, вы увидите, что он перенаправляет вас на веб-сайт Google Reader (HTML), а не в канал XML, который вы можете непосредственно проанализировать.

Я не уверен, откуда вы генерируете свои URL. Если вы знаете URL-адрес самого XML-канала, вам следует просто использовать его напрямую. Похоже, URL-адреса Google Reader имеют вид http://www.google.com/reader/view/feed/[feed_url]. Так что, если у вас уже есть URL-адрес Google Reader, вы можете извлечь URL-адрес канала и использовать его вместо запроса.

Если по какой-то причине вам абсолютно необходимо пройти через Google, вы можете загрузить HTML и разобрать его, чтобы найти _INPUT_STREAM_ID. Он содержит URL-адрес, с которого можно загрузить XML, и затем вы можете сделать второй запрос.

0 голосов
/ 04 апреля 2011

Для тех, кто ищет для реализации этого и все еще ищет здесь, я нашел, чтобы исправить этот вопрос.

Сначала необходимо подключиться к Google, затем получить токен и затем взаимодействовать с веб-сайтом google.com/reader/api/0/...

.

вот сайт, который я нашел чрезвычайно полезным:

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

В нем описаны ключевые слова и способы взаимодействия с GoogleReader

...