![[linux] Python과 crontab을 이용하여 카카오톡 메시지 보내는 배치 실행하기(카카오 API)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdqYzFO%2FbtryRRXuTan%2FBzyoyfITSmVDNiZTAEjL91%2Fimg.png)
가짜연구소 내 Python - Data Engineering 스터디를 위해 작성했습니다.
https://www.notion.so/chanrankim/PseudoLab-c42db6652c1b45c3ba4bfe157c70cf09
(가짜연구소 링크)
https://www.notion.so/chanrankim/Data-Engineer-Python-83c206a662004120a8211a800581e124
(스터디상세 링크)
0. 들어가며
제목은 거창하지만, 메시지 내용은 간단하다. 리눅스에서 크론탭과 파이썬을 이용해서 매 시간마다 나에게 메시지를 보내볼 것이다.
https://gibles-deepmind.tistory.com/117
[Linux] Python 가상환경 세팅하기 (bdist_wheel 에러 해결)
0. 들어가며 https://gibles-deepmind.tistory.com/116 [GCP] VM Instance 생성하기 1. 무료로 시작하기 무료로 시작하기를 클릭해준다. 적당한 걸 클릭해주고 계좌 유형은 귀찮으니, 개인을 선택해준다. 그리고,..
gibles-deepmind.tistory.com
GCP에서 VM 인스턴스 생성 및 파이썬 설치는 아래 링크를 참조해볼 수 있다.
1. 참조 페이지
우선 설정 관련된 부분은 아래 링크를 참고했다.
https://blog.daum.net/geoscience/1624
★카카오 API를 이용하여 나에게 메시지 보내기
안녕하세요? 이번 글은 카카오 API를 이용하여 나에게 메시지 보내는 과정을 정리해 보겠습니다. 일단 'Kakao Developers' 홈페이지에 접속합니다. Kakao Developers 카카오 API를 활용하여 다양한 어플리케
blog.daum.net
여기서 얘기해주는 설정을 하나도 빠짐없이 모두 완료해야한다.
https://gam860720.tistory.com/523
[파이썬] 카카오톡 자동 토근 발행 후 나에게 메시지 보내기 (feat.refresh token)
며칠전 파이썬으로 카카오톡을 통해 자신에게 메시지를 보내는 법에 알아봤다. (해당 글은 아래 링크 참조) [파이썬] 카카오톡으로 나에게 메시지를 보내보자 [파이썬] 카카오톡으로 나에게 메
gam860720.tistory.com
Python으로 나에게 카카오톡 보내기
[ 오늘의 해보기 ] 카카오 API를 사용하여 Python으로 나에게 메시지 보내보기
velog.io
https://novice-engineers.tistory.com/11?category=908185
[Python] 10분 만에 카카오톡 메시지 보내기 - (2. 메시지 보내기)
사용자 토큰을 발급받지 않으신 분은 반드시 1편을 수행해주세요! www.novice-engineers.tistory.com/9?category=908185 [Python] 10분 만에 카카오 오픈 API로 메시지 보내기 - (1. 사용자 토큰 발급) 1. Kakao D..
novice-engineers.tistory.com
코드는 위 사이트 들을 참고해서 작성했다. 거의 그대로 사용하고 몇개만 내가 바꿨다. 하나씩 읽어보면 실행하는데는 무리가 없을 것이다. 사전 환경 설정은 첫 번째 링크에 잘 정리되어 있으니, 꼭 한번 보시길
2. 파이썬 스크립트 작성
nano get_token.py
우선, token을 받아오는 py를 만들어준다.
import requests
url = 'https://kauth.kakao.com/oauth/token'
rest_api_key = 'yours'
redirect_uri = 'yours'
authorize_code = 'yours'
data = {
'grant_type':'authorization_code',
'client_id':rest_api_key,
'redirect_uri':redirect_uri,
'code': authorize_code,
}
response = requests.post(url, data=data)
tokens = response.json()
print(tokens)
import json
with open("kakao_code.json","w") as fp:
json.dump(tokens, fp)
위와 같이 각자의 key값들을 넣어주면 된다. 위 코드는 첨부한 링크의 코드를 그대로 사용하였다.
nano send_message2.py
다음으로, 메시지를 보내는 스크립트를 작성한다.
import json
import requests
from datetime import datetime
from pytz import timezone
date_time = datetime.now(timezone('Asia/Seoul')).strftime('%Y-%m-%d %H:%M:%S')
with open("/home/yours/python_dev/kakao_message_test/kakao_code.json", "r") as kakao:
tokens = json.load(kakao)
url="https://kapi.kakao.com/v2/api/talk/memo/default/send"
headers={
"Authorization" : "Bearer " + tokens["access_token"]
}
data = {
"template_object": json.dumps({
'object_type': "text",
'text': f"Run every hour at 57minutes. This is for DE-STUDY crontab test.",
'link': {
'web_url': 'https://developers.kakao.com',
'mobile_web_url': 'https://developers.kakao.com'
},
'button_title': f"{date_time}"
})
}
response = requests.post(url, headers=headers, data=data)
print(response.status_code)
여기서 한가지 주의할점은 with open을 할 때, 절대 경로를 넣어주었다는 점이다. crontab을 home directory에서 실행하기 때문에 절대 경로를 그대로 적어줘야 나중에 crontab 실행시 참조할 수 있다.
첫 번째 밑줄이 메시지에 표시되는 부분이고 두 번째 밑줄은 크론탭 실행 시간(timezone을 asia로 설정하여 kst로 시간을 가져오도록 하였다.)을 받아오는 부분이다. 여기는 커스터마이징하게 하고 나머지는 동일하게 가져가면 코드를 실행하는데는 무리없다.
nano message_send.sh
참고로, 크론탭 이용시 py스크립트 보다는 셸스크립트를 쓰는게 좋다고 하여 아래와 같이 python 스크립트를 실행하는 bash 파일을 하나 더 만들었다.
python3 /home/yours/python_dev/kakao_message_test/send_message2.py
크론탭 이용시에는 항상 절대 경로를 적어주는 것이 좋다.
3. 크론탭 실행
sudo apt-get uninstall crontab
sudo apt-get install crontab
처음에 크론탭 사용할 때 하도 애를 먹어서 시간을 5시간 가량 보냈는데, 삭제후 재설치하니 문제없이 잘 실행되었다. 크론탭은 유저 계정의 home 탭에서 사용하였다. cd ~ 참조
crontab -e
크론탭 편집기로 들어가는 코드이다. 처음 실행하면 편집기를 선택할 수 있는데, 1번을 입력하면 nano가 선택된다.
내부는 이렇게 되어 있는데
* * * * * bash /home/minmaxskull/python_dev/kakao_message_test/message_send.sh
위와 같이 작성하면 매분마다 해당 스크립트를 실행한다는 뜻이다. *별 의미는 본 글 대표 이미지를 참조해보면 알 수 있다. 예를 들어 */15 * * * * 이건 매 15분마다 실행한다는 뜻이고, 15 * * * * 이건 매시간 15분이 될때마다 실행한다는 의미이다.
sudo service cron restart
이렇게 하고 크론탭을 한번 restart해준다.
crontabl -l | tail -n 1
현재 실행되고 있는 crontab이 잘보인다. 그럼 결과는 어떨까?
4. 발송한 카카오톡 메시지 확인
매 분마다 설정한 알림이 잘 오는 것을 알 수 있다. 추가적으로, 1초 2초쯤에 메시지가 전송된 것으로 보아 crontab실행후 카카오톡 메시지가 보내지기 까지 1~2초간 약간의 딜레이가 있는 것 같다. 이상
5. Ref
https://arycoat.tistory.com/75
[python] 시스템 시간에 관계없이 KST 가져오기
from datetime import datetime from pytz import timezone # 시스템 시간 print(datetime.now()) # KST print(datetime.now(timezone('Asia/Seoul')).strftime('%Y-%m-%d %H:%M:%S')) datetime.now(timezone(...))
arycoat.tistory.com
'딥상어동의 딥한 프로그래밍 > 엔지니어링' 카테고리의 다른 글
[Airflow] 리눅스 도커를 이용한 설치 삽질기 (1) | 2022.05.10 |
---|---|
[Airflow] 설치(pip install) 및 webserver 실행 (0) | 2022.05.08 |
[Linux] Python 가상환경 세팅하기 (bdist_wheel 에러 해결) (0) | 2022.04.10 |
[GCP] VM Instance 생성하기 (0) | 2022.04.08 |
AWS Free tier 과금 ㅂㄷㅂㄷ (0) | 2022.04.07 |
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!