들어가면서
42서울에는 달리기 기록을 올리는 채널이 있다. 그런데 잘 살펴보면 이 채널에 사람이 매일 날짜를 올리고 그 아래에 쓰레드를 통해서 사람들이 자신의 달리기 기록을 인정받는다. 개인적으로 날짜 치는 것이 귀찮을 것이라고 생각했고, 그래서 채널을 위해서 간단한 날짜 봇 및 날씨를 알려주는 봇을 만들었다. 이번에는 다른 회고와 다르게 실제로 어떻게 만드는지도 설명해볼까 한다.
간단하게 슬렉 봇 만들기
준비물 : 파이썬에 대한 간단한 지식, Slack Bot TOKEN, 파이썬이 설치된 PC
아래 방법은 LINUX 및 MAC 기준입니다.
1. 가장 먼저 필요한 라이브러리를 설치해줍니다.
pip3 install slack_sdk
pip3 install request
2. 필요한 파일들을 만듭니다. (main.py, .env)
touch main.py
touch .env
3. 원하시는 IDE로 파일을 엽니다(VSC 추천)
code main.py
# 혹은 VIM 유저는 vim main.py로 여시면 됩니다.
4. 필요한 라이브러리 가져오기
from datetime import datetime
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
from dotenv import load_dotenv
import os
import requests
import json
5. .env 설정하기
# SLACK BOT
SLACK_TOKEN=(TOKEN 유출안되게 조심하세요!)
SLACK_ERROR_URI=(이 것은 선택!)
SLACK_CHANNEL=(보내고 싶은 채널명)
# WEATHER
# https://openweathermap.org/api 여기에 회원가입 후에 API_KEY복사 붙여넣기 하면 됩니다.
WEATHER_API_KEY=(유출 안되게 조심하세요!)
6. 환경변수 가져오기
load_dotenv() # .env 파일에서 환경 변수를 로드합니다.
slack_bot_token = os.getenv("SLACK_TOKEN")
slack_channel = os.getenv("SLACK_CHANNEL")
apiKey = os.getenv("WEATHER_API_KEY")
7. 슬렉에 메시지 보내는 함수 제작
def send_slack_message(message):
# WebClient 인스턴스 초기화
client = WebClient(token=slack_bot_token)
try:
response = client.chat_postMessage(
channel=slack_channel,
text=message,
blocks=[
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": message,
}
},
]
)
except SlackApiError as e:
print(f"Error sending message: {e}")
8. 날씨 가져오기 위한 세팅
# 초기세팅
city = "Seoul" # 원하는 도시 설정
lang = 'kr' # 언어 설정
units = 'metric' # 단위 설정(섭씨)
# API 요청보낼 곳 설정
api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={apiKey}&lang={lang}&units={units}"
# API 요청
result = requests.get(api)
result = json.loads(result.text)
# 나온 데이터 중 필요 데이터 구분
name = result['name']
lon = result['coord']['lon']
lat = result['coord']['lat']
weather = result['weather'][0]['description']
temperature = result['main']['temp']
humidity = result['main']['humidity']
9. 출력문 만들기
# 출력문 만들기
now = datetime.now() # 현재 시간을 얻습니다.
date_time = now.strftime("[*%m월 %d일, 오늘의 달리기 기록*]") # 문자열로 변환합니다.
message = date_time + f"\n\n오늘의 날씨: {weather}(기온: {temperature}, 습도: {humidity})\n * 기준: 서울, 경도: {lon}, 위도: {lat}"
10. 발송!
send_slack_message(message)
이렇게 간단하게 슬렉 봇을 만들 수 있다. 실행시켜보면 바로 아래와 같이 봇이 메시지를 보낸다.
매일 특정시간에 보내기
매일매일 내가 서버에 들어가서 저것을 보낼 수는 없지않은가? 컴퓨터에게 알아서 특정 시간에 돌리도록 해보자
1. crontab 스케쥴러 편집에 들어간다.
crontab -e
2. 해당 파일을 특정 시간에 돌리라고 명령해둔다.
# ...기존에 작성되어있는 안내문
# 매일 오전 9시에 실시하겠다는 의미다.
0 9 * * * python3 (해당 .py 파일 경로, 이 때에는 절대경로로!)
3. 이렇게 작성하고 esc -> :wq 입력 -> 엔터를 진행하면 crontab이 설정된다.
TIP: 9시가 아닌 다른 시간에 작동합니다 -> 해당 서버의 기준 시간을 확인해보세요 date를 입력하면 됩니다. UTC 기준으로 설정되어있다면, KST로 변경하는 과정을 거치면 정상적으로 9시에 해당 파일이 실행되게 됩니다.
진짜 끝!
'프로젝트 > 42프로젝트' 카테고리의 다른 글
42 내 공유우산 프로젝트 회고(42OpenUmbrella) (0) | 2023.08.11 |
---|---|
"인프라 올 인원" 프로젝트(쿠버네티스) (2) | 2023.07.25 |
토이 프로젝트 확장(42JOBS, 이제는 카톡으로도!) (0) | 2023.07.24 |
토이프로젝트 후기(42JOBS, 42슬렉 취업공고 채널 봇) (0) | 2023.07.22 |
42Benefit 개발 회고 (2) | 2023.04.28 |