読者です 読者をやめる 読者になる 読者になる

Natural Software

KinectなどのDepthセンサーを中心に活動しています

iPhoneアプリ開発記(9):Objective-C & OAuth で mixi API にアクセスする

iOS

昨日に引き続きOAuthでmixi API にアクセスしてみました。
mixi の OAuth は 2.0 らしいのですが、特別なライブラリも必要なく簡単でいいですね:)

#「application/x-www-form-urlencoded形式」がよくわからなかったので文字は化けますが、、、


今回の参考はこちらです

ほかにmixiの応答がJSONなので、Objective-CJSONライブラリを利用しました

構成

githubにあげているコードの他に MixiOAuthKey.h というファイルがあり、こんな構成になっています。

#define CONSUMER_KEY        @"xxxxxxxxxxxxxxxxxxxx"
#define CONSUMER_KEY_SECRET @"xxxxxxxxxxxxxxxxxxxx"

認証からプロフィール取得、ボイスへの投稿までのサンプル

#import <Foundation/Foundation.h>
#import "Mixi.h"
#import "MixiOAuthKey.h"

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    Mixi *mixi = [[Mixi alloc] init:CONSUMER_KEY consumerSecret:CONSUMER_SECRET];
	
    // Aauthorize request URLの作成
    NSString *urlString = [mixi getAauthorizeRequestURL:@"r_profile w_voice"];
    NSLog(@"Aauthorize request in this page :%@", urlString);
    NSLog(@"Please input redirest url's 'code' parameter :");
	
    char code[128] = "";
    scanf("%s", code);

    // Access Tokenの取得
    [mixi getAccessToken:[[NSString alloc] initWithCString:code] redirectURI:@"http://example.com/callback"];

    // プロフィールの取得
    NSDictionary *dict = [mixi getPeople];
    for ( NSString *key in [dict keyEnumerator] ) {
        NSLog(@"key:%@, value:%@", key, [dict objectForKey:key]);
    }

    // ボイスへ投稿
    [mixi postVoice:@"from application post"];
	
    // insert code here...
    NSLog(@"Hello, World!");
    [pool drain];
    return 0;
}

出力

2010-12-30 22:27:05.814 MixiOAuthSample[6992:a0f] Aauthorize request in this page :https://mixi.jp/connect_authorize.pl?client_id=xxxxxxxx&response_type=code&scope=r_profile%20w_voice
2010-12-30 22:27:05.817 MixiOAuthSample[6992:a0f] Please input redirest url's 'code' parameter :
xxxxxxxx
2010-12-30 22:27:19.062 MixiOAuthSample[6992:a0f] key:entry, value:{
    displayName = "\U304b\U304a\U308b\U3093";
    id = y3rwjmxosja5b;
    profileUrl = "http://mixi.jp/show_friend.pl?uid=y3rwjmxosja5b";
    thumbnailUrl = "http://profile.img.mixi.jp/photo/user/y3rwjmxosja5b_3024363630.jpg";
}
2010-12-30 22:27:19.063 MixiOAuthSample[6992:a0f] key:itemsPerPage, value:1
2010-12-30 22:27:19.063 MixiOAuthSample[6992:a0f] key:totalResults, value:1
2010-12-30 22:27:19.063 MixiOAuthSample[6992:a0f] key:startIndex, value:0
2010-12-30 22:27:19.140 MixiOAuthSample[6992:a0f] Hello, World!

ボイスへの投稿