트위터 봇 개발 후기

53
2015-02-25 트위터 봇 개발 후기 Clojure, AWS, Travis CI, Heroku와 함께한 ohyecloudy.com

Upload: -

Post on 15-Jul-2015

1.632 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: 트위터 봇 개발 후기

2015-02-25

트위터 봇 개발 후기Clojure, AWS, Travis CI, Heroku와 함께한

ohyecloudy.com

Page 2: 트위터 봇 개발 후기

어떤 얘기?

Page 3: 트위터 봇 개발 후기

로 트위터 봇을 제작

에 올렸던 얘기

Clojure

Page 4: 트위터 봇 개발 후기

로 이동한 얘기

에서

Heroku

Page 5: 트위터 봇 개발 후기

인용구 빌드를 자동화한 얘기

섹시

Page 6: 트위터 봇 개발 후기

Clojure로 트위터 봇을 제작봇 발사대는 AWS

봇이 트윗하는 인용구는 어떻게?

Page 7: 트위터 봇 개발 후기

Clojure http://clojure.org/

dialect of Lisp

JVM bytecode가 결과물

Page 8: 트위터 봇 개발 후기

JVM 위에서 돌아가는 Lisp

Lisp 빠심이 충분

실용적으로 사용

Page 9: 트위터 봇 개발 후기

Clojure에 대한 얘기는

언제 기회가 있으면 한번~

Page 10: 트위터 봇 개발 후기

트위터 봇을 만드는데,

왜 Clojure를 사용했나?

Page 11: 트위터 봇 개발 후기

Clojure로

왜 트위터 봇을 만들었는가?

Page 12: 트위터 봇 개발 후기

뭘 만들까?

Clojure 공부하며 생각한

Page 13: 트위터 봇 개발 후기

내가 필요한 것

다른 사람은 신경 안 쓴다

그리고 작은 것

Page 14: 트위터 봇 개발 후기

인용구를 랜덤 트윗하는 봇

인용구 모아놓은 거 아깝다

생각날 때마다 찾아보긴 귀찮다

트위터 잘 사용 중이다

Page 15: 트위터 봇 개발 후기

봇 발사대는 AWS봇이 트윗하는 인용구는 어떻게?

자동화는 섹시해

Clojure로 트위터 봇을 제작

Page 16: 트위터 봇 개발 후기

Amazon EC2 t1.micro

AWS 프리티어 http://aws.amazon.com/ko/free/

가입 시점부터 1년 무료

미뤘던 가입을 이제

트위터 봇은 이걸로 충분

Page 17: 트위터 봇 개발 후기

공짜니깐

CPU가 좀 놀아도 괜찮아

프로그램 내부에서 스케쥴링

Page 18: 트위터 봇 개발 후기

이제 돌아간다

한 고비 넘었다

개선 고고

Page 19: 트위터 봇 개발 후기

봇이 트윗하는 인용구는 어떻게?

자동화는 섹시해뭐라? Heroku 1 dynos는 공짜라고?

봇 발사대는 AWS

Clojure로 트위터 봇을 제작

Page 20: 트위터 봇 개발 후기

인용구는 어디서 주워오나?

크롤링(crawling)? 노노

책 읽으면서 모아놨다

Page 21: 트위터 봇 개발 후기

인용구 소스

Page 22: 트위터 봇 개발 후기

[{:source "Modern C++ Design"

:quotes ["시스템 아키텍처의..."

"단위전략 인터페이스의..."]}

{:source ...

:quotes [“...”]}]

출처 책을 매번적기 귀찮아서 map 사용

Page 23: 트위터 봇 개발 후기

인용구 빌드 결과물

Page 24: 트위터 봇 개발 후기

["시스템 아키텍처의... http://..."

"단위전략 인터페이스의..."]

vector그냥 뽑아서 삼키면 된다.다 씹어놨다.

Page 25: 트위터 봇 개발 후기

트윗 글자 제한이 넘으면?

140자

Page 26: 트위터 봇 개발 후기

자르고 URL을 첨부하자

인용구가 있는 웹페이지

100자 정도로

Page 27: 트위터 봇 개발 후기

(defn adjust-quote [quote url]

(if (<= (count quote) 140)

quote

(str (apply str (take 100 quote))

"... " url)))

앞에서부터 100자만살아 남는다

Page 28: 트위터 봇 개발 후기

웹 페이지 빌드

github page 사용

페이지 이름은 hash value

인용구가 input

Page 29: 트위터 봇 개발 후기

(defn append-hash-val [quotes]

(map (fn [q] {:key

(d/md5 q)

:quote

q})

quotes))

(“q1” “q2”)

({:key “h1” :quote “q1”} {:key “h2” :quote “q2”})

Page 30: 트위터 봇 개발 후기

(map (fn [p]

(let [k (:key p)

q (:quote p)

out-path (str output-dir

"/"

k

".html")]

(with-open [w (io/writer out-path)]

(.write w (build-html

q

twitter-card-creator)))))

key-quote-pairs)

:key 값인hash value를html 이름으로 사용

Page 31: 트위터 봇 개발 후기

잘린 인용구를볼 수 있다

하지만 매번 클릭해야 해?

나부터도 귀찮다

Page 32: 트위터 봇 개발 후기

트위터 카드https://dev.twitter.com/cards/overview

URL이 있는 경우

추가 정보를 보여준다

Page 33: 트위터 봇 개발 후기

(defn build-html [q twitter-card-creator](let [twitter-card-desc

(if (> (count q) 100)(apply str (drop 100 q))q)]

(hp/html5 {:lang "en"}[:head[:meta {:name

"twitter:description":contenttwitter-card-desc}]

...])))

100자 이후를메타 정보에 저장

Page 34: 트위터 봇 개발 후기

이래도 넘치면?

클릭해야지 뭐.

이정도면 깔끔한 해결

Page 35: 트위터 봇 개발 후기

자동화는 섹시해뭐라? Heroku 1 dynos는 공짜라고?

마무리

봇이 트윗하는 인용구는 어떻게?

봇 발사대는 AWS

Page 36: 트위터 봇 개발 후기

로컬에서 인용구 업데이트

가끔이지만 귀찮다.

자동화 고고.

섹시하니깐

내 컴퓨터에서

Page 37: 트위터 봇 개발 후기

Travis CI https://travis-ci.org

가입형 서비스

무료로 사용 가능

Github 통합

Page 38: 트위터 봇 개발 후기

master gh-pages

orphan branch

히스토리 공유 X

source output

Page 39: 트위터 봇 개발 후기

language: clojure

...

install:

- git clone ... --branch=gh-pages result

- git clone ... builder

- cd builder;lein uberjar

script:

- cd ..;java -jar...

after_success:

...

- git commit -m "Travis build $TRAVIS_BUILD_NUMBER ..."

- git push -fq origin gh-pages

소스, 결과물 브랜치 클론

결과물 커밋, 푸시

리포지토리 루트에 있는 .travis.yml

클로저 무시 노노.

Page 40: 트위터 봇 개발 후기
Page 41: 트위터 봇 개발 후기

뭐라? Heroku 1 dynos는 공짜라고?

마무리

자동화는 섹시해

봇이 트윗하는 인용구는 어떻게?

Page 42: 트위터 봇 개발 후기

AWS 프리 티어가 끝나고

그래 얼마나 나오는지 보자

10일이 되기 전에 USD 5

Page 43: 트위터 봇 개발 후기

주인처럼 썼네

헤프게 썼어

컴퓨팅 리소스를 줄이려고

셋방살이 주제에

Page 44: 트위터 봇 개발 후기

경험하려고 Heroku로

웃기고 있네. 공짜니깐 쓰지.

Dynos 하나가 공짜

다른 서비스도

트위터 봇은이것도 넘쳐요.

Page 45: 트위터 봇 개발 후기

소스만 올리세요.

빌드해서 실행해 준다

dynos만 할당해주면 끝

Page 46: 트위터 봇 개발 후기

-----> Clojure app detected

-----> Installing OpenJDK 1.8...done

-----> Using cached Leiningen 1.7.1

Downloading: rlwrap-0.3.7

Writing: lein script

-----> Building with Leiningen

Running: lein deps

-----> Discovering process types

Procfile declares types -> worker

-----> Compressing... done, 62.4MB

-----> Launching... done, v18

알아서 빌드해 줌

worker: lein trampoline run

Page 47: 트위터 봇 개발 후기

트위터 봇 잘 돌고 있다

소스만 올리니 편하네

하지만 배워야 할 게 많다

Page 48: 트위터 봇 개발 후기

마무리

뭐라? Heroku 1 dynos는 공짜라고?

자동화는 섹시해

Page 49: 트위터 봇 개발 후기

HOT 한 거 마음껏 사용

쓰기 전 평가할 필요 X

내키면 고고

Page 50: 트위터 봇 개발 후기

작고 내가 쓸 거니깐

완성할 수 있었던 것 같다

담엔 좀 더 큰 걸로?

Page 51: 트위터 봇 개발 후기

개발 일기가 좋은 연료가 될 수 있어요.

기록하며 생각 정리.잘하고 있는 것 같은 착각.

http://ohyecloudy.com/ddiary/categories.html#tbot-800-ref

Page 52: 트위터 봇 개발 후기

나보다 잘 나감

Page 53: 트위터 봇 개발 후기

CC BY-NC-SA 3.0

진행중인 개인프로젝트 있나요?진행하는 데 도움되는 습관?

tbot-800https://github.com/ohyecloudy/tbot-800

tbot-quote-builderhttps://github.com/ohyecloudy/tbot-quote-builder

블로그에 쓴 후기http://ohyecloudy.com/pnotes/archives/1850/