新的Twitter API集成到现有的应用程序

时间:2012-12-21 08:33:32

标签: ios twitter

我在桌面视图中使用用户时间轴开发了一个应用程序。它将是每个应用程序中相同的用户时间轴。我已经对此进行了编码,并且完美无缺。我的问题是,当我在调用中将API版本从1更改为1.1时,它将停止工作。所有推文都将通过推文表,所以我不需要身份验证。我是否需要添加代码,而不仅仅是在调用中更改API版本,或者设置授权只是为了显示新API的时间轴?除了简单地显示单个用户时间轴和使用推文表进行响应之外,我不会添加任何功能。我附上了我的代码。任何帮助都会很棒。谢谢。

- (void)fetchTweets
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://api.twitter.com/1/statuses/user_timeline.json?include_rts=false&screen_name=johnnelm9r&count=100"]];

        if (data == nil)
        {

        }

        else
        {
            NSError *error;

            tweets = [NSJSONSerialization JSONObjectWithData:data
                                                     options:kNilOptions
                                                       error:&error];
        }

        dispatch_async(dispatch_get_main_queue(), ^{
            [self.twitterTableView reloadData];
        });

    });

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name:kReachabilityChangedNotification
                                               object:nil];
    self.reachability = [Reachability reachabilityWithHostName:@"www.apple.com"];
    [self.reachability startNotifier];
}

1 个答案:

答案 0 :(得分:0)

这是我最终想出来的。它对于我需要它做的事情来说就好了。希望它也可以帮助其他人。

- (void)fetchTweets
{
twitterLoader.animationImages = [NSArray arrayWithObjects:
                                 [UIImage imageNamed:@"StatusIndicator.png"],
                                 [UIImage imageNamed:@"StatusIndicator1.png"],
                                 [UIImage imageNamed:@"StatusIndicator2.png"],
                                 [UIImage imageNamed:@"StatusIndicator3.png"],
                                 [UIImage imageNamed:@"StatusIndicator4.png"],
                                 [UIImage imageNamed:@"StatusIndicator5.png"],
                                 [UIImage imageNamed:@"StatusIndicator6.png"],
                                 [UIImage imageNamed:@"StatusIndicator7.png"],
                                 [UIImage imageNamed:@"StatusIndicator8.png"],
                                 [UIImage imageNamed:@"StatusIndicator9.png"],
                                 [UIImage imageNamed:@"StatusIndicator10.png"],
                                 [UIImage imageNamed:@"StatusIndicator9.png"],
                                 [UIImage imageNamed:@"StatusIndicator8.png"],
                                 [UIImage imageNamed:@"StatusIndicator7.png"],
                                 [UIImage imageNamed:@"StatusIndicator6.png"],
                                 [UIImage imageNamed:@"StatusIndicator5.png"],
                                 [UIImage imageNamed:@"StatusIndicator4.png"],
                                 [UIImage imageNamed:@"StatusIndicator3.png"],
                                 [UIImage imageNamed:@"StatusIndicator2.png"],
                                 [UIImage imageNamed:@"StatusIndicator1.png"],
                                 nil];

twitterLoader.animationDuration = 0.8;
[twitterLoader startAnimating];

ACAccountStore *store = [[ACAccountStore alloc] init];
ACAccountType *twitterAccountType =
[store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

    //  Request permission from the user to access the available Twitter accounts
[store requestAccessToAccountsWithType:twitterAccountType
                               options:nil
                            completion:^(BOOL granted, NSError *error)
 {
 if (!granted)
     {
     NSLog(@"User rejected access to the account.");
     }

 else
     {
     [twitterLoader startAnimating];

     NSArray *twitterAccounts =
     [store accountsWithAccountType:twitterAccountType];

     if ([twitterAccounts count] > 0)
         {
         ACAccount *account = [twitterAccounts objectAtIndex:0];
         [twitterLoader startAnimating];

         NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
         [params setObject:@"johnnelm9r" forKey:@"screen_name"];
         [params setObject:@"100" forKey:@"count"];
         [params setObject:@"0" forKey:@"include_entities"];
         [params setObject:@"0" forKey:@"include_rts"];

             //  The endpoint that we wish to call
         NSURL *url =
         [NSURL
          URLWithString:@"http://api.twitter.com/1.1/statuses/user_timeline.json"];

         SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter
                                                 requestMethod:SLRequestMethodGET
                                                           URL:url
                                                    parameters:params];


             // Attach the account object to this request
         [request setAccount:account];

         [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
          {
          if (!responseData)
              {
              NSLog(@"%@", error);
              }

          else
              {
              NSError *jsonError;
              tweets = [NSJSONSerialization JSONObjectWithData:responseData
                                                       options:NSJSONReadingMutableLeaves
                                                         error:&jsonError];
              if (tweets)
                  {
                  NSLog(@"%@", tweets);
                  [self.twitterTableView reloadData];

                  [twitterLoader stopAnimating];
                  }

              else
                  {
                  NSLog(@"%@", jsonError);
                  }
              }
          }];
         [self.twitterTableView reloadData];
         [twitterLoader stopAnimating];
         }
     }
 }];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(reachabilityChanged:)
                                             name:kReachabilityChangedNotification
                                           object:nil];
self.reachability = [Reachability reachabilityWithHostName:@"www.apple.com"];
[self.reachability startNotifier];
}

我还添加了一个简单的加载程序和可访问性。如果您不需要它,只需删除底部的NSNotification。

并确保添加

帐户和社交框架

并将其头文件导入您在其中使用的.m文件。

祝你好运!