
코드 샘플
샘플코드는 src/twitter4j/examples/ 이하에 배치되어 있습니다.
각각 bin/className.cmd|sh 으로 실행가능합니다.
샘플코드를 동작시키는데는 OAuth 의 인증정보를 twitter4j.properties 에 기술해둘 필요가 있습니다. twittetr4j.properties 의 설정방법에 대한 상세내용은 Twitter4J - 설정페이지를 봐주십시오.
트위트
타임라인의 취득
다이렉트 메세지의 송수신
Tweet의 검색
비동기API
페이지 처리
OAuth 인증
Twitter 계정에 의한 Sign in
스트리밍 API
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() + "].");
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 를 봐주십시오.
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 를 봐주십시오.
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 를 봐주십시오.
비동기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]);
몇몇 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); Liststatuses = 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()); }
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
OAuth 를 사용하면 Twitter 의 계정으로 Web 어플리케이션의 인증도 가능합니다. 이것은 RequestToken 을 취득할때 인증후에 돌아오는 콜백 URL 을 지정 하고,콜백 URL 에 되돌려지는 oauth_verifier 파라메터를 사용해 AccessToken 을 취득하는것으로 실현 가능합니다.
간단한 구현예는 http://github.com/yusuke/sign-in-with-twitter 에 있습니다.
스트리밍 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 를 봐주십시오.