2010년 6워 29일 제 10회 다음 DevDay가 열렸더군요. 

안드로이드 앱 만든다고 Daum API에 대해 알기 위해서 DNA블로그를 둘어보다 보니 저의 뇌를 자극하는 포스트가 나왔더랍니다. - 10회 DevDay 지도API 퀴즈

여기서 나온 퀴즈를 보니 재미있는 문제들이 많이 있더군요.



Daum 지도API와 자바스크립트를 이용하면 금방 해결될 문제들입니다.

문제를 제대로 해결하면 다른 회사 API와 Mashup을 하는 것은 쉬울듯?

ps. 빨리 풀어보고 블로그에 올릴까... (후다닥)

Buy me a coffeeBuy me a coffee

이 글은 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

사용자 삽입 이미지

제 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만원에 한다는 것이 정말 매력적이다.

'컴퓨터' 카테고리의 다른 글

Tmax Window 발표에 대한 단상  (2) 2009.07.09
노트북 배터리 리필함.  (4) 2009.02.04
정보검색에 대해서  (1) 2008.08.13
Ruby를 이용하여 Egloos에 글쓰기  (0) 2008.08.08
Ruby를 이용하여 Tistory에 글쓰기  (0) 2008.08.08
Buy me a coffeeBuy me a coffee

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

'일상다반사' 카테고리의 다른 글

revu란 회사에 갑니다.  (0) 2008.02.01
python책을 보고 있습니다.  (0) 2008.01.28
다음 양재사옥에 열린 매쉬업캠프에서 찍은 폰카사진  (0) 2008.01.15
닮아간다.  (1) 2007.12.31
안경을 바꾸었습니다.  (2) 2007.12.24
Buy me a coffeeBuy me a coffee

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

'일상다반사' 카테고리의 다른 글

python책을 보고 있습니다.  (0) 2008.01.28
다음 양재사옥에 열린 매쉬업캠프에서 찍은 폰카사진  (0) 2008.01.15
닮아간다.  (1) 2007.12.31
안경을 바꾸었습니다.  (2) 2007.12.24
취기를 부려도......  (4) 2007.12.23
Buy me a coffeeBuy me a coffee

+ Recent posts