ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] 트위터API(Twitter API) 사용방법 - Twitcurl
    Programming/twitterAPI 2010. 8. 25. 10:08

    8.31일자로 Basic인증방식을 사용할 수가 없게되었습니다. 그래서 twitCurl을 수정하지 않는 이상은 일단 사용할 수없습니다.

     트위터 개발자 페이지를 보면 다양한 언어를 지원하는 API들이 제공됩니다.
    트위터에서 제공하는 것은 아니고 여러 개발자들이 만든 오픈소스를 모아놓은 것입니다.

    트위터API 라이브러리 목록 : http://dev.twitter.com/pages/libraries

    이번에 사용하는 API는 C++로 개발된 라이브러리입니다. 사이트에서 보시면 C++로 3가지 라이브러리가 있는데 그 중 Twitcurl 입니다.

    ※ 아래는 VisualStudio2008용 예제입니다.
    ※ 아래는 현재VisualStudio2008용 twitcurl라이브러리 소스 및 클라이언트예제입니다. (2010.11.19일 기준)
    ※ VisualStudio2010용 소스 및 예제입니다. (2011.03.10일 기준)


    Twitcurl 이라는 이름에서 알 수 있듯이 오픈소스인 libcurl을 사용하여 개발된 C++용 트위터 라이브러리입니다.
    libcurl에 대한 내용은 아래 사이트를 참고하시면 됩니다. libcurl은 사용법도 간단하고 활용범위도 넓기때문에 알아두시면 많은 도움이 되실것입니다.


    1. Twitcurl 컴파일
      Twitcurl은 VC6 을 사용하여 만들어졌습니다. 하지만 대부분의 기능이 libcurl을 사용하는 것이고 특별히 특성을 타는 API가 사용되지 않았기때문에 대부분의 OS를 지원한다고 합니다. 그리고 마찬가지로 다른 버전(2003, 2005, 2008, 2010) 에서도 별 이상없이 컴파일이 잘 됩니다.
    그리고 libcurl 라이브러리도 함께 포함되어 있기 때문에 따로 다운받지 않아도 됩니다.

    제 경우에는 VS2008로 컨버팅한 후 컴파일을 하였습니다. 컴파일을 하게 되면 twitcurl.lib 이름으로 정적라이브러리가 생성이 됩니다.
    이제 만들어진 라이브러리와 헤더파일(twitcurl.h)을 가지고 트위터 클라이언트 프로그램을 만들면 됩니다.


    2. 트위터 예제
     Twitcurl에서 제공하는 예제로 간단한 사용방법을 보겠습니다.
     


    #include "twitcurl.h"
    #include <iostream>
    
    int main()
    {
        twitCurl twitterObj;
        std::string tmpStr( "" );
        std::string replyMsg( "" );
    
        /* Set twitter username and password */
        char userName[1024];
        char passWord[1024];
        memset( userName, 0, 1024 );
        memset( passWord, 0, 1024 );
    
        printf( "\nEnter your twitter username: " );
        gets( userName );
        printf( "\nEnter your twitter password: " );
        gets( passWord );
    
        tmpStr = userName;
        twitterObj.setTwitterUsername( tmpStr );
        tmpStr = passWord;
        twitterObj.setTwitterPassword( tmpStr );
    
        /* Set proxy server usename, password, IP and port (if present) */
        char proxyPresent[1024];
        memset( proxyPresent, 0, 1024 );
    
        printf( "\nDo you have a proxy server configured (0 for no; 1 for yes): " );
        gets( proxyPresent );
        int isProxy = atoi( proxyPresent );
    
        if( isProxy > 0 )
        {
            char proxyIp[1024];
            char proxyPort[1024];
            char proxyUsername[1024];
            char proxyPassword[1024];
    
            memset( proxyIp, 0, 1024 );
            memset( proxyPort, 0, 1024 );
            memset( proxyUsername, 0, 1024 );
            memset( proxyPassword, 0, 1024 );
    
            printf( "\nEnter proxy server IP: " );
            gets( proxyIp );
            printf( "\nEnter proxy server port: " );
            gets( proxyPort );
            printf( "\nEnter proxy server username: " );
            gets( proxyUsername );
            printf( "\nEnter proxy server password: " );
            gets( proxyPassword );
    
            tmpStr = proxyIp;
            twitterObj.setProxyServerIp( tmpStr );
            tmpStr = proxyPort;
            twitterObj.setProxyServerPort( tmpStr );
            tmpStr = proxyUsername;
            twitterObj.setProxyUserName( tmpStr );
            tmpStr = proxyPassword;
            twitterObj.setProxyPassword( tmpStr );
        }
    
        /* Post a new status message */
        char statusMsg[1024];
        memset( statusMsg, 0, 1024 );
    
        printf( "\nEnter a new status message: " );
        gets( statusMsg );
        tmpStr = statusMsg;
    
        if( twitterObj.statusUpdate( tmpStr ) )
        {
            twitterObj.getLastWebResponse( replyMsg );
            printf( "\ntwitterClient:: twitCurl::updateStatus web response:\n%s\n", replyMsg.c_str() );
        }
        else
        {
            twitterObj.getLastCurlError( replyMsg );
            printf( "\ntwitterClient:: twitCurl::updateStatus error:\n%s\n", replyMsg.c_str() );
        }
    
        return 0;
    }
    

    * 참고적으로 VC6 상위버전을 사용하시는 경우 iostream.h 를 iostream으로 변경해주어야 합니다. iostream.h은 비표준 헤더파일로 상위버전부터는 지원되지 않기 때문입니다.

     예제를 보시면 twitCurl클래스를 생성하고 setTwitterUsername, setTwitterPassword 를 사용하여 사용자 계정정보를 설정한후 프록시서버를 사용하는 경우 프록서서버설정을 하도록 되어 있습니다.
    그리고 statusUpdate 함수를 통해 실제로 새 글을 남기도록 되어있으며 성공여부에 따라 성공인 경우 getLastWebResponse함수 또는 실패인 경우 
    getLastCurlError 함수를 통해 결과값을 확인할 수 있습니다.

    사용자로 부터 값을 입력받는 부분과 그 밖에 불필요한 부분을 제외하면 단 몇줄로 트위터 클라이언트가 구현되었습니다.
    물론 예제에서는 글을 올리는 기능만 구현되어 있지만 다른 기능들도 이와 비슷하기 때문에 괜찮은 라이브러리인듯 합니다.

    다음에는 다른 기능을 사용하는 방법과 한글문제를 해결하는 방법에 대해서 글을 올리도록 하겠습니다.


Designed by Tistory.