기존에 구글 스크립트를 이용해서 연동하고 있었는데, 어느순간 갑자기 연동이 안된다....
알고보니 구글 스크립트 2개를 가져다 쓰고 있었는데 이 구글 스크립트 URL에서 404 오류가 나는 것이다.
Oauth라고 인증관련 스크립트인데 URL은 다음과 같다.
<script src="http://oauth.googlecode.com/svn/code/javascript/oauth.js"></script>
<script src="http://oauth.googlecode.com/svn/code/javascript/sha1.js"></script>
다시 스크립트로 작업을 하기 위해 찾아 헤매다가 답이 보이지않고 위 스크립트 관련 코멘트도 발견되지 않아서 결국 java로 개발하기로 했다. 라이브 러리는 twitter4j를 사용하였다. twitter4j가 static으로 돌아가고 있어서 static으로 처리하는 걸 고려해보아야한다. 일딴 빠르게 작업하기 위해 모두 하드코딩으로 작업했다.
SnsController 를 만들고 다음 코드를 static으로 선언했다.
static String accessToken = ""; //Access Token
static String accessSecret = ""; //Access Token Secret
static String consumerKey = ""; //Consumer Key (API Key)
static String consumerSecret = ""; //Consumer Secret (API Secret)
static{
Twitter twitter = TwitterFactory.getSingleton();
twitter.setOAuthConsumer(consumerKey, consumerSecret);
}
String 변수 4개는 반드시 필요하니 정의해주고 static 블럭에서 Consumer를 초기화 하였다. 이 부분은 한번 설정하면 다시 할 필요가 없기 때문에 별도로 정의했다. 매번 시도하려고 해도 에러가 발생한다. 다음은 소스 부분이다.
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import twitter4j.JSONArray;
import twitter4j.JSONObject;
import twitter4j.Paging;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.User;
import twitter4j.auth.AccessToken;
ModelAndView mav = new ModelAndView("sns/twitter");
try {
logger.info("TwitterFactory.getSingleton() start");
Twitter twitter = TwitterFactory.getSingleton();
AccessToken accesstoken = new AccessToken(accessToken, accessSecret);
twitter.setOAuthAccessToken(accesstoken);
User user = twitter.verifyCredentials();
Paging paging = new Paging(1, 16);
List<Status> list = twitter.getUserTimeline(paging);
JSONArray jsonArr = new JSONArray();
System.out.println("타임라인 계정:"+user.getScreenName());
for(Status status : list) {
JSONObject jsonItem = new JSONObject();
jsonItem.put("screen_name",status.getUser().getScreenName());
jsonItem.put("id",status.getId());
jsonItem.put("text",status.getText());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 M월 d일 a h:mm");
jsonItem.put("created_at", sdf.format(status.getCreatedAt()));
jsonArr.put(jsonItem);
}
mav.addObject("jsonArr", jsonArr);
} catch (Exception e) {
e.printStackTrace();
}
return mav;
상단에 import는 다른 타입으로 했다가 삽질한게 몇개 있어서 넣었다. 동일한 클래스가 다른 패키지에도 존재하니 주의해서 넣자. 이제 한부분씩 설명해보자.
Twitter twitter = TwitterFactory.getSingleton();
AccessToken accesstoken = new AccessToken(accessToken, accessSecret);
twitter.setOAuthAccessToken(accesstoken);
트위터 accesstoken 처리 부분이다.
이제 타임라인을 가져오는 부분을 보자
Paging paging = new Paging(1, 16);
List<Status> list = twitter.getUserTimeline(paging);
new Paging은 페이지의 리스트를 가져오는데, 1페이지에 글의 갯수는 16개라는 뜻이다. 페이징 기능 참 구현하기 쉽겠다.
JSONArray jsonArr = new JSONArray();
for(Status status : list) {
JSONObject jsonItem = new JSONObject();
jsonItem.put("screen_name",status.getUser().getScreenName());
jsonItem.put("id",status.getId());
jsonItem.put("text",status.getText());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 M월 d일 a h:mm");
jsonItem.put("created_at", sdf.format(status.getCreatedAt()));
jsonArr.put(jsonItem);
}
mav.addObject("jsonArr", jsonArr);
json으로 변환하는 부분이다. JSONArray를 이용하여 리스트를 만들어주면 되겠다. 그리고 간만에 jsp를 해서 까먹고 있었는데, 출력하는 jsp파일 안에 page 설정이나 taglib 설정은 하면 안된다. 공백이 들어가서 한참 고생했다. 내용에는 ${jsonArr} 만 정의하니 잘되네... 하.. 아까운 내 시간...
일딴 좀 급하게 만든 감이 있어서 어설프지만 시간이 없는 관계로 이렇게 적용하려고 한다. 혹시 이상한 부분이 있다면 언제나 코멘트 환영이다.
참고한 사이트가 많은데, 솔직히 도움된 사이트는 몇개 없다.
http://twitter4j.org/ko/code-examples.html
http://mycup.tistory.com/151
'SNS' 카테고리의 다른 글
Synology에서 텔레그램 봇으로 로그 전송하기 (0) | 2016.01.19 |
---|---|
텔레그램 봇으로 메시지 전송하기 (2) | 2016.01.19 |
페이스북 공유 데이터 갱신 (0) | 2015.06.15 |