이 글은 DroidEgo님의 2010년 2월 1일미투데이 내용입니다.

Buy me a coffeeBuy me a coffee

오랜만의 프로그래밍 관련 포스팅입니다.

저는 이번에 제 Twitter 계정에 시간을 알려주는 봇을 구현하였습니다.
(봇[bot] : 특정시간이나 행위에 자동반응하는 형식의 실행하는 서비스를 말합니다)

저의 Twitter 계정에 "현재, 한국시간으로 2010년 1월 24일 오전 6시 를 알려드립니다." 라는 식의 시계 봇을 구현함.


위의 화면를 보시면, 제 트위터를 Following하시면 제가 현재 시간을 알려드리는 걸 알수 있습니다.

(봇은 어떻게 구현했나구요? Google AppEngine이라는 서비스로 Java로 구현했답니다^^)


Google AppEngine book
Google AppEngine book by Channy Yun 저작자 표시

(참고로 Google App Engine은 무료로 제공되는 Java/Python 기반 웹 호스팅 서비스입니다)


제가 간단한 트위터에 시간 알려주는 봇을 구현한 이유는 트위터에서 @xguru 라는 닉을 사용하는 권정혁님이 개발한 트위터 봇들에 영감을 얻고, 나도 프로그램을 작성할 수 있는 학생인데 한번 만들어 봐야지라는 문제의식으로부터 시작하였습니다.

트위터의 xguru님께서 만든 Twitter bot들입니다.


위의 시간을 알려주는 봇을 구현하는데엔 기본적인 Java지식, 그리고 Java Server Page(JSP), Servlet, Twitter API등을 알아야됩니다.

Java기반 지식들은 아 알겠다는 가정하에 트위터 API들을 알아봐야겠죠?

Twitter의 API에 대해선 Twitter에서 제공하는 사이트에서 검색을 하면 나옵니다.
Twitter API wiki

Twitter API는 REST API와 Search API라 나눠집니다.

  • Twitter REST API
    개발자들이 update timeline, status data, 사용자 정보등의 Twitter의 핵심 데이터를 작성, 수정등의 접근할 수 있게 허용해줍니다.
  • Twitter Search API
    Search API는 개발자들에게 Twitter 검색 서비스와 상호작용할수있도록 해주며, 검색 트랜드 관련 데이터에 접근 할수 있도록 해준다.
  • 위의 글의 출처는 아래와 같습니다. http://apiwiki.twitter.com/API-Overview

    The Twitter REST API methods allow developers to access core Twitter data. This includes update timelines, status data, and user information. The Search API methods give developers methods to interact with Twitter Search and trends data.

참고로 Twitter API를 사용할때 주의해야할 점은 일정시간 안에 전송되는 요청을 제한을 합니다.

Twitter API를 사용하였을 경우에 시간당 최대 호출을 150개로 제한을 하고 있죠.

최대 호출을 150개 넘게 호출하면 아래 화면과 같이 Limit라는 것에 걸려서 글을 작성 못하는 일이 발생합니다.

리밋에 대해선 트위터 리밋에 관하여…라는 글을 읽어보시기 바랍니다.

트위터 리밋에 걸릴때 나오는 문구입니다. 이것은 누군가 잘못된 암호를 보내려는 공격시도가 있을때 보이는 리밋문구입니다.


만약 프로그램을 작성한 봇이 요청을 시도할때 이유 없이 에러 발생하면 100% 리밋에 걸렸는지 의심을 해봐야됩니다.

여기서는 Twitter에 글을 작성할 것이기 때문에 Twitter REST API를 사용합니다.

Twitter REST API를 가지고 직접 구현해서 Twitter bot을 구현할 수 있습니다. 그러나 삽질이긴 합니다 =_=.

이미 트위터의 API를 구현한 3rd Party 라이브러리들이 많이 제공하고 있답니다.

http://apiwiki.twitter.com/Libraries 여기에서는 각종 언어로 Twitter REST API를 구현한 라이브러리들이 있습니다.

저는 간단하게 코딩을 하려는데 Twitter4J라는 라이브러리를 선택하였습니다.


Twitter4J는 Yusuke Yamamoto가 Java로 구현한 라이브러리입니다. 오픈소스이며, maven과 통합가능하며, Google App Engine과 친화적인 Java 라이브러리입니다. Twitter4J는 BSD 라이센스을 가지고 있습니다.

Twitter4J는 다음과 같은 기능을 제공한답니다.

  • 100% 순수 자바로 구현 되었으며, JDK 1.4.2 이후의 버전에서 동작한다.
  • Google Android Platform에서도 지원가능
  • 의존성이 없음. 추가적으로 필요한 jar 파일이 없어도 됨.
  • OAuth를 지원함
  • 빠른 수행을 위해서 데이터를 gzip으로 압축해서 전송함

Twitter4J 홈페이지 - http://twitter4j.org/en/index.html



Twitter4J 라이브러리를 사용하고 Eclipse와 Google App Engine을 이용하여 트윗 봇을 구현하였습니다.


Servlet mapping은 web.xml에 있으며 서블릿 클래스를 추가하고 싶으면 web.xml을 추가하면 됩니다.

자바코드를 작성하여 트윗에 올라갈 적절한 내용을 구현합니다.

자바로 트윗 봇을 구성하였으면, 매 시간마다 트윗을 올리기 위해서는 cron 기능을 이용해야합니다. cron설정을 하면 원하는 시간에 트윗을 올릴 수 있습니다.

Google App Engine에서 제공하는 cron을 사용하려면 war/WEB-INF 폴더에 cron.xml을 생성하여 cron.xml에 원하는 시간을 작성해서 올리면 됩니다.

cron 기능 수행에 대한 자세한 내용은 Google App Engine - Scheduled Tasks With Cron for Java 링크를 참조하기 바랍니다.

저는 트윗을 한시간에 하나씩 올리려고 아래와 같이 cron.xml을 구성하였습니다.


<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/mashuptime</url>
    <description>Execute time bot every 1 hours</description>
    <schedule>every 1 hours</schedule>
    <timezone>Asia/Seoul</timezone>
  </cron>
</cronentries>


작성을 하고 나선 Deploy를 하여 올리면 간단한 트윗봇이 완성됩니다^^

Java로 작성한 Twitter bot을 Google App Engine에 Deploy하고 올리려는 화면


Google AppEngine으로 Java로 된 웹 페이지를 코딩하고 나선, 갑자기 이런 생각을 하더군요.

Google AppEngine에서 cron기능을 제공하여 매 시간마다 Servlet을 작동시켜 아래와 같은 봇을 구현을 하는데엔 30분도 걸리지 않았습니다.

참 쉽조잉?



이번에 뭔가 Feel을 받으면 매쉬업으로 Twitter bot들을 계속 양산할 느낌이 들더군요. @.@

Buy me a coffeeBuy me a coffee
  1. Favicon of http://underclub.tistory.com BlogIcon 티몰스 2010.07.15 13:13

    우어 대단하십니다! ㅋㅋ 트윗에서 항상 보여지던 그것이군요 ㅋㅋㅋ
    혹시 저 처럼 공부하는 뉴비들을 위해
    프로젝트 통짜 소스공개 하실 계획은 없으신가용??ㅠ

  2. Favicon of http://twitter.com/sungyb BlogIcon 엽이군 2010.12.06 22:25

    요즘 트위터를 하면서 저런 봇들에 대해 많이 궁금해서 정보를 모으고 있는데..
    간단한 공개소스나 차근히 배워볼수 있는 그런 곳을 좀 알려주실 수 있으신가
    여쭤보고 싶어서 이렇게 글을 남깁니다..^^;;

  3. aha 2011.02.25 15:27

    본인은 참 쉬운지 모르겠지만. 좀 더 친절하게 가르춰 주었으면 좋겠다는 아쉬움이 있네요. 트윗봇하나 만들었다고 자랑하려고 포스팅하신것은 아닌듯 한데... 코딩은 알아서 하라는 건가요ㅎㅎ. 아시다시피 트위터 인증방식도 바뀌었고 twitter4j도 버전별로 사용방법이 틀립니다.

사용자 삽입 이미지

제 5회 Daum DevDay


이번에 제주도에 열리는 제 5회 다음 DevDay신청을 하였다.

Jong10님께서 미투데이"Daum DevDay 8월 29일(금)~30일(토) -> 저 좀 끼워주실 팀 구합니다!! (초 진지함)"을 올려서 바로 끌렸습니다. 멋모르고 같이 하자고 일을 저질렀는데 이제 실력발휘를 해야할듯 ㄷㄷㄷ

  • 행사명: 제5회 Daum DevDay
  • 일시: 2008년 8월 29일(금)~30일(토)
  • 장소: 제주 Daum GMC

이번 행사는 1박 2일간의 행사로 기획했으며 첫째날은 DevDay를 진행하고 둘째날 제주 투어 프로그램으로 구성했습니다. 지난 행사들과 마찬가지로 직접 프로젝트를 제안하고 다양한 언어를 통해 실제로 현장에서 구현해보는 라이브 코딩 행사입니다. 단, 이번에는 야외에서 바베큐 파티와 함께 개발을 하는 차이가 있지요. ^^ 아울러 이번 행사는 2~4인으로 구성된 팀 단위로만 참가 신청을 받으며 대표 1인만 신청하시면 됩니다. 또한 전체 참가 인원의 20% 이상은 여성으로 선발하는 여성 쿼터제를 적용하고자 하오니 여성 개발자 여러분들의 많은 참여 바랍니다.

참가 신청은 8월 15일(금)까지 가능하며 이 후 추첨을 통해 40명을 선정, 8월 18일(월) 이 곳에 공지하도록 하겠습니다. 많은 신청 바랍니다.

행사 페이지: http://dna.daum.net/devday/

홈페이지에 위와 같이 공지가 되어 있더군요. 저는 제주도가 끌려서 그리고 고수님들과 프로그래밍을 하고 싶어서 참여를 하게 되었습니다.
이 행사에 신청해서 당첨되면 단돈 3만원에 다음에서 밥주고 재워주고 여행까지 시켜준다는 아름다는 혜택을 준다고 하더군요.
Ruby on Rails라는 것으로 매쉬업을 하기로 하고 남들을 어떻게 이길지에 대해서도 의논을 많이 했습니다.

제발 당첨되면 방학 끝무렵에 제주도에 배우면서 거의 공짜로 놀러갈 수 있을텐데, 제 능력이 될지가 의문시;;
Ruby on Rails로 거길 갈 수 있는 기회가 있었으면 좋겠어요 ;ㅁ;
사용자 삽입 이미지

프로그램 진행 순서입니다.

프로그램 진행순서를 보아도 하루는 코딩 하루는 노는 것으로 일정이 잡혀있는데 그 것을 단돈 3만원에 한다는 것이 정말 매력적이다.
Buy me a coffeeBuy me a coffee

사용자 삽입 이미지

2008년 2월 1일, 저는 Future Camp에 참여를 하게 되었습니다.

저번에 썼던 글(퓨처캠프(Future Camp) 2008에 참가합니다.) 처럼 신청을 했는데 대기자 명단이라서 갈수가 있을까 조마조마하다가, 마지막날에 참석자로 변경이 되어서 가는데 부담이 없었습니다.
참석자 200명에 대기자가 140명까지 있어서 340명이 정말 다 올까 궁금하다가, 그 날 가보니 실제로 200여분의 업계 관계자 및 학생분들이 적극적으로 참여한것 같습니다.
이번 퓨쳐캠프 2008 관련 사진은 (정진호[phploveme]님의 사진 모음)에서 자세히 볼수 있습니다.
아침에 일어나서 강남역가는 341번 버스타고 출발을 하였는데, 생각보다 길이 막혀서 예정시간보다 약간 늦게 도착하였습니다.
아래는 도착하고 나서 찍은 인증사진입니다.
Future Camp 2008에 참가

2008년 2월1일 금요일 삼성동 섬유센터 17층에서 Future Camp 2008이 열렸습니다. 이 날 아침에 찍은 사진.


행사는 3개의 세션(플랫폼과 디바이스, 웹 서비스 전망, 블로그와 오픈 문화), 15개 주제로 각 10분 정도씩의 발표시간과 세션별 20 ~ 30 분간의 질의, 응답, 토론시간이 있었습니다.

퓨쳐캠프에서는 2008년도의 유선시장, 모바일시장, 웹과 인터넷등등 IT업계의 2008년 전반적인 전망에 대해 생각을 나누고 공유하는 자리였습니다.
여기서는 인터넷 기술과 서비스를 소개하는 자리라서, 그런지 깊이있는 기술의 활용보다는 미래에 대한 전망에 대해서 주로 다루었습니다.

첫번째 세션 - 플랫폼과 디바이스 (Moderator : 윤석찬 - 다음커뮤니케이션)
두번째 세션 - 웹 서비스 전망 (Moderator : 김창원 - TNC)
세번째 세션 - 블로그와 오픈 문화 (Moderator : 황현수 - SK커뮤니케이션즈)

이 세가지 큰 주제로 여러회사직원와 단체회원분들이 발표를 하였습니다.
첫번째 세션 발표는
클라우드 컴퓨팅 - 한재선(NexR)
모바일 웹 전망 - 전종홍(ETRI)
안드로이드 폭풍 후 미래 - 황병선(Futurewalker)
미래 Gadget과 디바이스 미리보기 - 김지현(다음커뮤니케이션)

두번째 세션 발표는
웹 오피스 서비스 전망 - 박재현(ThinkFree)
소셜 웹 플랫폼 전망 - 조산구(KT)
국내 위젯 시장 미리보기 - 표철민(위자드웍스)
멀티미디어 메타데이터 뽑아내기(검색, 광고, SNS) - 류중희(Olaworks)
재미없는 검색시장 분석과 전망 - 전병국(검색엔진마스터)
매쉬업 트랜드 - 정진호(Yahoo! Korea)

세번째 세션 발표는
블로그 계의 두 가지 버즈워드 - 노재성(zSoup)
노매드 웹 - 김중태(마이엔진)
오픈소스 전망 - 권순선(NHN)
책 2.0 - 장효곤(이노무브 그룹)
오픈소스와 저작권 - 윤종수(크리에이티브커먼스 코리아)

위의 발표 주제로 발표를 할때마다 이런 것이 있구나를 확실하게 알게 해주었습니다.

차니님의 미투데이에서 "퓨처캠프! 다들 10분 잘 지키시네.. 대단!"(http://me2day.net/channy/2008/02/01#10:51:28) 에서 볼수 있듯, 발표하시는 분들은 정말 10분을 넘기지 않으려고 엄청나게 노력을 하셨습니다.
그래서인지 발표하시는 분들이 10분만에 내용을 청중에게 주입을 시키려고 하니깐 청중들에게 발표자의 생각과 정보전달이 미흡한 점이 있었습니다.

이번 Future Camp에서 10분만에 내용을 강연하려고 하는데 청중들에게는 배경지식이 없이 들으니까 약간 듣는데 힘든 점이 있었습니다. 그래서 강연전에 인터넷에 발표자료를 미리 올리고 나서 발표를 하는 것이 발표자나 청중들에게 만족할만한 강연이 되지 않을까 합니다.

각 세션마다 각계 각층의 사람들이 여러 분야에 대해 2008년도 전망에 대한 의견을 발표를 하였고 거기에 질문하는 형식으로 진행이 되었는데, 저의 생각과 업계쪽의 사람들의 생각이 조금 다름을 알수가 있었습니다.
제가 생각한 전망과 업계쪽의 전망 어느 것이 정답이 될수가 없다만 2008년도 인터넷의 전망에 대해 약간이나마 많은 생각을 할수가 있었습니다.

퓨처캠프는 이번에 처음 참가하게 되었습니다. 이런 Future Camp같이 IT분야 전체를 아우르는 모임자리가 있는지가 궁금하네요. 이런 행사가 아니었다면 어디서 업계쪽 관계자의 생각을 한 곳에서 들을수가 있을까요?
앞으로도 이런 행사가 계속 펼쳐갔으면 좋겠습니다.

Channy님 블로그에 있듯이, 이 Future camp의 각 발표 자료는 향후 홈페이지에 업로드 할 예정이구요. 동영상은 ZDNet 코리아에서 촬영을 해서 편집 후 공개될 예정이라고 하네요. 이 블로그에 모든 자료들을 쓰다가 힘이 부쳐서 그냥 후기만 쓸 것 같습니다.
Buy me a coffeeBuy me a coffee

2008년 1월 12일 다음 양재사옥에서 열린 매쉬업캠프2008에 참가해서 찍은 폰카사진
디카를 가져오지 않아서 너무 아쉽다.
여기서 Yahoo pipes라는 것도 알게 되어서 신기하였다.
저의 미친이신 루미넌스님(http://me2day.net/lumi)께서 설명을 잘 해주셔서 매쉬업에 대한 대략적인 이해를 할수 있었다.

Buy me a coffeeBuy me a coffee

2008년 1월 12일 다음 양재사옥에서 열린 매쉬업캠프2008에 참가해서 찍은 폰카사진
디카를 가져오지 않아서 너무 아쉽다.
여기서 Yahoo pipes라는 것도 알게 되어서 신기하였다.
저의 미친이신 루미넌스님(http://me2day.net/lumi)께서 설명을 잘 해주셔서 매쉬업에 대한 대략적인 이해를 할수 있었다.

Buy me a coffeeBuy me a coffee

+ Recent posts