Разбор JSON-сообщения для извлечения данных из Twitter на iOS 5 - PullRequest
0 голосов
/ 28 декабря 2011

Я пытаюсь отобразить в своем приложении некоторые публичные твиты, извлеченные из профиля Обамы в Твиттере .Чтобы извлечь данные из твиттера, я реализовал этот метод getTweets:

-(void)getTweets
{
    NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
    [params setObject:@"Obamabarak" forKey:@"screen_name"];
    [params setObject:@"10" forKey:@"count"];
    [params setObject:@"1" forKey:@"include_entities"];
    [params setObject:@"1" forKey:@"include_rts"];


    NSURL *url = [NSURL URLWithString:@"http://api.twitter.com/1/statuses/user_timeline.json"];

    TWRequest *request = [[TWRequest alloc] initWithURL:url parameters:params requestMethod:TWRequestMethodGET];

    [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
    {
        if (error != nil)
        {
            //  Inspect the contents of error 
            exit(-1);
        }
        else
        {
            [self fetchJSONData:responseData];
        }
    }
}

На этом этапе я попытался реализовать метод fetchJSONData следующим образом:

- (void)fetchJSONData:(NSData *)responseData
{
NSError* error;

NSDictionary* jsonResults = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

NSArray *myArrayOfDictionaries = [[jsonResults objectForKey:@"tweets"] objectForKey:@"results"];

for (NSDictionary *myDictionary in myArrayOfDictionaries)
{
    // Get title of the image
    NSString *title = [myDictionary objectForKey:@"title"];
    ...

Но это не работает, и запись не отображается.Я не уверен, что это правильный путь, и я не знаю, как поступить.Не могли бы вы помочь мне найти способ отображения твитов Обамы?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 03 октября 2012

Попробуйте это

#define jsonQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define jsonURL [NSURL URLWithString: @"Your LInk"]

@synthesize YOUR NSDICTIONARY;

- (void)issueLoadRequest
{
    // Dispatch this block asynchronosly. The block gets JSON data from the specified URL and performs the proper selector when done.
    dispatch_async(jsonQueue, ^{
        NSData* data = [NSData dataWithContentsOfURL: jsonURL];
        [self performSelectorOnMainThread:@selector(receiveData:) withObject:data waitUntilDone:YES];
    });
}

- (void)receiveData:(NSData *)data {
    // When we have the data, we serialize it into native cocoa objects. (The outermost element from twitter is
    // going to be an array. I JUST KNOW THIS. Reload the tableview once we have the data.
    self.YOUR NSDICTIONARY= [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    [self.myTableView reloadData];
}
1 голос
/ 03 января 2012

Я наконец избавился от этой проблемы:

if ([urlResponse statusCode] == 200)
{
    // Parse the responseData, which we asked to be in JSON format for this request
    NSError *jsonParsingError = nil;
    //this is an array of dictionaries
    arrayTweets = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonParsingError];

    //point to the first tweet
    NSDictionary *aTweet = [arrayTweets objectAtIndex:0];

    //write to log
    NSLog(@"text: %@", [aTweet objectForKey:@"text"]);
    NSLog(@"created_at: %@", [aTweet objectForKey:@"created_at"]);
}

Я не нашел хорошего примера в интернете, но у меня это сработало !!!

Яс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...