使用Twitter API 1.1显示配置文件照片

时间:2013-08-11 05:46:39

标签: ios objective-c json api twitter

我们正在开发iOS 7 Twitter客户端。我还没有使用Twitter API,我在1.1之前做了什么。

有人可以帮助我们在我们的应用程序的时间轴上加载个人资料照片吗?

我们的代码如下。

这是我们的.h文件:

    #import <UIKit/UIKit.h>
    #import <Accounts/Accounts.h>
    #import <Social/Social.h>
    #import <Twitter/Twitter.h>

    @interface FirstViewController : UIViewController <UITableViewDataSource ,                 UITableViewDelegate> {
        UIRefreshControl *myRefreshControl;
    }

    @property (nonatomic) IBOutlet UITableView *timelineTableView;
    @property (nonatomic) NSArray *timelineArray;

    @end

这是应用程序时间轴的.m。

    @interface FirstViewController ()

    @end

    @implementation FirstViewController

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        [self getTimeline];
        myRefreshControl = [[UIRefreshControl alloc]init];
        myRefreshControl.tintColor = [UIColor blackColor];
        [myRefreshControl setAttributedTitle:[[NSAttributedString         alloc]initWithString:@"Pull to Refresh"]];
        [myRefreshControl addTarget:self action:@selector(refreshTimeline) forControlEvents: UIControlEventValueChanged];
        [self.timelineTableView addSubview:myRefreshControl];
    }

    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }

    -(void)getTimeline
    {
        ACAccountStore *account = [[ACAccountStore alloc] init];
        ACAccountType *accountType = [account
                                                      accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

        [account requestAccessToAccountsWithType:accountType
                                         options:nil completion:^(BOOL granted, NSError *error)
         {
             if (granted == YES)
             {
                 NSArray *arrayOfAccounts = [account
                                             accountsWithAccountType:accountType];

                 if ([arrayOfAccounts count] > 0)
                 {
                     ACAccount *twitterAccount = [arrayOfAccounts lastObject];

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

                     NSMutableDictionary *parameters =
                     [[NSMutableDictionary alloc] init];
                     [parameters setObject:@"200" forKey:@"count"];
                     [parameters setObject:@"1" forKey:@"include_entities"];

                     SLRequest *postRequest = [SLRequest
                                               requestForServiceType:SLServiceTypeTwitter
                                               requestMethod:SLRequestMethodGET
                                               URL:requestURL parameters:parameters];

                     postRequest.account = twitterAccount;

                     [postRequest performRequestWithHandler:
                      ^(NSData *responseData, NSHTTPURLResponse
                        *urlResponse, NSError *error)
                      {
                          self.timelineArray = [NSJSONSerialization
                                                JSONObjectWithData:responseData
                                                options:NSJSONReadingMutableLeaves
                                                error:&error];

                          if (self.timelineArray.count != 0) {
                              dispatch_async(dispatch_get_main_queue(), ^{
                                  [self.timelineTableView reloadData];
                              });
                          }
                      }];
                 }
             } else {
             }
         }];
    }

    -(void)refreshTimeline
    {
        [self getTimeline];
        [self.timelineTableView reloadData];
    }

    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [self.timelineArray count];
    }

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {

        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (!cell) {
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle         reuseIdentifier:CellIdentifier];
        }
        NSDictionary *tweet = self.timelineArray[[indexPath row]];
        cell.textLabel.text = [[tweet objectForKey:@"user"]objectForKey:@"name"];
        cell.detailTextLabel.text = [tweet objectForKey:@"text"];
        cell.imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:        [[tweet objectForKey:@"user"]objectForKey:@"profile_image_url"]]];

    return cell;

    }
    @end

2 个答案:

答案 0 :(得分:0)

回应:
http://api.twitter.com/1/statuses/home_timeline.json
将返回主页Feed 。它中包含一个user键,您必须访问它并通过profile_image_url获取个人资料图片。

处理字典数组中的响应将解决您的问题,每个字典将包含user密钥,其中包含profile_image_url

答案 1 :(得分:0)

您对api的调用是引用版本1.我建议在https://dev.twitter.com/docs/api/1.1/get/statuses/home_timeline查看信息并检查响应格式。

您可以向下钻取响应以到达“用户”对象并从那里获取个人资料图片。