[XCODE] LinkedInのAPIをiOSアプリから利用する
こんにちは、@yoheiMuneです。
最近はSNSのAPIを利用するプログラムをiOSでいろいろと実装しています。
今日はその中で、LinkedInにAPI経由で記事を投稿する方法をブログに書きたいと思います。
そんなLinkedInへ外部アプリから投稿するために、 http://developer.linkedin.comには多くのAPIが用意されています。
今回はそのAPIの中から認証APIと投稿APIを使って、LinkedInにiPhoneアプリから投稿するための実装を行います。
まずは、https://www.linkedin.com/secure/developerでLinkedInのAPIを利用するアプリケーションを登録して、ConsumerKeyとConsumerSecretを入手します。
そしてOAuth1.0認証のための実装を行います。
iOSでOAuth1.0認証を行う実装は、「[XCODE] iOSアプリでOAuth認証を行う、はてブAPIを利用する」にて紹介させて頂いておりますので、参照いただけると幸いです。gtm-oauthライブラリを利用した実装です。
LinkedInのAPIで投稿APIを用いたいので、上記リンク先実装の認証用URLとスコープには、以下のように指定します。
基本的な流れは、「APIに必要な情報をリクエストに設定する」 -> 「リクエストに認証情報を付与する」 -> 「送信する」という流れとなります。
今回のサンプルソースがどなたかの役に立てば良いなぁと思う今日この頃。
最後までご覧頂きましてありがとうございました。
最近はSNSのAPIを利用するプログラムをiOSでいろいろと実装しています。
今日はその中で、LinkedInにAPI経由で記事を投稿する方法をブログに書きたいと思います。
LinkedInのAPI
LinkedInとはビジネスパースン向け?のSNSで、情報をポストしたり人のフィードを読んだりしてコミュニケーションを取ることのできるSNSです。 ビジネス向けの情報が多い感じで、ビジネスパースン向けのSNSです。そんなLinkedInへ外部アプリから投稿するために、 http://developer.linkedin.comには多くのAPIが用意されています。
今回はそのAPIの中から認証APIと投稿APIを使って、LinkedInにiPhoneアプリから投稿するための実装を行います。
LinkedInの認証APIを利用する
LinkedInの認証にはOAuth1.0が利用されています。まずは、https://www.linkedin.com/secure/developerでLinkedInのAPIを利用するアプリケーションを登録して、ConsumerKeyとConsumerSecretを入手します。
そしてOAuth1.0認証のための実装を行います。
iOSでOAuth1.0認証を行う実装は、「[XCODE] iOSアプリでOAuth認証を行う、はてブAPIを利用する」にて紹介させて頂いておりますので、参照いただけると幸いです。gtm-oauthライブラリを利用した実装です。
LinkedInのAPIで投稿APIを用いたいので、上記リンク先実装の認証用URLとスコープには、以下のように指定します。
NSURL *requestURL = [NSURL URLWithString:@"https://api.linkedin.com/uas/oauth/requestToken"]; NSURL *accessURL = [NSURL URLWithString:@"https://api.linkedin.com/uas/oauth/accessToken"]; NSURL *authorizeURL = [NSURL URLWithString:@"https://www.linkedin.com/uas/oauth/authenticate"]; NSString *scope = @"rw_nus";
LinkedInへ投稿するAPIを利用する
続いて、LinkedInへの投稿APIの部分の実装です。基本的な流れは、「APIに必要な情報をリクエストに設定する」 -> 「リクエストに認証情報を付与する」 -> 「送信する」という流れとなります。
// 未認証なら認証を行う。 if (![self isSignedIn]) { [self signIn]; return; } // LinkedInへ投稿するリクエストを作成する。 NSURL *url = [NSURL URLWithString:@"http://api.linkedin.com/v1/people/~/shares"]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; request.HTTPMethod = @"POST"; NSString *bodyString = @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<share>" "<comment>{{:comment}}</comment>" "<content>" "<submitted-url>{{:url}}</submitted-url>" "</content>" "<visibility>" "<code>anyone</code>" "</visibility>" "</share>"; bodyString = [bodyString stringByReplacingOccurrencesOfString:@"{{:comment}}" withString:@"RestAPIのテスト投稿です"]; bodyString = [bodyString stringByReplacingOccurrencesOfString:@"{{:url}}" withString:@"http://www.yoheim.net/"]; [request setHTTPBody:[bodyString dataUsingEncoding:NSUTF8StringEncoding]]; // LinkedInでは下記ヘッダーを付与しないと、認証エラーとして返ってくる。 [request setValue:@"text/xml;charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; // リクエストに認証情報を付与する。 [mAuth authorizeRequest:request]; // リクエストを送信する。 [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { if (error) { // エラーが発生した場合には、エラー処理を行う。 NSLog(@"error occured. reason = %@", error); NSLog(@"response code = %d", ((NSHTTPURLResponse *)response).statusCode); NSLog(@"response text = %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); if (error.code == -1012) { // 認証エラーなので、再認証をする。 dispatch_async(dispatch_get_main_queue(), ^{ [self signIn]; }); } } else { // 処理成功 NSLog(@"success!!"); NSLog(@"responseData = %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); } }];こんな感じでLinkedInへ投稿を行うことができます。
最後に
iOSでLinkedInのAPIを使った事例が少なくて、ちょっと大変。 特に、投稿APIのリクエストヘッダにContent-Typeを指定しないと認証エラーになる件は、問題を見つけるのに苦労しました。今回のサンプルソースがどなたかの役に立てば良いなぁと思う今日この頃。
最後までご覧頂きましてありがとうございました。