-
카카오톡 봇 만들기 ( python, pc 카톡, 비활성 ) - 3편python/매크로 2020. 4. 27. 01:30반응형
3줄 선 요약
- 플러스친구 아님
- 모바일 어플을 활용한 방법 아님
- pc카톡, python 으로 pc 환경에서 봇을 제작함
2020/04/21 - [python] - 카카오톡 봇 만들기 ( python, pc 카톡, 비활성 ) - 1편
2020/04/24 - [python] - 카카오톡 봇 만들기 ( python, pc 카톡, 비활성 ) - 2편
1편 에서는 카톡 봇의 기능설명과 메시지 전송,
2편 에서는 친구 목록 or 채팅방 목록을 선택해서 입장하는 방법을 알아봤다.
이번 3편에서는 1~2편의 전송 기능을 활용해서 간단하게 카카오톡 알림봇을 만들어 보려 한다.
크롤링 + 전송 + 스케줄러
로 이루어진 주기적인 예약 알림 기능을 만들려고 하며
이런 식으로 쓸 수도 있다~ 라고 보여주는 것뿐이라서
자세한 설명보다는 코드 위주로 구현만 보여주려 함.
알림 내용에 쓸 크롤링 코드 ( 네이버 실검 20개)__2020-04-27 기준 실행 확인
# # 네이버 실시간 검색어 크롤링 import requests from bs4 import BeautifulSoup headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} url = 'https://datalab.naver.com/keyword/realtimeList.naver?where=main' res = requests.get(url, headers = headers) soup = BeautifulSoup(res.content, 'html.parser') data = soup.findAll('span','item_title') a = [] for item in data: a.append(item.get_text()) s = "\n".join(a) print(s)
예약실행을 위한 스케줄러 예제 코드 ( apscheduler )
from apscheduler.schedulers.background import BackgroundScheduler import time def job_1(): p_time_ymd_hms = \ f"{time.localtime().tm_year}-{time.localtime().tm_mon}-{time.localtime().tm_mday} / " \ f"{time.localtime().tm_hour}:{time.localtime().tm_min}:{time.localtime().tm_sec}" print(p_time_ymd_hms) sched = BackgroundScheduler() sched.start() # # 매 분 5초마다 job_1 실행 sched.add_job(job_1, 'cron', second='*/5', id="test_1") while True: print("실행중.................") time.sleep(1)
2편 마지막에 적어둔 카카오톡 방 선택 입장 + 메시지 전송 코드
import time, win32con, win32api, win32gui # # 카톡창 이름, (활성화 상태의 열려있는 창) kakao_opentalk_name = '메모장' # # 채팅방에 메시지 전송 def kakao_sendtext(chatroom_name, text): # # 핸들 _ 채팅방 hwndMain = win32gui.FindWindow( None, chatroom_name) hwndEdit = win32gui.FindWindowEx( hwndMain, None, "RichEdit20W", None) # hwndListControl = win32gui.FindWindowEx( hwndMain, None, "EVA_VH_ListControl_Dblclk", None) win32api.SendMessage(hwndEdit, win32con.WM_SETTEXT, 0, text) SendReturn(hwndEdit) # # 엔터 def SendReturn(hwnd): win32api.PostMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0) time.sleep(0.01) win32api.PostMessage(hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0) # # 채팅방 열기 def open_chatroom(chatroom_name): # # 채팅방 목록 검색하는 Edit (채팅방이 열려있지 않아도 전송 가능하기 위하여) hwndkakao = win32gui.FindWindow(None, "카카오톡") hwndkakao_edit1 = win32gui.FindWindowEx( hwndkakao, None, "EVA_ChildWindow", None) hwndkakao_edit2_1 = win32gui.FindWindowEx( hwndkakao_edit1, None, "EVA_Window", None) hwndkakao_edit2_2 = win32gui.FindWindowEx( hwndkakao_edit1, hwndkakao_edit2_1, "EVA_Window", None) hwndkakao_edit3 = win32gui.FindWindowEx( hwndkakao_edit2_2, None, "Edit", None) # # Edit에 검색 _ 입력되어있는 텍스트가 있어도 덮어쓰기됨 win32api.SendMessage(hwndkakao_edit3, win32con.WM_SETTEXT, 0, chatroom_name) time.sleep(1) # 안정성 위해 필요 SendReturn(hwndkakao_edit3) time.sleep(1) def main(): open_chatroom(kakao_opentalk_name) # 채팅방 열기 text = "test" kakao_sendtext(kakao_opentalk_name, text) # 메시지 전송 if __name__ == '__main__': main()
pc카톡 예약 알림봇 코드 (위 세 개의 코드 합친 것)
######################################### ## 카카오톡pc 1~2 편 + 크롤링 + 스케줄러 ## ######################################### import time, win32con, win32api, win32gui import requests from bs4 import BeautifulSoup from apscheduler.schedulers.background import BackgroundScheduler # # 카톡창 이름, (활성화 상태의 열려있는 창) kakao_opentalk_name = '메모장' # # 채팅방에 메시지 전송 def kakao_sendtext(chatroom_name, text): # # 핸들 _ 채팅방 hwndMain = win32gui.FindWindow( None, chatroom_name) hwndEdit = win32gui.FindWindowEx( hwndMain, None, "RichEdit20W", None) win32api.SendMessage(hwndEdit, win32con.WM_SETTEXT, 0, text) SendReturn(hwndEdit) # # 엔터 def SendReturn(hwnd): win32api.PostMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0) time.sleep(0.01) win32api.PostMessage(hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0) # # 채팅방 열기 def open_chatroom(chatroom_name): # # # 채팅방 목록 검색하는 Edit (채팅방이 열려있지 않아도 전송 가능하기 위하여) hwndkakao = win32gui.FindWindow(None, "카카오톡") hwndkakao_edit1 = win32gui.FindWindowEx( hwndkakao, None, "EVA_ChildWindow", None) hwndkakao_edit2_1 = win32gui.FindWindowEx( hwndkakao_edit1, None, "EVA_Window", None) hwndkakao_edit2_2 = win32gui.FindWindowEx( hwndkakao_edit1, hwndkakao_edit2_1, "EVA_Window", None) hwndkakao_edit3 = win32gui.FindWindowEx( hwndkakao_edit2_2, None, "Edit", None) # # Edit에 검색 _ 입력되어있는 텍스트가 있어도 덮어쓰기됨 win32api.SendMessage(hwndkakao_edit3, win32con.WM_SETTEXT, 0, chatroom_name) time.sleep(1) # 안정성 위해 필요 SendReturn(hwndkakao_edit3) time.sleep(1) # # 네이버 실검 상위 20개, 리턴 def naver_realtimeList(): headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} url = 'https://datalab.naver.com/keyword/realtimeList.naver?where=main' res = requests.get(url, headers = headers) soup = BeautifulSoup(res.content, 'html.parser') data = soup.findAll('span','item_title') a = [] for item in data: a.append(item.get_text()) s = "\n".join(a) return s # # 스케줄러 job_1 def job_1(): p_time_ymd_hms = \ f"{time.localtime().tm_year}-{time.localtime().tm_mon}-{time.localtime().tm_mday} / " \ f"{time.localtime().tm_hour}:{time.localtime().tm_min}:{time.localtime().tm_sec}" open_chatroom(kakao_opentalk_name) # 채팅방 열기 realtimeList = naver_realtimeList() # 네이버 실시간 검색어 상위 20개 kakao_sendtext(kakao_opentalk_name, f"{p_time_ymd_hms}\n{realtimeList}") # 메시지 전송, time/실검 def main(): sched = BackgroundScheduler() sched.start() # # 매 분 5초마다 job_1 실행 sched.add_job(job_1, 'cron', second='*/5', id="test_1") count = 0 while True: print("실행중.................") time.sleep(1) if __name__ == '__main__': main()
사용법은
kakao_opentalk_name = '메모장'
여기에서 '메모장' 부분을 원하는 채팅방 이름으로 바꾸고
sched.add_job(job_1, 'cron', second='*/5', id="test_1")
이 부분을 원하는 시간으로 설정하면 된다. _ APScheduler 로 검색
그 외 여기서 예제로 쓴 네이버 실검 크롤링뿐만 아니라
다른 기능들을 넣어서 만드시면 됩니다.예)
- 특정 사이트의 새로운 게시글 알림 ( 인기글 or 공지사항 등 )
- 시간별 날씨 알림
- 판매 사이트 상품 재입고 알림
간단하게 크롤링으로 생각나는 건 이 정도인데
이 외에도 원하시는 기능들 넣으시면 됩니다.
3편은 pc카톡 봇 예약 알림 기능을 구현해보았고,
다음 편에선 채팅창 내용을 가져오는 방법과
가져온 내용을 활용해 키워드에 반응하여 봇의 기능을 실행하는
키워드 명령 봇에 대해 써보겠습니다.
반응형'python > 매크로' 카테고리의 다른 글
카카오톡 봇 만들기 ( python, pc 카톡, 비활성 ) - 4편 (30) 2020.05.01 카카오톡 봇 만들기 ( python, pc 카톡, 비활성 ) - 2편 (4) 2020.04.24 카카오톡 봇 만들기 ( python, pc 카톡, 비활성 ) - 1편 (31) 2020.04.21