å çä¸ææå¾ï¼python
ç¨å°ç模åï¼mysql
PyMySQL
requests
threading
wxpy
è¦å®ç°ä¸é¢ç示ä¾ï¼é¦å æ¯æ两大åå°æ¹sql
è·å天æ°ä¿¡æ¯
ç»è¿å¾®ä¿¡å°å¤©æ°ä¿¡æ¯åéåºå»
èè·å天æ°ä¿¡æ¯åå æ¬å 个å°çé¡»è¦æ³¨æçå°æ¹æ°æ®åº
è·å天æ°ä¿¡æ¯json
è·å天æ°ä¿¡æ¯çæ¥å£
è·å天æ°ä¿¡æ¯çåå¸
è·åæå¨åå¸çåå¸ç
åå¦å±ä»¬ç»å¤æçåé天æ°ç¶åµï¼è¿å æçæ¥èªä¸ä¸æ ·çåå¸ï¼é£ä¹å±ä»¬ä¸å¯è½æ¯æ¬¡é½è¦è¾å ¥åå¸åï¼èåæ¥æ¾åå¸ç ï¼èåå访é®æ¥å£ï¼è·å天æ°ç¶åµï¼è¿æ ·ä¼å¾æ¯ç麻ç¦ï¼å æ¤å±ä»¬é¡»è¦èèå°åå¸åè·åå¸ç ä¸ä¸å¯¹åºèµ·æ¥ï¼è¯´å°ä¸ä¸å¯¹åºï¼é¦å æ³å°çæ°æ®ç»æå³æ¯åå ¸ï¼å æ¤å±ä»¬è½å¤å°è¿äºä¿¡æ¯åå ¥ä¸ä¸ªåå ¸éï¼èåæä¹ åå°ä¸ä¸ªæ件ä¸ï¼è¿æ ·ä¾¿æ¹ä¾¿ä¸å°api
é¦å å±ä»¬è·åææ°ç 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])
èåå°±æ¯ä¸é¡¿å¤çï¼åªæå±ä»¬æéç city_name å city_code è¿ä¿©å段ååºä¾¿å¯ï¼éååå ¥æ件ä¸ãè¥æ¯è¯»åçè¯å°±æç §ä¸é¢æ¹æ³å»è¯»åï¼é¡»è¦æ³¨æçæ¯ï¼ä½¿ç¨ open()æ¹æ³è¯»åæ件ï¼è·å¾çå 容æ¯ä¸ä¸ªå表ï¼å±ä»¬é¡»è¦ç»è¿ eval()æ¹æ³è½¬åæ dict ç±»åãapp
è¿æ¯æ city_name å city_code æ¾å°ä¸ä¸ªæ件ä¸çæ¹æ³ï¼å¦å¤å±ä»¬ä¹è½å¤æ¾å°æ°æ®åºä¸ï¼è¿é以 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 = 'ä»æ¥å¤©æ°é¢æ¥' + '\n' \
+ 'æ¥æï¼ ' + Dateymd + ' ' + Dateweek + ' ' + City + '\n' \
+ '天æ°ï¼ ' + Weathertype + ' ' + Windfx + ' ' + Windf1 + ' ' + Weathernotice + '\n' \
+ 'å½åæ¸©åº¦ï¼ ' + Weatherwendu + 'â' + '\n' \
+ '空æ°æ¹¿åº¦ï¼ ' + Weathershidu + '\n' \
+ '温度èå´ï¼ ' + Weatherlow + '' + '~' + '' + Weatherhigh + '\n' \
+ '污æææ°ï¼ ' + 'PM2.5: ' + Weatherpm25 + ' ' + 'PM10: ' + Weatherpm10 + '\n' \
+ '空æ°è´¨éï¼ ' + Weatherquality + '\n' \
+ 'æ¥åºæ¶é´ï¼ ' + Sunrise + '\n' \
+ 'æ¥è½æ¶é´ï¼ ' + Sunset + '\n' \
+ 'èéæç¤ºï¼ ' + Weatherganmao
else:
which_day = day.get(num,'è¶ åºèå´')
result = '\n' + which_day + ' ' + '天æ°é¢æ¥' + '\n' \
+ 'æ¥æï¼ ' + Dateymd + ' ' + Dateweek + ' ' + City + '\n' \
+ '天æ°ï¼ ' + Weathertype + ' ' + Windfx + ' ' + Windf1 + ' ' + Weathernotice + '\n' \
+ '温度èå´ï¼ ' + Weatherlow + '' + '~' + '' + Weatherhigh + '\n' \
+ 'æ¥åºæ¶é´ï¼ ' + Sunrise + '\n' \
+ 'æ¥è½æ¶é´ï¼ ' + Sunset + '\n' \
+ 'èéæç¤ºï¼ ' + Weatherganmao
weather_lst.append(result)
weather_str = '' #ç±äºé»è®¤è¦è¾åºä¸å¤©ç天æ°ç¶åµï¼å æ¤å±ä»¬é¡»è¦å»ºç«ä¸ä¸ªç©ºå符串ï¼èåæ¯è¿ä»£ä¸æ¬¡ï¼å°±å°å¤©æ°ç¶åµæ¼æ¥å°ç©ºå符串ä¸ã
for msg in weather_lst:
weather_str += msg + '\n'
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()
欢è¿åä½æåå ³æ³¨ä¸ªäººå ¬ä¼å·ï¼æ¥ä¸åå¿å¦ä¹ è¿æ¥å¦
æ¬æç±å客群åä¸æå¤åçè¿è¥å·¥å ·å¹³å°
OpenWrite åå¸