파이썬 프로젝트 및 응용/매일 아침 출근전 나만의 날씨 정보를 받아보자!!

(프로젝트) 출근전 날씨 정보를 메신저로 수신하기 - 2. 텔레그렘으로 데이터 전송하기 - 2) 텔레그램 봇에게 날씨 정보 보내기

파기차차 2022. 12. 20. 07:13
728x90
반응형
SMALL
728x90
반응형

ㅁ 개요

 

O 프로그램 소개

 

 

 - 이번 글은 이전글(2022.12.11 - [분류 전체보기] - (프로젝트) 출근전 날씨 정보를 메신저로 수신하기 - 2. 텔레그렘으로 데이터 전송하기 - 1) 텔레그램 봇 생성)에 이은 6번째 글로 이전 글에서 얻은 날씨 관련 API 응답결과를 가공하여 텔레그램 봇에게 전송하는 방법에 대하여 설명합니다.

 

 

 

 

 

 

 

O 완성된 프로그램 실행 화면

 

 

 - 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

 

 

아래와 같이 텔레그램 봇(봇이름: 파기차차)에게 날씨 관련 정보(온도, 습도, 기상정보 등)를 정상적으로 보낸것을 볼 수 있습니다.

 

 

 

 

O 시작전 준비 사항

 

**실습을 위해 아래 2가지 (API키 및 access token)가 미리 준비되어 있어야 합니다.

 

 - 이번글을 실습하기 위해서는 이전글(2022.12.11 - [분류 전체보기] - (프로젝트) 출근전 날씨 정보를 메신저로 수신하기 - 1. 날씨 정보 실시간 받아오기 - 1) API사용을 위한 회원가입)의 API 키

 

이전글(2022.12.11 - [분류 전체보기] - (프로젝트) 출근전 날씨 정보를 메신저로 수신하기 - 2. 텔레그렘으로 데이터 전송하기 - 1) 텔레그램 봇 생성)의 access token이 있어야 합니다.

 

 


 

ㅁ 세부 내용

 

O 완성된 소스

 

 

소스파일 : 2.py
import requests
import telegram
import datetime

now = datetime.datetime.now()
current = datetime.datetime(now.year, now.month, now.day, now.hour, now.minute, now.second)

access_token = '' # 본인의 텔레그램 봇의 엑세스 토큰을 넣어 주세요.

apikey = "" # 본인의 날씨사이트(오픈웨더맵)에서 획득한 api key를 넣어 주세요.
city = "Seoul"
lang = "kr"

full_Url = f"http://api.openweathermap.org/data/2.5/forecast?id=524901&q={city}&appid={apikey}&lang={lang}&units=metric" # 분당 60번만 가능, 하루 간격 16일치 날씨 정보 조회

response_org = requests.get(full_Url).json()
print(response_org['list'])
print("###############################################################\n\n")
print(response_org['list'][0])
print("###############################################################\n\n")


temp = response_org['list'][0]['main']['temp']
temp_min = response_org['list'][0]['main']['temp_min']
temp_max = response_org['list'][0]['main']['temp_max']
humidity = response_org['list'][0]['main']['humidity']
description = response_org['list'][0]['weather'][0]['description']
dt_txt = response_org['list'][0]['dt_txt']

print("온도: ", temp)
print("최저 온도: ", temp_min)
print("최고 온도: ", temp_max)
print("습도", humidity)
print("날씨: ", description)
print("시간: ", dt_txt)
print("###############################################################\n\n")





########### 텔레그램 세팅 시작 #######################
bot = telegram.Bot(token='5800785049:AAGlRXp65xk9IYNjWUX6DRymsNOVrwhuCbM')
# bot = telegram.Bot(token=access_token)
chat_id = bot.get_updates()[-1].message.chat_id
bot.sendMessage(chat_id=chat_id, text="현재("+str(current)+") 날씨는 \n \
온도는"+str(temp)+ \
"\n습도는 "+str(humidity)+   \
"\n하늘은 "+str(description)+   \
"\n최저 온도는 "+str(temp_min)+   \
"\n최고 온도는 "+str(temp_max)+ \
"\n입니다.")

########### 텔레그램 세팅 끝 #######################

 

 

 

 

 

O 소스 실행 방법

 
 
 
 - 소스파일을 받으신 후 cmd, 파워쉘, 비주얼스튜디오코드 등에서 아래와 같이 실행하시기 바랍니다.
 
 
 > python 2.py

 

 


 
 

O 주요 내용

 

1. 먼저 관련 모듈을 임포트 해주고,

import telegram <-- 모듈 설치가 안된 경우 >pip install python-telegram-bot 명령으로 설치

import datetime

 

텔레그렘 봇에게 현재 날짜를 전송하기 위해 아래 2줄 코딩으로 날짜 정보를 수집합니다.

now = datetime.datetime.now()
current = datetime.datetime(now.year, now.month, now.day, now.hour, now.minute, now.second)

print(current)

# 2022-12-11 17:27:26 <-- 결과

 

 나머지는 이전글에서 설명한 내용과 동일합니다.

 

 

 

 

2. 변수로 할당한 날씨 관련 정보를 print()문으로 잘 나오는지 찍어 봅니다.

 

그리고 라인 39~40이 가장 중요한 부분인데,

 

봇 객체를 생성하고

bot = telegram.Bot(token='xxxxx~~~')

 

봇 객체의 sendMessage()함수(메소드)로 메시지를 보냅니다. 메시지를 보낼때 주의할 점은 string으로 보내야 합니다. 따라서 text변수에는 "," 가 아닌 "+"를 사용하여 문자열을 붙여 주어야 합니다. 또한 필요시 str()함수를 사용하여 숫자 등을 문자로 변경해 주어야 에러가 발생하지 않습니다.

 

아래 text변수에 넣은 문자열을 유심히 관찰해 보시기 바랍니다.

 

 

 

 

 

 3. 위의 코드 실행 결과 정상적으로 나의 봇(파기차차)에게 날씨 관련 메시지 정보를 전송하였습니다.

 

 

 

 

 

 

 

 

 

 

 


 

 

O 소스 분석

 

- 위의 '주요 내용'을 참고하여 주시기 바랍니다.

 


 

ㅁ 정리

 

O 우리가 배운 내용

 
 - 오늘은
이전 글에서 얻은 날씨 관련 API 응답결과를 가공하여 텔레그램 봇에게 전송하는 방법에 대하여 알아보았습니다.
 
 
 
 
 
 - 오늘 우리가 배운 내용을 요약 정리해 보면 아래와 같습니다.
 
 
 
 
1. 이전 글에서 학습한 날씨 관련 정보를 API 요청으로 응답 받고, 이를 가공하여 전송할 데이터를 준비하였습니다.(이전과 동일)
 
 
2. 이후 bot객체를 생성하여 bot객체의 sendMessage()함수로 메시지를 보냈습니다.
 
 
 

 

오늘은 여기까지이며, 위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.

 

 

감사합니다.

 

 

 

 

 

 

 

※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.

 

 

728x90
반응형
LIST