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, sys
from parser import *
api_info = '세명컴고 급식봇 정보\n 개발자 : 20113 이병준 \n 관리자 : 20107 김찬 \n 관리자 : 20108 문준혁'
_else = "[]현재 챗봇과 연결되어 있습니다.\n 상담을 원하시면 '상담원로 전환하기' 버튼을 누르시고 메세지를 보내주세요."
PlzStopIt = "[]연속동일요청입니다. 나중에 다시 시도해주세요."
2018.04.04 추가
동일 유저에 대해 연속동일요청 방지를 구현한 코드
동일 유저가 연속으로 동일한 요청을 하였을 경우 작업을 진행하지 않고, 메세지 전송
같은 함수에 대해 다른 유저의 요청이 있을 때까지 기다려야 하는 구조
진행시간이 비교적 긴 함수(카카오톡에서는 버튼)에만 적용
user_key값을 사용함 / 함수 각각에 적용하기 위해 class 사용
프로그램을 재실행 할 경우 pre_key값 초기화.
class user_chk():
def __init__(self):
self.pre_key = "" #이전 user_key값
self.now_key = "" #현재 user_key값
def check(self, key):
self.now_key = key # now_key값에 현재 user_key값 대입
if self.pre_key == self.now_key : # 비교 하여 같으면 1을 반환
passcode = 1
else :
self.pre_key = self.now_key # 다를 경우 pre_key값에 now_key값을 덮어쓰고 0 반환
passcode = 0
return passcode
num = weekday + 1 #int 0월1화2수3목4금5토6일
URL = (
"http://stu.sen.go.kr/sts_sci_md01_001.do?"
"schulCode=B100000659&schulCrseScCode=4&schulKndScCode=04"
"&schMmealScCode=%d&schYmd=%s" % (schMmealScCode, schYmd)
)
html = get_html(URL)
soup = BeautifulSoup(html, 'html.parser')
element = soup.find_all("tr")
element = element[2].find_all('td')
try:
element = element[num] #num
element = str(element)
element = element.replace('[', '')
element = element.replace(']', '')
element = element.replace('<br/>', '\n')
element = element.replace('<td class="textC last">', '')
element = element.replace('<td class="textC">', '')
element = element.replace('</td>', '')
element = element.replace('(h)', '')
element = element.replace('.', '')
element = re.sub(r"\d", "", element)
except:
element = " "
return element
제목 그대로 위 오류를 출력하는데 무슨 문제일까요??
views.py 코드
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, sys from parser import *
api_info = '세명컴고 급식봇 정보\n 개발자 : 20113 이병준 \n 관리자 : 20107 김찬 \n 관리자 : 20108 문준혁' _else = "[]현재 챗봇과 연결되어 있습니다.\n 상담을 원하시면 '상담원로 전환하기' 버튼을 누르시고 메세지를 보내주세요." PlzStopIt = "[]연속동일요청입니다. 나중에 다시 시도해주세요."
2018.04.04 추가
동일 유저에 대해 연속동일요청 방지를 구현한 코드
동일 유저가 연속으로 동일한 요청을 하였을 경우 작업을 진행하지 않고, 메세지 전송
같은 함수에 대해 다른 유저의 요청이 있을 때까지 기다려야 하는 구조
진행시간이 비교적 긴 함수(카카오톡에서는 버튼)에만 적용
user_key값을 사용함 / 함수 각각에 적용하기 위해 class 사용
프로그램을 재실행 할 경우 pre_key값 초기화.
class user_chk():
필요한 개수만큼 생성해둠.
u0 = user_chk() u1 = user_chk() u2 = user_chk() u3 = user_chk() u4 = user_chk()
def get_meal(dt): local_date = dt.strftime("%Y.%m.%d") local_weekday = dt.weekday()
def ret_proc(output): return JsonResponse({ 'message': { 'text': output }, 'keyboard': { 'type': 'buttons', 'buttons': ['오늘 급식', '내일 급식', '내일 모레 급식', '중간 고사', '겨울 방학', 'BOT 정보'] } })
def keyboard(request): return JsonResponse({ 'type': 'buttons', 'buttons': ['오늘 급식', '내일 급식', '내일 모레 급식', '중간 고사', '겨울 방학', 'BOT 정보'] })
@csrf_exempt def message(request):
views.py 에 사용되는 parser.py 코드 입니다.
import requests from bs4 import BeautifulSoup import re
def get_html(url): _html = "" resp = requests.get(url) if resp.status_code == 200: _html = resp.text return _html
def get_diet(code, ymd, weekday): schMmealScCode = code #int schYmd = ymd #str
터미널에는 [14/Sep/2018 08:04:33] "GET /message HTTP/1.1" 500 27 뜨며 http://pf.kakao.com/_vxaCEj 옐로 아이디 주소 서버 주소 입니다. http://116.33.201.27:218/keyboard