python 날씨 인터페이스 가 져 오기 지정 한 위 챗 친구 에 게 일기예보 보 내기
10276 단어 python일기 예보인터페이스 가 져 오기위 챗 친구
사용 한 모듈:
날씨 정보 가 져 오기
만약 에 우리 가 여러 사람 에 게 날씨 상황 을 보 내 면 이 몇 사람 이 서로 다른 도시 에서 온다 면 우 리 는 매번 도시 이름 을 입력 한 다음 에 도시 코드 를 찾 은 다음 에 인 터 페 이 스 를 방문 하여 날씨 상황 을 얻 을 수 없다.그러면 매우 번 거 로 울 것 이다.그래서 우 리 는 도시 이름과 도시 코드 를 일일이 대응 하 는 것 을 고려 해 야 한다.먼저 생각 나 는 데이터 구 조 는 바로 사전 이기 때문에 우 리 는 이 정 보 를 한 사전 에 저장 한 다음 에 한 파일 에 오래 지속 시 킬 수 있다.그러면 매우 편리 하 다.
우선 최신 city 표를 가 져 옵 니 다.이 시 계 는 list 형식 입 니 다.대체적으로 다음 과 같 습 니 다.
[
{
"id": 1,
"pid": 0,
"city_code": "101010100",
"city_name": " ",
"post_code": "100000",
"area_code": "010",
"ctime": "2019-07-11 17:30:06"
},
{
"id": 2,
"pid": 0,
"city_code": "",
"city_name": " ",
"post_code": null,
"area_code": null,
"ctime": null
}
]
우 리 는 간단하게 붙 여 넣 고 복사 해서 빈 목록 에 넣 습 니 다.다음 과 같이 모든 도시 정 보 를 목록 citycode 에 넣 습 니 다.
citycode = [
{
"id": 1,
"pid": 0,
"city_code": "101010100",
"city_name": " ",
"post_code": "100000",
"area_code": "010",
"ctime": "2019-07-11 17:30:06"
},
...
...
...
...
...
...
{
"id": 2,
"pid": 0,
"city_code": "None",
"city_name": " ",
"post_code": "null",
"area_code": "null",
"ctime": "null"
}
]
cityinfo = {}
# json
with open('city_for_code.json','w',encoding='utf-8') as f:
for i in citycode:
name = i["city_name"]
code = i["city_code"]
cityinfo[name] = code
f.write(str(cityinfo))
#
with open('city_for_code.json','r+',encoding='utf-8') as file:
data_dst = file.readlines()
d = eval(data_dst[0])
그리고 우리 가 필요 로 하 는 cityname 과 citycode 이 두 필드 를 꺼 내 면 됩 니 다.그리고 파일 에 기록 합 니 다.읽 으 면 위의 방법 으로 읽 습 니 다.주의해 야 할 것 은 open()방법 으로 파일 을 읽 고 얻 은 내용 은 목록 입 니 다.eval()방법 을 통 해 dict 형식 으로 전환 해 야 합 니 다.이것 은 cityname 과 citycode 를 파일 에 넣 는 방법,그리고 데이터베이스 에 넣 을 수도 있 습 니 다.여 기 는 MySQL 을 예 로 들 어 PyMySQL 모듈 을 설치 합 니 다.
import pymysql
db_parames = {
'host': 'localhost',
'user': 'root',
'password': '123456',
'database': 'city_code_info'
}
#
conn = pymysql.connect(**db_parames)
# ,
cursor = conn.cursor()
# ,
cursor.execute("DROP TABLE IF EXISTS city_code")
#
create_table_sql = """CREATE TABLE `city_code` (
`city_name` varchar(20) DEFAULT NULL,
`city_code` varchar(25) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
"""
#
cursor.execute(create_table_sql)
#
with open('city_for_code.json','r+',encoding='utf-8') as f:
origin_data = f.readlines()
current_data = eval(origin_data[0]) # ,
#print(current_data.get(' ','Not Exists.'))
for name, code in current_data.items():
sql = """INSERT INTO city_code(city_name, city_code) VALUES ('%s', '%s')""" % (name, code)
try:
cursor.execute(sql)
except:
conn.rollback()
conn.commit()
conn.close()
이 python 프로그램 을 실행 하면 파일 에 있 는 도시 이름과 도시 코드 를 라 이브 러 리 에 저장 할 수 있 습 니 다.물론 우 리 는 도시 이름과 도시 코드 를 직접 얻 은 다음 에 파일 의 지속 화 단 계 를 뛰 어 넘 고 이 두 필드 를 꺼 내 저장 할 수 있 습 니 다.그러나 코드 를 많이 연습 하고 많이 써 야 한 다 는 것 을 고려 하여 이 를 들 었 습 니 다.다음은 도시 이름 을 입력 하면 도시 코드 를 얻 을 수 있 는 코드 블록 입 니 다.
import pymysql
def get_city_code(city_name):
db_parames = {
'host': 'localhost',
'user': 'root',
'password': '123456',
'database': 'city_code_info'
}
#
conn = pymysql.connect(**db_parames)
# ,
cursor = conn.cursor()
#
select_sql = "SELECT * FROM city_code where city_name='%s'"%(city_name)
try:
cursor.execute(select_sql)
result = cursor.fetchall()
for row in result:
city_code = row[1]
return city_code
except:
return "Error: unable fetch data!"
그 다음 에 입력 한 도시 코드 에 따라 날씨 상황 을 얻 습 니 다.
import requests
def get_weather(city_name,get_date_time=3):
city_code = get_city_code(city_name)
url = 'http://t.weather.sojson.com/api/weather/city/%s'%(city_code)
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
}
response = requests.get(url,header)
response.encoding = 'utf-8'
weather = response.json()
day = {1: ' ', 2: ' ', 3: ' '}
weather_lst = []
for num in range(get_date_time):
City = weather["cityInfo"]["city"]
Weatherganmao = weather["data"]["ganmao"]
Weatherquality = weather["data"]["quality"]
Weathershidu = weather["data"]["shidu"]
Weatherwendu = weather["data"]["wendu"]
Weatherpm25 = str(weather["data"]["pm25"])
Weatherpm10 = str(weather["data"]["pm10"])
Dateymd = weather["data"]["forecast"][num]["ymd"]
Dateweek = weather["data"]["forecast"][num]["week"]
Sunrise = weather["data"]["forecast"][num]["sunrise"]
Sunset = weather["data"]["forecast"][num]["sunset"]
Windfx = weather["data"]["forecast"][num]["fx"]
Windf1 = weather["data"]["forecast"][num]["fl"]
Weathertype = weather["data"]["forecast"][num]["type"]
Weathernotice = weather["data"]["forecast"][num]["notice"]
Weatherhigh = weather["data"]["forecast"][num]["high"]
Weatherlow = weather["data"]["forecast"][num]["low"]
if num == 0:
result = ' ' + '
' \
+ ' : ' + Dateymd + ' ' + Dateweek + ' ' + City + '
' \
+ ' : ' + Weathertype + ' ' + Windfx + ' ' + Windf1 + ' ' + Weathernotice + '
' \
+ ' : ' + Weatherwendu + '℃' + '
' \
+ ' : ' + Weathershidu + '
' \
+ ' : ' + Weatherlow + '' + '~' + '' + Weatherhigh + '
' \
+ ' : ' + 'PM2.5: ' + Weatherpm25 + ' ' + 'PM10: ' + Weatherpm10 + '
' \
+ ' : ' + Weatherquality + '
' \
+ ' : ' + Sunrise + '
' \
+ ' : ' + Sunset + '
' \
+ ' : ' + Weatherganmao
else:
which_day = day.get(num,' ')
result = '
' + which_day + ' ' + ' ' + '
' \
+ ' : ' + Dateymd + ' ' + Dateweek + ' ' + City + '
' \
+ ' : ' + Weathertype + ' ' + Windfx + ' ' + Windf1 + ' ' + Weathernotice + '
' \
+ ' : ' + Weatherlow + '' + '~' + '' + Weatherhigh + '
' \
+ ' : ' + Sunrise + '
' \
+ ' : ' + Sunset + '
' \
+ ' : ' + Weatherganmao
weather_lst.append(result)
weather_str = '' # , , , 。
for msg in weather_lst:
weather_str += msg + '
'
return weather_str
다음은 위 챗 메시지 입 니 다.
from wxpy import *
def send_wx(city_name, who):
bot = Bot(cache_path=True)
#bot = Bot(console_qr=2, cache_path='botoo.pkl')
my_friend = bot.friends().search(who)[0]
msg = get_weather(city_name)
try:
my_friend.send(msg)
except:
my_friend = bot.friends().search('fei')[0]
my_friend.send(u" ")
그런 후에 우 리 는 시간 을 두 고 한 번 씩 타 이 머 를 써 야 한다.
from threading import Timer
def auto_send():
city_name = ' '
friend_list = [' ']
for who in friend_list:
send_wx(city_name,who)
global timer
timer = Timer(1,auto_send)
timer.start()
마지막 실행 프로그램
if __name__ == '__main__':
timer = Timer(1,auto_send)
timer.start()
이상 은 python 에서 날씨 인 터 페 이 스 를 가 져 와 지 정 된 위 챗 친구 에 게 일기예보 의 상세 한 내용 입 니 다.python 에서 날씨 인 터 페 이 스 를 가 져 오 는 데 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.