English | Japanese | Korean

 



코드 샘플

샘플코드는 src/twitter4j/examples/ 이하에 배치되어 있습니다.
각각 bin/className.cmd|sh 으로 실행가능합니다.
샘플코드를 동작시키는데는 OAuth 의 인증정보를 twitter4j.properties 에 기술해둘 필요가 있습니다. twittetr4j.properties 의 설정방법에 대한 상세내용은 Twitter4J - 설정페이지를 봐주십시오.

  1. 트위트

  2. Twitter.updateStatus() 메서드로 트위트 가능합니다.
    상세내용은 twitter4j.examples.tweets.UpdateStatus.java 를 봐주십시오.

        // 이 팩토리인스턴스는 재이용가능하고 thread safe 합니다.
        Twitter twitter = TwitterFactory.getSingleton();
        Status status = twitter.updateStatus(latestStatus);
        System.out.println("Successfully updated the status to [" + status.getText() + "].");
    

  3. 타임라인의 취득

  4. Twitter.get****Timeline() 메서드로 홈타임라인을 반환합니다.
    상세내용은 twitter4j.examples.timeline.GetHomeTimeline.java 를 봐주십시오.

        // 이 팩토리인스턴스는 재이용가능하고 thread safe합니다.
        Twitter twitter = TwitterFactory.getSingleton();
        List<Status> statuses = twitter.getHomeTimeline();
        System.out.println("Showing home timeline.");
        for (Status status : statuses) {
            System.out.println(status.getUser().getName() + ":" +
                               status.getText());
        }
    
    Java1.4 나 Processing 에서 컴파일이 안되십니까? FAQ 를 봐주십시오.

  5. 다이렉트 메세지의 송수신

  6. Twitter.sendDirectMessage() / Twitter.getDirectMessages() 메서드로 다이렉트 메세지의 송수신이 가능합니다.
    이 메세지는 송신한 상대에게만 보입니다.
    상세내용은 twitter4j.examples.directmessage.SendDirectMessage.java 을 봐주십시오.

        // 이 팩토리인스턴스는 재이용가능하고 thread safe합니다.
        Twitter sender = TwitterFactory.getSingleton();
        DirectMessage message = sender.sendDirectMessage(recipientId, message);
        System.out.println("Sent: " message.getText() + " to @" + message.getRecipientScreenName());
    
    Java1.4 나 Processing 에서 컴파일이 안되십니까? FAQ 를 봐주십시오.

  7. Tweet의 검색

  8. Query 클래스와 Twitter.search(twitter4j.Query) 메서드로 검색합니다.
    상세내용은 twitter4j.examples.search.SearchTweets.java 을 봐주십시오.

        // 이 팩토리인스턴스는 재이용가능하고 thread safe합니다.
        Twitter twitter = TwitterFactory.getSingleton();
        Query query = new Query("source:twitter4j yusukey");
        QueryResult result = twitter.search(query);
        for (Status status : result.getTweets()) {
            System.out.println("@" + status.getUser().getScreenName() + ":" + status.getText());
        }
    
    Java1.4 나 Processing 에서 컴파일이 안되십니까? FAQ 를 봐주십시오.

  9. 비동기API

  10. 비동기API를 사용하면 실제의 메서드 콜의 종료를 기다리지 않고 처리를 계속하는 것이 가능합니다.
    실제의 메서드 콜은 별도의 스레드로 실행되고, 처리의 결과는 TwitterListener 인터페이스에 의해 수신가능합니다.
    비동기 API 를 사용하기 위해서는 Twitter 클래스 대신 twitter4j.AsyncTwitter 클래스를 사용하여 ***Async() 메서드를 twitter4j.TwitterListener 의 인스턴스로 같이 호출합니다.
    상세내용은 twitter4j.examples.async.AsyncUpdate.java 를 봐주십시오.

        TwitterListener listener = new TwitterAdapter() {
            @Override public void updatedStatus(Status status) {
              System.out.println("Successfully updated the status to [" +
                       status.getText() + "].");
            }
    
            @Override public void onException(TwitterException e, int method) {
              if (method == TwitterMethods.UPDATE_STATUS) {
                e.printStackTrace();
              } else {
                throw new AssertionError("Should not happen");
              }
            }
        }
        // 이 팩토리인스턴스는 재이용가능하고 thread safe합니다.
        AsyncTwitterFactory factory = new AsyncTwitterFactory();
        AsyncTwitter asyncTwitter = factory.getInstance();
        asyncTwitter.addListener(listenrer);
        asyncTwitter.updateStatus(args[0]);
    

  11. 페이지 처리

  12. 몇몇 API는 페이지처리를 서포트하고 있습니다. 페이지처리에는 이하의 파라메터를 지정가능합니다.:

    page: 페이지
    count: 1페이지당 건수
    since_id: 지정한 id 이후의 요소를 취득
    max_id: 지정한 id 이전의 정보를 취득
    이 파라메터들의 지정에는 Paging 클래스를 이용합니다.
    모든 파라메터가 반드시 서포트되고 있지않다는 것에 주의하십시오. 어떤 파라메터가 서포트되고 있는가의 여부는 서포트 API 리스트를 확인해 주십시오.
        // 이 팩토리인스턴스는 재이용가능하고 thread safe합니다.
        Twitter twitter = TwitterFactory.getSingleton();
        // 2번째 페이지를 요청, 1페이지당 건수는 40건
        Paging paging = new Paging(2, 40);
        List statuses = twitter.getFriendsTimeline(paging);
        for (Status status : statuses) {
            System.out.println(status.getUser().getScreenName() + ":" + status.getText());
        }
    
        // 3번째 페이지를 요청, since_id 는 (long)1000
        statuses = twitter.getFriendsTimeline(new Paging(3).sinceId(1000l));
        for (Status status : statuses) {
            System.out.println(status.getUser().getScreenName() + ":" + status.getText());
        }
    

  13. OAuth 인증

  14. OAuth 인증방법을 사용하면 유저에게 유저ID, 패스워드를 제공받지 않고 유저의 계정정보에 접근 가능합니다. OAuth 를 이용하기 위해서는 http://twitter.com/oauth_clients/new 에서 사전에 어플리케이션을 등록시켜두고 consumer key, consumer secret 을 취득해둘 필요가 있습니다. key 와 secret 는 Twitter#setOAuthConsumer() 으로 설정 혹은, 시스템 프로퍼티에서 VM 파라메터로 아래와 같이 지정해 둡니다.

    -Dtwitter4j.oauth.consumerKey=[consumer key]
    -Dtwitter4j.oauth.consumerSecret=[consumer secret]
    처음은 사용자계정에 접속할 권한이 없습니다. 아래와 같이 authorization URL 에 유저를 유도하여, AccessToken 를 취득해야 하는 필요가 있습니다.
      public static void main(String args[]) throws Exception{
        // 이 팩토리인스턴스는 재이용가능하고 thread safe합니다.
        Twitter twitter = TwitterFactory.getSingleton();
        twitter.setOAuthConsumer("[consumer key]", "[consumer secret]");
        RequestToken requestToken = twitter.getOAuthRequestToken();
        AccessToken accessToken = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        while (null == accessToken) {
          System.out.println("Open the following URL and grant access to your account:");
          System.out.println(requestToken.getAuthorizationURL());
          System.out.print("Enter the PIN(if aviailable) or just hit enter.[PIN]:");
          String pin = br.readLine();
          try{
             if(pin.length() > 0){
               accessToken = twitter.getOAuthAccessToken(requestToken, pin);
             }else{
               accessToken = twitter.getOAuthAccessToken();
             }
          } catch (TwitterException te) {
            if(401 == te.getStatusCode()){
              System.out.println("Unable to get the access token.");
            }else{
              te.printStackTrace();
            }
          }
        }
        //향후에 참조용으로 accessToken 을 지속시킨다.
        storeAccessToken(twitter.verifyCredentials().getId() , accessToken);
        Status status = twitter.updateStatus(args[0]);
        System.out.println("Successfully updated the status to [" + status.getText() + "].");
        System.exit(0);
      }
      private static void storeAccessToken(int useId, AccessToken accessToken){
        //accessToken.getToken() 을 보존
        //accessToken.getTokenSecret() 을 보존
      }
    
    AccessToken 을 취득한 이후는 RequestToken 는 필요치 않습니다. 다음부터는 consumer key/secret 와 AccessToken 만으로 사용자계정에 접근 가능합니다.
      public static void main(String args[]) throws Exception{
        // 이 팩토리인스턴스는 재이용가능하고 thread safe합니다.
        TwitterFactory factory = new TwitterFactory();
        AccessToken accessToken = loadAccessToken(Integer.parseInt(args[0]));
        Twitter twitter = factory.getInstance();
        twitter.setOAuthConsumerKey("[consumer key]", "[consumer secret]");
        twitter.setOAuthAccessToken(accessToken);
        Status status = twitter.updateStatus(args[1]);
        System.out.println("Successfully updated the status to [" + status.getText() + "].");
        System.exit(0);
      }
      private static AccessToken loadAccessToken(int useId){
        String token = // load from a persistent store
        String tokenSecret = // load from a persistent store
        return new AccessToken(token, tokenSecret);
      }
    
    See also: Twitter API Wiki / OAuth FAQ

  15. Twitter 계정에 의한 Sign in

  16. OAuth 를 사용하면 Twitter 의 계정으로 Web 어플리케이션의 인증도 가능합니다. 이것은 RequestToken 을 취득할때 인증후에 돌아오는 콜백 URL 을 지정 하고,콜백 URL 에 되돌려지는 oauth_verifier 파라메터를 사용해 AccessToken 을 취득하는것으로 실현 가능합니다.
    간단한 구현예는 http://github.com/yusuke/sign-in-with-twitter 에 있습니다.

  17. 스트리밍 API

  18. 스트리밍 API 를 위해 TwitterStream 클래스에는 여러개의 메서드 가 준비되어 있습니다.StatusListener 인터페이스의 구현을 준비해 두면 스래드 작성, 스트림로드는 Twitter4J 가 대신해 줍니다.
    상세내용은 twitter4j.examples.stream.PrintSampleStream.java 를 봐주십시오.

    public static void main(String[] args) throws TwitterException, IOException{
        StatusListener listener = new StatusListener(){
            public void onStatus(Status status) {
                System.out.println(status.getUser().getName() + " : " + status.getText());
            }
            public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {}
            public void onTrackLimitationNotice(int numberOfLimitedStatuses) {}
            public void onException(Exception ex) {
                ex.printStackTrace();
            }
        };
        TwitterStream twitterStream = new TwitterStreamFactory().getInstance();
        twitterStream.addListener(listener);
        // sample() method internally creates a thread which manipulates TwitterStream and calls these adequate listener methods continuously.
        twitterStream.sample();
    }
    
    Java1.4 나 Processing 에서 컴파일이 안되십니까? FAQ 를 봐주십시오.