最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python獲取天氣接口給指定微信好友發(fā)天氣預(yù)報(bào)

 更新時(shí)間:2020年12月28日 10:59:17   作者:dogfei  
這篇文章主要介紹了python獲取天氣接口給指定微信好友發(fā)天氣預(yù)報(bào)的步驟,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

先看下效果圖:

用到的模塊:

  • PyMySQL
  • requests
  • threading
  • wxpy

要實(shí)現(xiàn)上面的示例,首先是有兩大塊地方

  • 獲取天氣信息
  • 通過微信將天氣信息發(fā)送出去

而獲取天氣信息又包括幾個(gè)小的需要注意的地方

獲取天氣信息

  • 獲取天氣信息的接口
  • 獲取天氣信息的城市
  • 獲取所在城市的城市碼

假如我們給多個(gè)人發(fā)送天氣情況,這幾個(gè)人來自不同的城市,那么我們不可能每次都要輸入城市名,然后查找城市碼,然后再訪問接口,獲取天氣情況,這樣會(huì)非常的麻煩,所以我們需要考慮將城市名跟城市碼一一對(duì)應(yīng)起來,說到一一對(duì)應(yīng),首先想到的數(shù)據(jù)結(jié)構(gòu)便是字典,所以我們可以將這些信息存入一個(gè)字典里,然后持久化到一個(gè)文件中,這樣便方便很多

首先我們獲取最新的 city 表,這個(gè)表是一個(gè) 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
 }
]

我們就簡(jiǎn)單的粘貼復(fù)制,放到一個(gè)空的列表中,如下所示,將所有的城市信息放到列表 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))

#測(cè)試是否能讀取
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()方法讀取文件,得到的內(nèi)容是一個(gè)列表,我們需要通過 eval()方法轉(zhuǎn)化成 dict 類型。

這是把 city_name 和 city_code 放到一個(gè)文件中的方法,另外我們也可以放到數(shù)據(jù)庫中,這里以 MySQL 為例,安裝 PyMySQL 模塊

import pymysql

db_parames = {
  'host': 'localhost',
  'user': 'root',
  'password': '123456',
  'database': 'city_code_info'
}
#連接數(shù)據(jù)庫
conn = pymysql.connect(**db_parames)

#創(chuàng)建游標(biāo)對(duì)象,增刪改查都在游標(biāo)上進(jìn)行
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)

#插入數(shù)據(jù)
with open('city_for_code.json','r+',encoding='utf-8') as f:
  origin_data = f.readlines()
  current_data = eval(origin_data[0])  #讀取的內(nèi)容是一個(gè)列表,且只包含一個(gè)元素
  #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()

執(zhí)行這個(gè) python 程序就可以將文件中的城市名跟城市碼存到庫中,當(dāng)然我們也可以直接獲取到城市名和城市碼,然后跳過文件持久化這一步,直接把這兩個(gè)字段取出存進(jìn)去,但是考慮著代碼要多練多寫,就多此一舉了一下。

下面是輸入城市名就能得到城市碼的代碼塊:

import pymysql

def get_city_code(city_name):
  db_parames = {
  'host': 'localhost',
  'user': 'root',
  'password': '123456',
  'database': 'city_code_info'
  }
  #連接數(shù)據(jù)庫
  conn = pymysql.connect(**db_parames)

  #創(chuàng)建游標(biāo)對(duì)象,增刪改查都在游標(biāo)上進(jìn)行
  cursor = conn.cursor()

  #創(chuàng)建查詢語句
  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!"

然后是根據(jù)輸入的城市碼來獲取天氣情況:

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 = '今日天氣預(yù)報(bào)' + '\n' \
        + '日期: ' + Dateymd + ' ' + Dateweek + ' ' + City + '\n' \
        + '天氣: ' + Weathertype + ' ' + Windfx + ' ' + Windf1 + ' ' + Weathernotice + '\n' \
        + '當(dāng)前溫度: ' + Weatherwendu + '℃' + '\n' \
        + '空氣濕度: ' + Weathershidu + '\n' \
        + '溫度范圍: ' + Weatherlow + '' + '~' + '' + Weatherhigh + '\n' \
        + '污染指數(shù): ' + 'PM2.5: ' + Weatherpm25 + ' ' + 'PM10: ' + Weatherpm10 + '\n' \
        + '空氣質(zhì)量: ' + Weatherquality + '\n' \
        + '日出時(shí)間: ' + Sunrise + '\n' \
        + '日落時(shí)間: ' + Sunset + '\n' \
        + '溫馨提示: ' + Weatherganmao
    else:
      which_day = day.get(num,'超出范圍')
      result = '\n' + which_day + ' ' + '天氣預(yù)報(bào)' + '\n' \
        + '日期: ' + Dateymd + ' ' + Dateweek + ' ' + City + '\n' \
        + '天氣: ' + Weathertype + ' ' + Windfx + ' ' + Windf1 + ' ' + Weathernotice + '\n' \
        + '溫度范圍: ' + Weatherlow + '' + '~' + '' + Weatherhigh + '\n' \
        + '日出時(shí)間: ' + Sunrise + '\n' \
        + '日落時(shí)間: ' + Sunset + '\n' \
        + '溫馨提示: ' + Weatherganmao
    weather_lst.append(result)
    weather_str = ''   #因?yàn)槟J(rèn)要輸出三天的天氣情況,所以我們需要?jiǎng)?chuàng)建一個(gè)空字符串,然后每迭代一次,就將天氣情況拼接到空字符串中。
    for msg in weather_lst:
      weather_str += msg + '\n'

  return weather_str

下面是發(fā)送微信消息

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"發(fā)送失敗")

然后我們還需要寫一個(gè)定時(shí)器,每隔一段時(shí)間便要發(fā)送一次

from threading import Timer

def auto_send():
  city_name = '設(shè)置要發(fā)送的城市'
  friend_list = ['要發(fā)送的人']

  for who in friend_list:
    send_wx(city_name,who)
  global timer
  timer = Timer(1,auto_send)
  timer.start()

最后執(zhí)行程序

if __name__ == '__main__':
  timer = Timer(1,auto_send)
  timer.start()

以上就是python獲取天氣接口給指定微信好友發(fā)天氣預(yù)報(bào)的詳細(xì)內(nèi)容,更多關(guān)于python獲取天氣接口的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實(shí)現(xiàn)AES加密,解密的兩種方法

    Python實(shí)現(xiàn)AES加密,解密的兩種方法

    這篇文章主要介紹了Python實(shí)現(xiàn)AES加密,解密的兩種方法,幫助大家更好的使用python加解密文件,感興趣的朋友可以了解下
    2020-10-10
  • 使用pytorch搭建AlexNet操作(微調(diào)預(yù)訓(xùn)練模型及手動(dòng)搭建)

    使用pytorch搭建AlexNet操作(微調(diào)預(yù)訓(xùn)練模型及手動(dòng)搭建)

    今天小編就為大家分享一篇使用pytorch搭建AlexNet操作(微調(diào)預(yù)訓(xùn)練模型及手動(dòng)搭建),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python機(jī)器學(xué)習(xí)基礎(chǔ)特征工程算法詳解

    python機(jī)器學(xué)習(xí)基礎(chǔ)特征工程算法詳解

    這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)基礎(chǔ)特征工程的算法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-11-11
  • Python并發(fā)編程協(xié)程(Coroutine)之Gevent詳解

    Python并發(fā)編程協(xié)程(Coroutine)之Gevent詳解

    這篇文章主要介紹了Python并發(fā)編程協(xié)程(Coroutine)之Gevent詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • Python supervisor強(qiáng)大的進(jìn)程管理工具的使用

    Python supervisor強(qiáng)大的進(jìn)程管理工具的使用

    這篇文章主要介紹了Python supervisor強(qiáng)大的進(jìn)程管理工具的使用,本文主要跟大家分享在類unix操作系統(tǒng)下supervisor的使用以及一些關(guān)于進(jìn)程的知識(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • PyCharm使用Docker鏡像搭建Python開發(fā)環(huán)境

    PyCharm使用Docker鏡像搭建Python開發(fā)環(huán)境

    這篇文章主要介紹了PyCharm使用Docker鏡像搭建Python開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • PyWebIO使用初體驗(yàn)之用Python寫網(wǎng)頁

    PyWebIO使用初體驗(yàn)之用Python寫網(wǎng)頁

    這篇文章主要介紹了PyWebIO使用初體驗(yàn)之用Python寫網(wǎng)頁的相關(guān)資料,PyWebIo是一個(gè)功能強(qiáng)大的Python第三方庫,可以使用Python語言輕松創(chuàng)建網(wǎng)頁,并且支持Flask、Django等Web框架,需要的朋友可以參考下
    2024-12-12
  • Python生成短uuid的方法實(shí)例詳解

    Python生成短uuid的方法實(shí)例詳解

    python的uuid都是32位的,比較長(zhǎng),處理起來效率比較低。這篇文章主要介紹了Python生成短uuid的方法,需要的朋友可以參考下
    2018-05-05
  • Python中經(jīng)常使用的代碼片段

    Python中經(jīng)常使用的代碼片段

    大家好,本篇文章主要講的是Python中經(jīng)常使用的代碼片段,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 星球大戰(zhàn)與Python之間的那些事

    星球大戰(zhàn)與Python之間的那些事

    闊別十年時(shí)光,全球矚目的第七部星球大戰(zhàn)電影《原力覺醒》將于2016年1月9日在國(guó)內(nèi)上映。它將重新燃起那段神秘的太空歲月與具有原力的宇宙時(shí)光。但是,星球大戰(zhàn)和Python編程語言又有什么關(guān)系呢?
    2016-01-01

最新評(píng)論

准格尔旗| 怀宁县| 开平市| 新巴尔虎右旗| 霍州市| 马龙县| 大冶市| 乌苏市| 桂阳县| 清苑县| 恩施市| 陇南市| 丹凤县| 定西市| 集安市| 女性| 深州市| 香港| 邯郸市| 临朐县| 双城市| 台东市| 阿勒泰市| 盐城市| 土默特左旗| 龙游县| 阿克苏市| 阿克陶县| 汪清县| 进贤县| 秀山| 桦南县| 合川市| 来宾市| 墨竹工卡县| 常山县| 喀什市| 龙门县| 公主岭市| 灵石县| 阜阳市|