[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を指定しないと認証エラーになる件は、問題を見つけるのに苦労しました。今回のサンプルソースがどなたかの役に立てば良いなぁと思う今日この頃。
最後までご覧頂きましてありがとうございました。






