주변 편의점 위치를 카카오톡으로 자동 전송하는 프로그램
(https://minseob.tistory.com/17) 을 완성한 후
카카오톡 자동전송 기능을 이용한 프로그램을 더 만들고 싶어졌다.
그리하여 이번에는 당일의 급식과 시간표를 카카오톡으로 자동 전송하는 프로그램을 제작하게 되었다.
이 프로그램으로 실제로 아침마다 반톡방에 급식과 시간표를 자동으로 전송할 계획이다.
전체 프로그램 코드 : https://github.com/MinseobKimm/NeisApiCrawlerWithKakao
1. 나이스 Open API 서비스에서 급식, 시간표 정보 가져오기
나이스 교육정보 개방 포털(https://open.neis.go.kr/ )에서 open api 서비스를 제공한다.
이곳에서 간단한 신청서를 작성하면 Open API 활용 인증키를 발급받을 수 있다.
SchoolApi 클래스를 선언하고 발급받은 key값과 url을 저장한다.
import requests
import json
class SchoolApi:
params = {
"KEY": "발급받은 Key 값",
"Type": "json",
}
schoolinfo = {}
base_url = "https://open.neis.go.kr/hub/"
get_data 메서드에서는 파라미터와 학교정보를 통해 url로 request요청을 보낸다.
그 후 받은 값을 리스트로 가공하여 반환한다.
def get_data(self):
URL = SchoolApi.base_url + self.sub_url
self.params.update(SchoolApi.params)
self.params.update(SchoolApi.schoolinfo)
response = requests.get(URL, params=self.params)
try:
j_response = json.loads(response.text)[self.sub_url]
if j_response[0]["head"][0]["list_total_count"] == 1:
return j_response[1]["row"][0]
else:
return j_response[1]["row"]
except:
print("찾는 데이터가 없습니다.")
return response.text
meal 메소드에서는 가져온 값 중에서 급식에 대한 정보를 문자열로 보기 좋게 만들어서 반환해준다.
조식, 중식, 석식이 모두 있기 때문에 각각에 대하여 문자열을 만들어서 추가했다.
그리고 알레르기 정보를 제거하기 위해 미리 제거할 문자열을 놓은 후 replace() 함수를 사용하였다.
def meal(self):
data = self.get_data()
try:
string = "<조식>\n"+data[0]["DDISH_NM"].replace("<br/>", "\n")+"\n\n"
string+= "<중식>\n"+data[1]["DDISH_NM"].replace("<br/>", "\n")+"\n\n"
string += "<석식>\n" + data[2]["DDISH_NM"].replace("<br/>", "\n")
characters = "1234567890./-*"
for x in range(len(characters)):
string = string.replace(characters[x],"")
return string
except:
return "오늘은 급식이 없습니다."
시간표와 학사일정을 반환하는 메서드도 비슷한 형태이다.
get_data() 메소드를 이용하여 미리 그에 관한 정보를 data 변수에 저장하고
"ITRT_CNTNT", "EVENT_NM"와 같은 출력명에 접근하여 원하는 문자열을 받는다.
def time(self):
data = self.get_data()
string = ""
try:
for i in data:
string += i["ITRT_CNTNT"] + "\n"
return string
except:
return "오늘은 시간표가 없습니다."
def schedule(self):
data = self.get_data()
try:
return "오늘은 "+data["EVENT_NM"]+"이(가) 있습니다."
except:
return "x"
위 구현 방법은 https://github.com/minpeter/dobby_chatbot의 코드를 일부 수정한 것임을 밝힌다.
2. 카카오톡으로 정보 전송하기
만들어둔 SchoolApi클래스의 메서드를 그때마다 호출하여 필요한 문자열을 받는다.
받은 문자열은 msg 변수에 추가하고 출력 형태에 맞게 안내 문자열을 추가한다.
그리고 학사일정은 존재할 때만 출력되도록 하였다.
if __name__ == "__main__":
params = {
"SCHUL_NM": "전북과학고등학교"
}
SchoolApi("schoolInfo", params).get_school_info()
msg=""
params = {"MLSV_YMD": dt.now().strftime("%Y%m%d")}
msg+="______오늘의 급식______\n"
msg+=SchoolApi("mealServiceDietInfo", params).meal()
params = {"GRADE": "1", "CLASS_NM": "3", "ALL_TI_YMD": dt.now().strftime("%Y%m%d")}
msg+="\n______오늘의 시간표______\n"
msg+=SchoolApi("hisTimetable", params).time()
if(SchoolApi("SchoolSchedule", params).schedule()!="x"):
msg+="______오늘의 학사일정______\n"
msg+=SchoolApi("SchoolSchedule", params).schedule()
카카오톡으로 자동 전송하는 기능은 https://minseob.tistory.com/17 과 동일하게 구현하였다.
참고 자료
https://github.com/minpeter/dobby_chatbot
'정보 > Python' 카테고리의 다른 글
주변 편의점 위치를 카카오톡으로 자동 전송하는 프로그램 (0) | 2021.12.07 |
---|