레진코믹스(http://www.lezhin.com/)에서 사용하는 구글 빅쿼리(Google BigQuery)를 소개 및 사용한 후기를 발표한 슬라이드입니다.


Buy me a coffeeBuy me a coffee

관련링크
Google I/O 2010 Official Homepage
Google I/O를 유튜브 생중계를 통해 만나실 수 있습니다!


Google I/O 2010 행사가 5월 19일 ~20일 2일간 열린다고 합니다.

Google I/O는 구글이 주최하는 웹 개발자 컨퍼런스로  이번 Google I/O행사에선 Android, App Engine, Google Chrome, Geo, Google APIs, GWT(Google Web Toolkit), Social Web(Open Social), Google Wave등이 다뤄질 예정입니다.

참고로 Google I/O에서 I/O는 "Innovation in the Open"의 준말이라고 합니다.

이 행사에선 Android OS의 최신 버전인 Android 2.2 Froyo의 발표를 한다고 합니다. 어떻게 바뀌는지가 궁금하군요.

퍼포먼스의 대폭 개선, 테더링, Flash지원등등을 발표하고 API가 얼마나 바뀔지,추가로 외장 메모리에 앱을 설치할수 있는지등의 문제도 어떻게 될지가 궁금해서 안보고는 지나칠수 없군요.


참고로 Google에선 Google I/O 2010행사에 대한 내용을 Android 마켓에 어플로도 제공을 하였다는것입니다. Android Platform을 정말 밀어주고 있다는 것이지요.

 

Buy me a coffeeBuy me a coffee
  1. Favicon of http://fordism.net BlogIcon ShellingFord 2010.05.20 00:12

    구글입장에서는 안드로이드가 얼마나 시장을 먹냐에 따라서 10년을 벌어먹을 것이 결정되니까요.

    • Favicon of https://blog.studioego.info BlogIcon StudioEgo 2010.05.21 20:27 신고

      구글 입장으로선 인터넷 광고 시장의 확대가 우선이니깐요. 안드로이드 플랫폼이 확산되면 컴퓨터에서 인터넷을 쓰면서 보는 광고 뿐만 아니라 모바일에서도 광고를 어디든지 볼수 있으니, 광고 시장 확대로 수익을 얻으려는 구글은 안드로이드 플랫폼을 널리 확산시켜야 하지요.

  2. Favicon of http://fordism.net BlogIcon ShellingFord 2010.05.20 00:22

    예전에도 부탁하려고 했던 것인데. 페이스북 명함 소스좀 공유 부탁;;;;; (수정한 것 같은데요;;_)

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

Buy me a coffeeBuy me a coffee

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

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도 버전별로 사용방법이 틀립니다.

+ Recent posts