twitter API 의 page... count.. since_id, max_id 는... |- 프로그래밍

twitter4j 라는 자바용 트위터 API 구현 라이브러리를 이용해서 트위터 API를 사용해보고 있습니다.

타임라인을 가져오는 함수인 getFriendsTimeline() 을 사용하는데, 최근의 20개 글만 가져오게 됩니다. 
특정 위치부터 혹은 가져오는 글의 갯수를 제한하고자 할 때는 저 함수에 인자를 넣어 사용하면 됩니다.
저 함수가 오버로딩되어 있기 때문에 인자로 Paging 이라는 것을 받게 됩니다. 

Paging을 Javadoc 에서 살펴보면 많은(?) 정보들을 갖고 있는데.. 
page, count, since_id, max_id ... 

사실 트위터가 무슨 페이지가 있는 것도 아니었고... 그냥 일렬로 죽 아래로 글을 보여주는데 페이지가 어딨어 하고 헷갈렸습니다..
그래서 위의 page도 뭔지 잘 이해가 안되었는데.ㅠ.ㅠ
그냥 직접 써보니까 글을 count 만큼씩 쪼개서 페이지라고 칭하는 듯 합니다..
count 는 말 그대로 글을 몇개 가져올지입니다..

예를 들어 트위터에 지금 글이


내근하는회사원: 큰게 좋지 않겠음? 아.. 몰래 하려면 좀 더 작은게 나을지도..
나그네: 갖고 다니기 편한걸로 사셈.
행인: 뭘 사야하죠?
스토브잡 : 아니야. 내가 만든 어른패드가 짱임.
일성 : 역시 칼국스탭이 제일이군여.
....


이렇게 5개가 최근에 올라온 거라 치면,

Paging paging = new Paging(2, 2);  // Paging(int page, int count) 생성자 이용
ResponseList<Status> statuses = twitter.getFriendsTimeline(paging);
// 참고로 twitter4j 타임라인 가져오기 예제에는 ResponseList로 나오지 않고, List로 나왔지만.. 이클립스가 알아서 표시해주니 ResponseList 로 사용하시면 될 듯 합니다...;

로 글을 가져 왔을 경우, 행인과 스토브잡, 이 두 명의 글이 fetch되어 오게 되더군요.. 
그래서 page라는 건 단지 count 개씩 글을 나눴을 때, 몇 번째 그룹인지를 나타내는 것인 듯 합니다.. 

참고로 Paging 의 생성자는 여러 개가 있습니다.. 
위의 예에서는 Paging(int page, int count)  를 사용...

생성자 Paging(int page) 를 사용할 경우엔, 디폴트로 최근 20개의 트윗을 가져오기 때문에 
page 를 2로 줄 경우, 21번째 트윗부터 보이게 되더군요.. 

근데 since_id 랑 max_id는 모르겠네요 ㅠㅠㅠㅠㅠ
찾아도 예제도 잘 안보이고..  ㅜㅜㅜㅜㅜㅜㅜㅜㅜ, 

디폴트로 타임라인을 가져왔을 때, 20개보다 아래쪽 옛날 글 불러오려면 마지막 글을 구분할 수 있어야 할 것 같은데..;
아시는 분이 보신다면 좀 알려주세요;;


** 추가 ***
(아마도) 모든 트윗에는 ID가 붙는데, 이 아이디는 long 형의 숫자이며, 이 숫자는 아마도 시간을 long 형으로 변환한 것 그냥 글에 붙인 인덱스(일반 게시판에서 글 앞에 붙는 숫자처럼요..) 같습니다. 다시 말하자면, 년, 월, 일, 시간, 분, 초(예: 7275979106 는 2010-01-01 19:00:00 UTC 인 것 같습니다. 검색하다 보니...) 까지의 시간을 long형으로 바꾼 숫자가 모든 트윗에 붙게 되고 이 숫자를 트윗의 id 로 사용하게 됩니다. 
since_id 는 특정 시간 글 번호 이후의 글들만을 가져올 때 사용할 수 있는 듯 합니다. 실제로 트위의 ID 를 출력한 뒤 (status 클래스의 getID() 이용) 하나의 ID를 적어두고, 다시 타임라인을 불러올 때 앞서 적어 놨던 ID 를 since_id로 사용하여 Paging 정보를 이용하니 그 이후의 글들만 보였습니다. 
max_id 는 설명에 따르자면 since_id 와는 반대로 특정 시간대 글 번호 이전의 글들을 보여주기 위해 사용하는 것으로 보입니다. 
이 두개의 ID 필드를 잘 이용하면, 특정 시간대 글번호의 글들만 불러올 수 있을 것 같군요.. 

(어떻게 시간을 long 으로 변환하는지는 아직 잘 모르겠습니다으 ㅠ_ㅠ. 아마도 해당 프로그래밍 언어에서 시스템 시간을 구해서 long으로 변환하는 함수가 있을 듯 합니다요..) <-- 이 부분은 웹을 찾아보니 getCurrentTimeInMilliSecond() 인가 하는 함수를 이용해서 현재 시스템 시간을 그냥 long 형으로 구할 수 있겠네용.. status ID 가 시간이 아니므로 이젠 쓸모없겠지만;;



결론은..

* page : 게시판에 글이 20개씩 보인다치면 다음 20개를 보기 위해서는 다음 페이지로 넘어가는 것처럼 트윗 글을 갯수에 따라 구분해 주는 가상의(?) 페이지
* count : 가져올 트윗 갯수.
* since_id : 더 찾기 귀찮아서 모르겠음.ㅠㅠ (since_id 보다 큰 ID를 갖는 글들을 구별할 때 쓴다는데.. 이게 어떻게 붙는 숫자인지 모르겠... ㅠㅜ). 특정 시간 이후의 타임라인을 보기 위해 사용. since_id 보다 큰 ID 를 갖는 트윗들을 구분하는데 사용됨.
* max_id : 이것도... 무슨 이 ID보다 작은 아이디를 갖는 글들을 불러온다던데.. ID를 무슨 기준으로 붙이는지 잘 ... (특정 시간 이전의 타임라인을 보기 위해 사용. max_id 보다 작은 ID 를 갖는 트윗들을 구분하기 위해 사용.)

바보같은 기억력 때문에 잊어먹을 까봐.. 혹은 정리해보는 차원에서 쓴 글입니다.
혹시 읽으셨다면 감사합니다. (__)...



덧글

  • 수영문 2010/11/18 17:45 # 삭제 답글

    혹시 페이징 처리를 할려고하는데요
    http://event.fujixerox.co.kr/fund#complylayer 여기사이트에서 페이징 처리를 해서요

    혹시 전체 리스트 글 갯수를 알 수있는 방법이 있나요
  • 한을 2010/11/25 15:37 #

    ㅠㅠ 죄송합니다; 제가 글을 잘 올리는 편이 아니라.. 이제서야 보게 되었네요;
    전체 리스트 글 갯수라는 말씀은 한 사람의 타임라인에 있는 전체 트윗 수를 말씀하시는건지요;;ㅎ
    저도 트위터 연동을 자세히 보진 않고 필요한 기능만 봐서 자세히는 모르겠습니다.

    링크하신 사이트의 페이징 처리를 말씀하신거라면, 후원자 리스트를 사진으로 보여주되 페이지로 나눠서 보여주는 걸 말씀하신 것 같습니다.

    잠시 트위터API 사이트를 살펴보니,
    예를 들어, 특정 사용자의 트윗 갯수를 알아보기 위해서는

    http://api.twitter.com/version/users/show.format
    (저의 트위터 정보를 얻고자 한다면,
    http://api.twitter.com/1/users/show.json?screen_name=hwanud
    로 요청하면 나오더군요 ㅎ;; json도 가능하고 xml로도 가능하니 사용하시는 라이브러에 따라.. 적절히 ㅎㅎ)

    위의 API를 사용하면 돌아오는 내용에 statuses_count 라는 필드가 있는 것으로 보입니다.
    또한 팔로우 하고 있는 친구의 수는 friends_count 와 같은 형식으로 들어 있는 것으로 보입니다.
    이런 점으로 미루어 볼 때 전체 친구 숫자를 얻고 싶으시다면, 위와 같은 API를 통해 원하시는 사용자의 정보를 얻으시면 될 것 같습니다.

    너무 답글을 늦게 달아서 보실런지.. ㅠㅠ
댓글 입력 영역