TwitterをObjective-Cから使う1(MGTwitterEngineにlibxml2を組み込む)
先人の知恵を拝借します。Mattさんのホームページに行き、MGTwitterEngineを利用させていただきます。
http://mattgemmell.com/source
一通りの、Twitter APIをコールするメソッドが用意されており、NSArrays, NSDictionarys, NSStrings, NSDatesの形で結果を返してくれます。
今では、OAuth認証にも対応していますので、これで一通りのことはできそうです。OAuth認証は、OAuth Consumerを使います。
https://github.com/jdg/oauthconsumer
MGTwitterEngineで、何ができるかを知るには
- MGTwitterEngine.h
を見ればいいと思います。
たとえば、statuses/public_timelineのAPIなら、MGTwitterEngine.hにこんな形で実装されていることがわかります。
- (NSString *)getPublicTimeline; // statuses/public_timeline
それでは、使うための準備を進めましょう。MGTwitterEngineのソースを、自分のプロジェクトに追加します。
Twitter APIでsearch(※1)以外は、Twitterからの戻りがjson, xml形式です。searchを使わないのであれば、パーサーはlibxmlでいいと思います。
そのためlibxml関連(※2)のファイルを、プロジェクトに追加します。
また、libxmlを使うには、MGTwitterEngine.mの#defineを変更しておきます。
#ifndef USE_LIBXML // if you wish to use LibXML, add USE_LIBXML=1 to "Precompiler Macros" in Project Info for all targets # define USE_LIBXML 1 #endif
libxmlを使うために、ヘッダ検索パス(include/libxml2)の追加を行います。
framework(libxml2.dylib)の追加を行います。
続いて、OAuth Consumerも、ソースに追加します。
"iPhone ready" simply means you just need to add the files to Xcode, and import "OAuthConsumer.h". If you're rolling with the iPhone: 1) Be sure to add Security.framework. 2) Include libxml2.dylib in your frameworks. You also need to add a build property to the project -- "header search paths" needs to include "$SDKROOT/usr/include/libxml2" with "Recursive" checked. Be sure to include sys/types.h.
ということみたいです、libxml関連はさきほど追加しましたので、残りのSecurity.frameworkを追加します。
また、sys/types.hをincludeしてくださいとのことなので、sha1.cを変更します。#include
// From http://www.mirrors.wiretapped.net/security/cryptography/hashes/sha1/sha1.c #include <sys/types.h> typedef struct { u_int32_t state[5]; u_int32_t count[2]; u_int8_t buffer[64]; } SHA1_CTX; extern void SHA1Init(SHA1_CTX* context); extern void SHA1Update(SHA1_CTX* context, u_int8_t* data, u_int32_t len); extern void SHA1Final(u_int8_t digest[20], SHA1_CTX* context);
これで、だいたい準備は完了、コンパイルします。コンパイルが通ればおめでとうございます。
OAAttachmentが、下記のような場合は訂正が必要です。
ファイル:OAAtachment.h
#import <Foundation/Foundation.h> @interface OAAttachment : NSObject { NSString *name; NSString *fileName; NSString *contentType; NSData *data; } @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *fileName; @property (nonatomic, copy) NSString *contentType; @property (nonatomic, copy) NSData *data; - (id)initWithName:(NSString *)aName filename:(NSString *)aFilename contentType:(NSString *)aContentType data:(NSData *)aData; @end
ファイル:OAAtachment.m
#import "OAAttachment.h" @implementation OAAttachment @synthesize name, filename, contentType, data; - (id)initWithName:(NSString *)aName filename:(NSString *)aFilename contentType:(NSString *)aContentType data:(NSData *)aData{ self = [super init]; if(self){ self.name = aName; self.filename = aFilename; self.contentType = aContentType; self.data = aData; } return self; } - (void)dealloc{ [name release]; [filename release]; [contentType release]; [data release]; [super dealloc]; } @end
ファイル名が間違えています、ファイル名を変更します。
- OAAtachment.h -> OAAttachment.h
- OAAtachment.m -> OAAttachment.m
メンバ変数名が間違えています、OAAttachment.mを訂正します。
- filenameを、fileNameに訂正します。
これで、コンパイルが通ります。
※1 TwitterでSearchのAPIだけ、Twitter APIからの戻りがjson, atom形式で返されます。MGTwitterEngineでは、json形式のみ対応しています、json形式をパースするのにyajlかTouchJSONのライブラリを使います。
#if YAJL_AVAILABLE || TOUCHJSON_AVAILABLE // Search method - (NSString *)getSearchResultsForQuery:(NSString *)query; - (NSString *)getSearchResultsForQuery:(NSString *)query sinceID:(MGTwitterEngineID)sinceID startingAtPage:(int)pageNum count:(int)count; // search - (NSString *)getSearchResultsForQuery:(NSString *)query sinceID:(MGTwitterEngineID)sinceID startingAtPage:(int)pageNum count:(int)count geocode:(NSString *)geocode; // Trends method - (NSString *)getCurrentTrends; // current trends #endif
※2 各パーサーごとに利用するファイル
- LIBXML
MGTwitterLibXMLParser MGTwitterStatusesLibXMLParser MGTwitterMessagesLibXMLParser MGTwitterUsersLibXMLParser MGTwitterMiscLibXMLParser MGTwitterSocialGraphLibXMLParser
- YAJL
MGTwitterStatusesYAJLParser MGTwitterMessagesYAJLParser MGTwitterUsersYAJLParser MGTwitterMiscYAJLParser MGTwitterSearchYAJLParser
- TOUCHJSON
MGTwitterTouchJSONParser
- NSXMLParser
MGTwitterXMLParser MGTwitterStatusesParser MGTwitterUsersParser MGTwitterMessagesParser MGTwitterMiscParser MGTwitterSocialGraphParser MGTwitterUserListsParser