반응형

이번에는 저번에 만들었던 카카오톡 챗봇에 급식 파서를 활용하여

급식을 알려주는 챗봇을 만들도록 하겠습니다.



이전과정

[

카카오톡 챗봇 만들기 --> http://mandu-mandu.tistory.com/67

급식 파서 만들기 --> http://mandu-mandu.tistory.com/21

]





코드 작성하기


급식을 파싱해서 식단을 출력하는 부분을 구현할 것인데요.

두개의 코드상 차이는 날짜값과 요일값을 가져오는 부분밖에 차이가 없기 때문에
"오늘 급식"에 대한 코드를 작성하겠습니다.

그전에 parser.py를 view.py가 있는 디렉토리로 복사해줍니다.


코드는 그냥 한번에 다 작성했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
from pytz import timezone
import datetime , json #datetime 모듈 import
from parser import * #parser.py import
 
 
def keyboard(request):
 
    return JsonResponse({
        'type':'buttons',
        'buttons':['오늘','내일']
    })
 
@csrf_exempt
def answer(request):
 
    json_str = ((request.body).decode('utf-8'))
    received_json_data = json.loads(json_str)
    datacontent = received_json_data['content']
 
    #date
    #오늘
    dt1 = datetime.datetime.today()
 
    local_date1 = dt1.strftime("%Y.%m.%d")
    local_weekday1 = dt1.weekday()
    #오늘
 
    #내일
    dt2 = datetime.datetime.today() + datetime.timedelta(days=1)
 
    local_date2 = dt2.strftime("%Y.%m.%d")
    local_weekday2 = dt2.weekday()
    #내일
    #date
 
    if datacontent == '오늘':
 
        #시간 관련
        meal_date = str(local_date1)
        l_wkday = int(local_weekday1)
        #시간 관련
 
        #파싱
        l_l = get_diet(2, meal_date, l_wkday)
        d_d = get_diet(3, meal_date, l_wkday)
        #파싱
 
        #디스코드 챗봇 만들기(2) 참고바람.
        if len(l_l) == 1:
            lunch = "급식이 없습니다."
            dinner = ""
        elif len(d_d) == 1:
            lunch = meal_date + " 중식\n" + l_l
            dinner = ""
        else:
            lunch = meal_date + " 중식\n" + l_l
            dinner = meal_date + " 석식\n" + d_d
        #디스코드 챗봇 만들기(2) 참고바람.
        
        return JsonResponse({
                'message': {
                    'text': lunch + dinner
                },
                'keyboard': {
                    'type':'buttons',
                    'buttons':['오늘','내일']
                }
 
            })
 
    elif datacontent == '내일':
...
cs


*'내일'에 대한 부분은 '오늘'의 코드와 동일합니다. '#시간관련' 부분의 변수명만 바꾸어서 사용하시면 됩니다.

*#파싱 부분은 중식과 석식만 파싱해옵니다. 조식을 파싱할땐 함수의 첫번째 인자로 1을 주시면 됩니다.

*#디스코드 챗봇 만들기(2) 참고바람. 부분은 http://mandu-mandu.tistory.com/65 여기에 설명이 나와 있습니다.

*자신의 상황에 맞게 수정 또는 삭제 하시면 됩니다.


*'오늘'과 '내일'의 코드는 거의 차이가 없기 때문에 함수 하나로 잘 만들어서 사용하시는게 더 좋을 것 같습니다.

--18.03.03 추가

그래서 함수 하나로 만들어서 최적화를 진행하였습니다.

수정된 코드는 제 깃허브에 있습니다.

https://github.com/M4ndU/inhun_kakao_chat_bot_2

----------


저장하시면 만약 django가 돌아가는 중이었다면 자동으로 서버를 재시작해서 바로 수정된 것을 적용합니다.

모바일 카카오톡으로 접속해서 봇에서 '오늘' 또는 '내일' 버튼을 누르면 해당 버튼에 대한 식단이 출력됩니다.





이상입니다.

반응형

+ Recent posts