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