https://cleaning-toolbox.tistory.com/62
이 부분까지 차례대로 보셨다면 어느 정도 윤곽은 잡으셨을거라 생각합니다.
크게 생각하면 이렇습니다.
OWNER가 카카오 디벨로퍼 앱 제작 -> 카카오 데브톡에 비즈니스 앱 신청 ->
Rest API Key, Redirect URI로 카카오 로그인 URL 작성 -> User에게 배포 ->
User는 URL로 접근 후 카카오 로그인 및 권한 수락 -> 발생한 인가 code로 User의 Token 발급 및 체크 ->
OWNER 또한 URL로 접근 -> 발생한 인가 code로 OWNER의 Token 발급 및 체크 ->
OWNER Token으로 Refresh Token 발급 -> Refresh Token으로 친구목록 및 정보 불러오기 ->
친구들의 정보 중 uuid를 이용해 메시지 전송
입니다.
어떻게보면 쉽기도 어떻게보면 어렵기도한데 저에게는 좀 어려웠던 것 같습니다.
앞의 게시물에서 인가 code와 Token에 대해 설명했기에 이제는 메시지를 보내는 함수를 설명하겠습니다.
def send_message():
global weekday_check, weekend_check, everyday_check, today, user_local, user_content, temp_max, temp_min, am, pm, user_dust
weekday_check, weekend_check, everyday_check = set_day()
setting_time = func.find_item(mongo, None, "alarm", "setting")
func.kakao_owner_token() # OWNER의 Refresh Token 입니다.
func.kakao_friends_update()
for i in setting_time:
user_name = i['name']
user_local = i['local']
user_content = i['content']
user_db = func.find_item(mongo, {"name":user_name}, "alarm", "kakao")
for j in user_db:
user_uuid = j['uuid']
flag = check_day(i['day'])
if flag == 1:
if set_time(i['time']) == now.hour:
today = func.nowtime()
temp_max, temp_min = set_temp_data(user_local, today[:8])
am, pm = set_rain_data(user_local, today[:8])
user_dust = get_dust(user_local)
message = set_message()
kakao_friends_send(message, user_uuid)
print(j['name'] + "에게 알림 전송완료")
자잘한 변수들과 DB에서 데이터를 추출하는 부분은 넘기겠습니다.
미숙한 부분도 많고 하기에 설명하면 오히려 혼란을 가중시킬 것 같습니다.
setting_time 은 제가 카카오톡 i 오픈빌더로 챗봇을 만들었고 이 챗봇을 통해
User는 자신이 원하는 지역의 날씨, 알림을 받고 싶은 요일 및 시간, 원하는 항목(기온, 강수량, 확진자수 등)을 선택하여
User가 원하는 대로 세팅한 알림을 보내게끔 하였습니다.
먼저 OWNER의 Token으로 친구목록을 불러오고
User들이 세팅한 알림들 중 요일과 시간이 현재의 요일과 시간이 같다면
message = set_message()를 통해 유저들에게 보낼 message를 작성하고
DB에서 해당하는 User의 uuid를 추출하여 전송하게 됩니다.
이 모듈은 crontab 을 이용하여 매 정각마다 돌려지게끔 설계했고
User가 원하는 시간대 또한 정각만 설정할 수 있게끔 하였습니다.
crontab에 관한 내용은 간단하게 아래 게시글을 보시면 좋을 것 같습니다.
https://cleaning-toolbox.tistory.com/45?category=966462
이렇게 하면 이제 사용자 설정에 맞춘 알람서비스가 완성된 것입니다.
이후에는 챗봇을 어떻게 설계했는지 간단하게만 설명하겠습니다.
'Python' 카테고리의 다른 글
파이썬 - Deque(데크) (0) | 2021.12.20 |
---|---|
파이썬-실습(11) 카카오 챗봇과 앱의 연계 (0) | 2021.12.17 |
파이썬-실습(9) 가변적인 Url 파싱하기, 카카오 인가코드 파싱 (0) | 2021.12.17 |
파이썬-실습(8) 카카오 디벨로퍼 인가코드, Friends 토큰 (0) | 2021.12.17 |
파이썬-실습(7) 카카오 디벨로퍼 인가코드, OWNER 토큰 (0) | 2021.12.16 |