pixyzehn blog

iPhone App, Mac App, Programming, Web service, Tool, Evernote, etc

iOSアプリでOAuth認証をしてTwitterのAPIをたたく

f:id:inagex:20140203123549p:plain


OAuth認証にて認証した後、自分のタイムラインのツイートを取得したいと思います。


ほんとはすべてやったことを記事に書けばいいのですが、参考にしたサイトをみてできるまでの過程を書いたほうが役に立つかと思ったのでその過程を述べます。


予定外 iPhone/Objective-C予定外 iPhone/Objective-Cはてなブックマーク - 予定外 iPhone/Objective-C


まず上記サイトから

・[iOS5/ARC対応] iOSでTwitterクライアント その1 (準備編)
・[iOS5/ARC対応] iOSでTwitterクライアント その2 (サインイン)
・[iOS5/ARC対応] iOSでTwitterクライアント その3 (タイムライン取得)

を参考にしてGTMOAuthライブラリを使用していきます。



注意点は


タイムライン取得のメソッドにおいて

// タイムライン (home_timeline) 取得
- (void)fetchGetHomeTimeline
{
    // 要求を準備
    NSURL *url = [NSURL URLWithString:@"http://api.twitter.com/1/statuses/home_timeline.json"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"GET"];
 
    // 要求に署名情報を付加
    [auth_ authorizeRequest:request];
 
    // 非同期通信による取得開始
    GTMHTTPFetcher *fetcher = [GTMHTTPFetcher fetcherWithRequest:request];
    [fetcher beginFetchWithDelegate:self
                  didFinishSelector:@selector(homeTimelineFetcher:finishedWithData:error:)];
}


なっていますが、APIのバージョンをTwitter API Version 1.1にします。

// タイムライン (home_timeline) 取得
- (void)fetchGetHomeTimeline
{
    // 要求を準備
    NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/home_timeline.json"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"GET"];
    
    // 要求に署名情報を付加
    [auth_ authorizeRequest:request];
    
    // 非同期通信による取得開始
    GTMHTTPFetcher *fetcher = [GTMHTTPFetcher fetcherWithRequest:request];
    [fetcher beginFetchWithDelegate:self
                  didFinishSelector:@selector(homeTimelineFetcher:finishedWithData:error:)];
}


上記のようにすることでエラーが解消されました。


また上記参考サイトはios7対応をしていない箇所があるので適宜解消していきます。

// 指定位置の行で使用する高さの要求
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 対象インデックスのステータス情報を取り出す
    NSDictionary *status = [timelineStatuses_ objectAtIndex:indexPath.row];
    
    // ツイート本文をもとにセルの高さを決定
    //sizeWithFont:[UIFont systemFontOfSize:12]
    NSString *content = [status objectForKey:@"text"];
    
    //ios6まで
    /*
    CGSize labelSize = [content sizeWithFont:[UIFont systemFontOfSize:12]
                           constrainedToSize:CGSizeMake(300, 1000)
                               lineBreakMode:NSLineBreakByWordWrapping];
    */
    
    //ios7から
    CGSize labelSize = [content boundingRectWithSize:CGSizeMake(300, 1000)
                                        options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin
                                     attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12]} context:nil].size;
    return labelSize.height + 25;
}


ios6までの箇所をios7からの処理に書き換えます。


こちらはTwitterのtextに合わせてセルの高さを調節している箇所です。


またOAuth認証の知識や使い方においてはこちらを参考にしました。


はてぶAPIを使った例ですが、基本的にやっていることや使っているライブラリは同じです。


[XCODE] iOSアプリでOAuth認証を行う、はてブAPIを利用する - YoheiM .NET[XCODE] iOSアプリでOAuth認証を行う、はてブAPIを利用する - YoheiM .NETはてなブックマーク - [XCODE] iOSアプリでOAuth認証を行う、はてブAPIを利用する - YoheiM .NET


だいぶOAuth認証について以前よりもわかってきました。(まだまだですが)


こんな感じで自分のタイムラインがテーブルに表示されました。


f:id:inagex:20140203125719p:plain


なおこれにはCustomCellなどを使いました。


UITableViewでカスタムセルを使ってみました - 理系大学生のwebメモUITableViewでカスタムセルを使ってみました - 理系大学生のwebメモはてなブックマーク - UITableViewでカスタムセルを使ってみました - 理系大学生のwebメモ