MGTwitterEngineを使ってラクラクTwitter連携

Objective-C用のTwitterライブラリとしてMGTwitterEngineというのがあるのだが、これはiPhoneアプリでも使えるという事なのでちょっと試してみた。


[設定]
1. ソースコードのダウンロード
ソースコードsubversionで管理されているので、以下のようなコマンドを実行する事でダウンロードする事が出来る。

svn checkout http://svn.cocoasourcecode.com/MGTwitterEngine/


2. iPhoneアプリのプロジェクトにソースコードをコピー
ダウンロードしたソースコードに含まれるMGTwitterEngine.xcodeprojをダブルクリックしXCodeのプロジェクトを開く。次にXCodeプロジェクト内のClassesグループ内のMATwitterEngineグループのソースを自身のiPhoneアプリ用のXCodeのプロジェクトにコピーする。


3. YAJLParser絡みのソースコードを消す
MGTwitterEngineはXMLJSONの二つのフォーマットでTwitterからデータを取得可能なのだが、JSONの方を使おうとするとYAJLのライブラリが別途必要となる。どちらか一方が使えれば十分なのでXMLを選択し、YAJLParse絡みのソースを削除する(削除しないとビルドが通らない)。YAJLParser絡みのソースはファイル名称の末尾がYAJLParser.m or YAJLParser.hとなっているもの。


4. NSXMLParserとLibXMLのどちらを使うか設定
MGTwitterEngineはデフォルトではNSXMLParserを内部で利用しているのだが、より高速でメモリ消費も減らす事が出来るLibXMLを内部で使用するように設定する事が可能(オススメはLibXML)。LibXMLを使いたい場合にはMGTwitterEngine.mの最初の方にある以下の一行を変更する。

(変更前)
#define USE_LIBXML 0
(変更後)
#define USE_LIBXML 1

なお、LibXMLを使わない場合にはLibXML絡みのソースは不要のため、ファイル名称の末尾がLibXMLParser.m or LibXMLParser.hとなっている物は削除してよい(削除しておかないと次の5.の設定が必要となる)。


5. ヘッダ検索パス等の設定
MGTwitterEngineで内部的にLibXMLを使用する場合、プロジェクトの設定を開き、ヘッダ検索パスに/usr/include/libxml /usr/include/libxml2を追加する。またフレームワークの追加メニューからlibxml2.dylibをプロジェクトに追加する。


以上で設定は終わりである。


[使い方]
以下の例は自分がフォローしているユーザのタイムラインを取得する方法である(内部的にNSXMLParserを使っていても、LibXMLを使っていても方法は同じ)。
基本的な流れは、MGTwitterEngineクラスのオブジェクトを生成し任意のメソッドをコールする。そして、要求が成功した場合と失敗した場合のdelegateメソッドを用意しておくという形である。

- (void)getFriendTweets {
    MGTwitterEngine *twitterEngine = [[MGTwitterEngine alloc] initWithDelegate:self];
    // HTTPSで接続する場合
    // [twitterEngine setUsesSecureConnection:YES];
    [twitterEngine setUsername:@"tomute" password:@"mypassword"];
    // 最新のつぶやき10件を取得する
    [twitterEngine getFollowedTimelineSinceID:0 startingAtPage:0 count:10];
}

// タイムラインの取得に成功した場合に呼ばれるメソッド
- (void)statusesReceived:(NSArray *)statuses forRequest:(NSString *)connectionIdentifier {
    for (NSDictionary *status in statuses) {
        NSLog(@"Tweet Text: %@", [status objectForKey:@"text"]);
    }
}

// タイムラインの取得に失敗した場合に呼ばれるメソッド
- (void)requestFailed:(NSString *)connectionIdentifier withError:(NSError *)error {
    NSLog(@"Request failed for connectionIdentifier = %@, error = %@ (%@)", 
          connectionIdentifier, 
          [error localizedDescription], 
          [error userInfo]);
}


次の例はつぶやきを送信する場合のコード(クライアント名称を設定していない場合には、デフォルトでMGTwitterEngineがTwitter上に表示される)。

- (void)sendTweets {
    MGTwitterEngine *twitterEngine = [[MGTwitterEngine alloc] initWithDelegate:self];
    [twitterEngine setUsername:@"tomute" password:@"mypassword"];
    [twitterEngine setUsesSecureConnection:YES];  // HTTPSを使用
    [twitterEngine sendUpdate:@"This is a test tweet"];
}

// つぶやきの送信に成功した場合に呼ばれるメソッド
- (void)requestSucceeded:(NSString *)connectionIdentifier {
    NSLog(@"Request succeeded for connectionIdentifier = %@", connectionIdentifier);
}

- (void)requestFailed:(NSString *)connectionIdentifier withError:(NSError *)error {
    NSLog(@"Request failed for connectionIdentifier = %@, error = %@ (%@)", 
          connectionIdentifier, 
          [error localizedDescription], 
          [error userInfo]);
}

なおより詳細な使い方に関しては、MGTwitterEngineのXCodeプロジェクトに含まれているAppController.mを参考にすると良いと思われる。


[まとめ]
TwitterAPIはそれほど複雑ではないため、Objective-CJSON Framework等を使う事で比較的簡単にTwitter連携を作り込む事は可能である。
しかし、MGTwitterEngineを使えばより簡単に非同期でTwitterの情報を取得したり、つぶやきを送信する事が出来るので、本格的なTwitterアプリを作るのではなく、iPhoneアプリTwitter連携をサポートしたい場合等には非常に有力な選択肢となると思う。
なおライセンスを見る限り、商用利用も可能な模様。


[関連記事]