이번 포스팅에서는 카카오톡 봇을 이용하여 작성한 크롤링 코드를 통해


카카오톡으로 크롤링 요청을 보내서 원하는 정보를 받아보려고 합니다 !!


이 자료는 django에 대한 기본적인 이해를 필요로 합니다.


----------------------------------------------------------------------

이 자료는 askdjango 강의인


http://nomade.kr 의 강의 내용을 기반으로 만든 자료입니다.


----------------------------------------------------------------------




api doc 주소: https://github.com/plusfriend/auto_reply


제가 만든 카카오톡 봇인 '조단비서' 입니다.


카카오톡 봇은 API가 쉽게 잘되어 있어 서버만 있으면 누구나 쉽게 만들 수 있습니다.



* 카카오톡을 봇을 통해서 언제 어디서나 자신이 원하는 정보를 모아서 크롤링 해보세요!



카카오톡 봇을 만들기 위해서는 일단 기존에 서버를 가지고 있어야 합니다.



(사실 저는 아직 사람들이 많이 찾지 않는 저의 포트폴리오 사이트의 AWS EC2를 이용했습니다~~ ㅎㅎ)



카카오톡 봇의 PROXY서버는 요청을 받으면 제가 지정해준 서버의 주소로 다시 요청을 하고 응답을 받아서 클라이언트에게 전달해줍니다.



플러스 친구 사이트:   https://center-pf.kakao.com/  접속해 주세요!


1. 관리자 로그인 클릭!


2. 내플러스친구>새플러스친구만들기 클릭!


3. 스마트 채팅 -> API형을 선택해주세요!




프록시 서버에서 요청을 할 주소는 앱 URL 에 등록을 해줍니다 !


프록시 서버 주소              


IP
110.76.143.234 
110.76.143.235
110.76.143.236

장고를 이용하시는 분들은


ALLOWED_HOSTS = ['www.doosikbae.com','110.76.143.234','110.76.143.235','110.76.143.235']

-> allowed_hosts 부분에 프록시 서버 주소를 추가해주세요 !

4.1. 수신 API

  • 카카오톡 이용자가 플러스친구에게 보낸 메시지를 전달 받은 후 응답을 할 수 있는 API 입니다.
  • http(s) restful api를 통하여 카카오 API 서버 -> 파트너 서버를 호출합니다.

출처: 플러스 친구 API DOC https://github.com/plusfriend/auto_reply



공식문서를 확인해보시면 확인해 보실 수 있겠지만, 

5.1. Home Keyboard API

5.2. 메시지 수신 및 자동응답 API

5.3. 친구 추가/차단 알림 API

5.4. 채팅방 나가기


가 있습니다. 

공식문서를 확인해 보면 각각의 api들이 요청을 할 때 어떤 parameter 를 전달하고, 

응답을 할 때 어떤 parameter 들을 전달할 수 있는지에 대해 설명해줍니다.


- 여러 API 중 가장 핵심 부분인 메시지 수신 및 자동응답 API 부분을 살펴보겠습니다.

이 API는 카카오톡 봇 채팅방에서 클라이언트가 메시지를 보냈을 때 응답을 해주는 API 입니다.

저 같은 경우는 "김비서:스타트업"이라는 명령어를 입력하면 스타트업 매거진인 platum 에서 기사를 크롤링한 내용과

kstartup에서 지원사업 부분을 크롤링한 것을 응답해주는 기능을 만들었고, 그 밖의 제가 관심있는 것들을 만들어 

크롤링 봇으로 이용하고 있습니다.


요청 시 parameter를 보면 json 형식으로 되어 있고 user_key, type, content를 가지고 있습니다.







응답은 message 만 보내도 되고 keyboard 부분은 옵션입니다.

{
    "message":{
        "text" : "귀하의 차량이 성공적으로 등록되었습니다. 축하합니다!"
    }
}


그럼 이 부분을 구체적인 코드로 구현해보도록 하겠습니다.


저는 백엔드 부분을 django로 구현했습니다.



python3 manage.py startapp kakaotalk


kakaotalk이라는 앱을 먼저 만들었습니다.


1. settings.py 에 kakaotalk 앱을 추가합니다.


2. 프로젝트 단에 include 해주는 것을 잊으시면 안됩니다.  


3, kakaotalk/urls.py 부분에 응답을 받을 urls.py 를 추가합니다.


kakaotalk/urls.py

from django.conf.urls import url
from . import views

urlpatterns =[
url(r'^keyboard$',views.on_init),
url(r'^friend$',views.on_added),
url(r'^friend/(?P<user_key>[\w-]+)$',views.on_block),
url(r'^chat_room/(?P<user_key>[\w-]+)$',views.on_leave),
url(r'^message$',views.on_message),
]

그 다음 처리단이 kakaotalk/views.py 로 이동합니다.




@csrf_exempt

def on_message(request):

#post 요청이라면

if request.method == 'POST':

request.JSON = json.loads(request.body.decode('utf-8')

else:

request.JSON ={}


#위에서 post에는 3가지 parameter를 보낸다고 했습니다.

user_key = request.JSON['user_key']

type =request.JSON['type']

content = request.JSON['content']


#저희는 클라이언트가 보낸 메시지 부분의 내용에 따라서 적절한 응답을 해줘야합니다. 여기서는 간단한 예제 하나만 소개하겠습니다.

#저 같은 경우는 위에 말했던 스타트업 관련정보를 크롤링한 정보를 받는 명령어로 '김비서:스타트업' 을 선택했습니다.


if content.startswith('김비서:스타트업"):

response = '최신 스타트업 뉴스\n\n" + crwaling.starup_news()

else:

response = "해당 명령어는 아직 지원하지 않습니다."


return {

'message':{

'text':response

}

}




다음과 같이 구현했습니다. startup_news 함수는 crawling 모듈에 따로 구현하였습니다.




다음에는 더 재밌는 봇을 만들어 보도록 하겠습니다!







  1. 컴돌이 2017.08.31 15:25 신고

    좋은 자료 감사합니다~!!

  2. 방랑자 2017.09.15 22:54 신고

    재밌는 자료네요!!

  3. 목동삐쟁이 2018.01.14 21:57 신고

    다음이 기대되네요!!

+ Recent posts