Development
글수 82
아이팟 터치 - 혹은 아이폰 - 사용자들은 아마도 트위터 어플리케이션 하나쯤은 설치해서 사용하고 있지 않나 생각합니다.
AppStore 에는 아주 많은 수의 Twitter 관련 프로그램들이 있으며, 무료 프로그램도 쓸만한 것들이 많이 있습니다.
AppStore 에는 아주 많은 수의 Twitter 관련 프로그램들이 있으며, 무료 프로그램도 쓸만한 것들이 많이 있습니다.
그리고, 트위터 사용이 주 목적이 아니라, 보조 기능으로 트위터에 접속할 수 있는 프로그램도 많습니다. (제가만든 '오늘의 명언' 이나 'Funny Cartoon Face' 같은 것들... 절대 광고하려는 의도가 아니라... 쿨럭...)
이것은, 모두 아시다시피 트위터 API 가 공개되어 있기 때문에 가능합니다. 공개된 API를 사용하여 iPhone 프로그램을 만들던, 또 다른 웹 서비스를 만들던, PC용 프로그램을 만들던 자유롭게 접근할 수 있습니다.
당연히 이러한 인터넷 프로그래밍에 익숙한 사람이라면, API 만 보고서 얼마든지 원하는 기능을 구현할 수 있겠지만, 우리는 보다 편한 방법으로 이러한 API 를 사용할 수 있다면 좋지 않겠습니까?
Twitter API 를 보시려면 여기를 보세요.
http://apiwiki.twitter.com/Twitter-API-Documentation
다행이도, Objective-C 언어를 사용한 Wrapper 라이브러리가 공개되어 있습니다. MGTwitterEngine 이라는 것인데, 전해들리는 말로는 우리가 잘 아는 iPhone 용 트위터 프로그램인 Twitterific 도 이것을 이용해서 작성되었다고 합니다. 아마 굉장히 많은 트위터 관련 App 들이 이것을 사용해서 작성되어 앱스토어에 등록된 상황일 것입니다.
MGTWitterEngine 은 소스가 완전히 공개되어 있으며, 무료입니다! 우리도 이것을 이용해서 트위터 프로그램을 만들거나, 여러분의 프로그램에 트위터 관련 기능을 넣는 것이 가능합니다.
소스는 Git 로 구하실 수 있습니다.
http://github.com/maddox/mgtwitterengine
어떻게든 소스 코드를 가져오는 것은 쉽습니다. 그러면, 이것을 사용해서 간단한 예제를 한번 만들어 볼까요?
먼저, 각자 원하는 형식대로 임의의 프로젝트를 만듭니다. 뷰 형식이든, 테이블 형식이든 그런것은 중요하지 않습니다.
그리고, 프로젝트에 하나의 그룹을 만들어서 MGTwitterEngine 소스를 포함시키도록 합니다. 그래야 보기 좋으니까요.

우리의 프로젝트에 소스 코드로 포함시켰기 때문에, 소스에 포함되어 있던 프로젝트 파일같은 것들은 필요가 없습니다. 이런 식으로 하지 않고 프레임웍(framework)으로 만들고 싶은 분들도 계실테지만, 일단 여기서는 이렇게 진행하도록 하겠습니다. 제일 쉬운 방법이니까요.
그 다음 꼭 해주어야 할 일이 두 가지 있습니다. 하나는 xml 관련 framework을 추가하는 것이고, 다른 하나는 include 탐색 path 를 하나 더 추가하는 것입니다.
일단, 프레임웍을 사용하기 위해서 MGTwitterEngine.m 소스 코드 상단에 있는 USE_LIBXML 정의를 1로 변경해주세요.

그리고, 프로젝트의 info 를 열어 include path 를 다음과 같이 추가해 줍니다. 추가해 준 결과는 그 아래 그림과 같습니다.

이제 여러분의 프로젝트를 컴파일 해보세요. 아마 이상없이 컴파일 될 것입니다. 만인 또 다른 문제가 있다면 알려주시기 바랍니다. 여기까지 빠진 내용은 없으니, 만일 문제가 있더라도 사소한 내용일 것이라고 예상됩니다.
MGTwitterEngine 을 사용하려면, 일단 위에서 소개해드린 Twitter API 를 먼저 살펴보는 것이 정석일 것입니다. MGTwitterEngine 의 메소드 하나하나는 Twitter API 의 그것과 거의 일대일로 매칭되어 있다고 보시면 됩니다.
MGTwitterEngine 을 사용하는데에 필수적인 내용을 살펴보았습니다. 나머지 여러 가지 기능들은, 모두 Twitter API 와 대조하면서 해당 메소드를 사용하면 됩니다.
그런데! 주의할 점이 하나 있습니다.
MGTwitterEngine 을 보면 아직 구현되지 않은 메소드들이 있습니다. 트위터 API 의 모든 기능이 구현되지 않은 상태인 것이죠. 개발자가 Git 사이트에 올려놓은 소스를 보면 요즘 작업이 진행되고 있는것 같지가 않습니다. MGTwitterEngine 에 사용자 프로필 이미지를 업로드하는 기능 - account/update_profile_image - 같은 것들이 구현되어 있지 않다는 것입니다. 구현되지 않은 것들도 MGTwitterEngine.h 헤더 파일에 명시는 되어 있으므로, 참고바랍니다.
이것은, 모두 아시다시피 트위터 API 가 공개되어 있기 때문에 가능합니다. 공개된 API를 사용하여 iPhone 프로그램을 만들던, 또 다른 웹 서비스를 만들던, PC용 프로그램을 만들던 자유롭게 접근할 수 있습니다.
당연히 이러한 인터넷 프로그래밍에 익숙한 사람이라면, API 만 보고서 얼마든지 원하는 기능을 구현할 수 있겠지만, 우리는 보다 편한 방법으로 이러한 API 를 사용할 수 있다면 좋지 않겠습니까?
Twitter API 를 보시려면 여기를 보세요.
http://apiwiki.twitter.com/Twitter-API-Documentation
다행이도, Objective-C 언어를 사용한 Wrapper 라이브러리가 공개되어 있습니다. MGTwitterEngine 이라는 것인데, 전해들리는 말로는 우리가 잘 아는 iPhone 용 트위터 프로그램인 Twitterific 도 이것을 이용해서 작성되었다고 합니다. 아마 굉장히 많은 트위터 관련 App 들이 이것을 사용해서 작성되어 앱스토어에 등록된 상황일 것입니다.
MGTWitterEngine 은 소스가 완전히 공개되어 있으며, 무료입니다! 우리도 이것을 이용해서 트위터 프로그램을 만들거나, 여러분의 프로그램에 트위터 관련 기능을 넣는 것이 가능합니다.
소스는 Git 로 구하실 수 있습니다.
http://github.com/maddox/mgtwitterengine
어떻게든 소스 코드를 가져오는 것은 쉽습니다. 그러면, 이것을 사용해서 간단한 예제를 한번 만들어 볼까요?
먼저, 각자 원하는 형식대로 임의의 프로젝트를 만듭니다. 뷰 형식이든, 테이블 형식이든 그런것은 중요하지 않습니다.
그리고, 프로젝트에 하나의 그룹을 만들어서 MGTwitterEngine 소스를 포함시키도록 합니다. 그래야 보기 좋으니까요.

우리의 프로젝트에 소스 코드로 포함시켰기 때문에, 소스에 포함되어 있던 프로젝트 파일같은 것들은 필요가 없습니다. 이런 식으로 하지 않고 프레임웍(framework)으로 만들고 싶은 분들도 계실테지만, 일단 여기서는 이렇게 진행하도록 하겠습니다. 제일 쉬운 방법이니까요.
그 다음 꼭 해주어야 할 일이 두 가지 있습니다. 하나는 xml 관련 framework을 추가하는 것이고, 다른 하나는 include 탐색 path 를 하나 더 추가하는 것입니다.
일단, 프레임웍을 사용하기 위해서 MGTwitterEngine.m 소스 코드 상단에 있는 USE_LIBXML 정의를 1로 변경해주세요.
#define USE_LIBXML 1
그리고 프로젝트의 프레임웍에 libxml2.dylib 를 포함시켜 줍니다.

그리고, 프로젝트의 info 를 열어 include path 를 다음과 같이 추가해 줍니다. 추가해 준 결과는 그 아래 그림과 같습니다.
$SDKROOT/usr/include/libxml2

원래 이것으로 충분해야 하는데, 문제가 되는 부분이 있을 것입니다. 위에서 libxml 을 사용하기로 했기 때문에, YAJL 관련 코드는 빼도록 설정해 주어야 할 것입니다. MGTwitterGlobalHeader.h 헤더파일에서 다음의 정의를 0으로 바꿔주시기 바랍니다.
#define YAJL_AVAILABLE 0
이제 여러분의 프로젝트를 컴파일 해보세요. 아마 이상없이 컴파일 될 것입니다. 만인 또 다른 문제가 있다면 알려주시기 바랍니다. 여기까지 빠진 내용은 없으니, 만일 문제가 있더라도 사소한 내용일 것이라고 예상됩니다.
컴파일은 되었는데, 그럼 어떻게 사용해야 할까요? 간단한 예제를 통해서 맛보기를 해봅시다.
MGTwitterEngine 을 사용하려면, 일단 위에서 소개해드린 Twitter API 를 먼저 살펴보는 것이 정석일 것입니다. MGTwitterEngine 의 메소드 하나하나는 Twitter API 의 그것과 거의 일대일로 매칭되어 있다고 보시면 됩니다.
일단 MGTwitterEngine.h 헤더파일을 살펴보시기 바랍니다. 특별히 MGTwitterEngine 을 수정할 것이 아니라면, 이 헤더 파일에 알고자 하는 내용은 다 나와 있습니다. 쭉 살펴보시면, 어떤 기능들을 사용할 수 있는지 감이 오실 것입니다.
만일 트위터 API 를 어떤 방식으로든 사용해보신 분이시라면, 이 헤더 파일을 쭉 살펴보기만 하는 것으로도 충분하실 것입니다.
여기서는 아주 기본적인 기능만 맛보기로 사용해 봅시다.
프로젝트의 주 소스코드 헤더 파일을 다음과 같이 구성합니다.
#import <UIKit/UIKit.h>
#import "MGTwitterEngine.h"
@interface ExampleController : UIViewController <MGTwitterEngineDelegate>
{
/// ... your code ...
///
MGTwitterEngine *twitterEngine;
}
다음의 코드는 지정된 트위터 계정으로 로그인 합니다.
// 트위터에 로그인한다.
if( nil == twitterEngine ){
twitterEngine = [[MGTwitterEngine alloc] initWithDelegate:self];
[twitterEngine setUsername:@"당신의계정" password:@"당신의암호"];
}
if( nil == twitterEngine ){
twitterEngine = [[MGTwitterEngine alloc] initWithDelegate:self];
[twitterEngine setUsername:@"당신의계정" password:@"당신의암호"];
}
그리고 다음과 같이 하면 글 하나가 포스팅 됩니다.
[twitterEngine sendUpdate:@"우와우와 아이폰에서 트위팅해요 ~"];
// 대기 이미지 표시. 기다리시오...
//....
이와 같이 동작을 수행하면, 다음과 같은 Delegate 메소드 세 개를 통해서 결과를 알고 처리하면 됩니다.
- (void)requestSucceeded:(NSString *)requestIdentifier
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"성공 !"
message:@"글을 올렸어요! 이런식으로 처리하면 됩니다!"
delegate:self cancelButtonTitle:@"확인"
otherButtonTitles: nil];
[alert show];
[alert release];
}
- (void)requestFailed:(NSString *)requestIdentifier withError:(NSError *)error
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"에러입니다"
message:@"동작에 실패했습니다."
delegate:self cancelButtonTitle:@"확인"
otherButtonTitles: nil];
[alert show];
[alert release];
}
- (void)statusesReceived:(NSArray *)statuses forRequest:(NSString *)identifier
{
NSLog(@"Got statuses:\r%@", statuses);
}
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"성공 !"
message:@"글을 올렸어요! 이런식으로 처리하면 됩니다!"
delegate:self cancelButtonTitle:@"확인"
otherButtonTitles: nil];
[alert show];
[alert release];
}
- (void)requestFailed:(NSString *)requestIdentifier withError:(NSError *)error
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"에러입니다"
message:@"동작에 실패했습니다."
delegate:self cancelButtonTitle:@"확인"
otherButtonTitles: nil];
[alert show];
[alert release];
}
- (void)statusesReceived:(NSArray *)statuses forRequest:(NSString *)identifier
{
NSLog(@"Got statuses:\r%@", statuses);
}
MGTwitterEngine 을 사용하는데에 필수적인 내용을 살펴보았습니다. 나머지 여러 가지 기능들은, 모두 Twitter API 와 대조하면서 해당 메소드를 사용하면 됩니다.
그런데! 주의할 점이 하나 있습니다.
MGTwitterEngine 을 보면 아직 구현되지 않은 메소드들이 있습니다. 트위터 API 의 모든 기능이 구현되지 않은 상태인 것이죠. 개발자가 Git 사이트에 올려놓은 소스를 보면 요즘 작업이 진행되고 있는것 같지가 않습니다. MGTwitterEngine 에 사용자 프로필 이미지를 업로드하는 기능 - account/update_profile_image - 같은 것들이 구현되어 있지 않다는 것입니다. 구현되지 않은 것들도 MGTwitterEngine.h 헤더 파일에 명시는 되어 있으므로, 참고바랍니다.
2009.09.30 09:26:24
네 그렇습니다. 로그인이 여기서 되는 것이 아니라, 로그인 정보를 세팅하는 것입니다.
그리고 실제 에러 유무는 글을 포스팅 한다던가 하는 구체적인 동작에서 일어날 것입니다.
그리고 실제 에러 유무는 글을 포스팅 한다던가 하는 구체적인 동작에서 일어날 것입니다.
2009.09.30 11:58:32
답변 감사합니다.
트위터와 비슷한 sns서비스 말고 me2day 같은 정보가 있으시면 강의 강좌 부탁드립니다.
그럼 즐거운 하루 보내세요... ^^
트위터와 비슷한 sns서비스 말고 me2day 같은 정보가 있으시면 강의 강좌 부탁드립니다.
그럼 즐거운 하루 보내세요... ^^
2009.12.02 17:36:08
yajl 오류 나시는 분은 http://damienh.org/2009/06/20/setting-up-mgtwitterengine-with-yajl-106-for-iphone-development/
여기 참고 하시고 git와 cmake를 설치하세요
여기 참고 하시고 git와 cmake를 설치하세요

저도 트위터를 가져놀고 있는데 내용중 제가 아는 것과 다른 부분이 있어서 글을 올립니다.
로그인 부분에서 [twitterEngine setUsername:@"당신의계정" password:@"당신의암호"]; 을 로그인 이라고 표현을 하셨는데,
실제로는 로그인이 아니라 그냥 트위터엔진에 유저이름과 비밀번호를 저장만 시키고 다른 작업은 하지 않습니다.
이 부분만으로는 실제 아이디,비밀번호를 오타로 인한 입력의 체크를 하지 않기 때문에 다른 메세지를 통해서 확인해야 할꺼같습니다.
혹시 제가 잘못 이해하고 있다면 수정 부탁드립니다.
그럼 아이폰에서 트위터를 신나게 즐겨봅시다. ㅋㅋ