1. 程式人生 > >【Python3爬蟲】自動查詢天氣並實現語音播報

【Python3爬蟲】自動查詢天氣並實現語音播報

步驟 req aid 識別 sts 博客 獲取本機ip tar 播放

一、寫在前面

之前寫過一篇用Python發送天氣預報郵件的博客,但是因為要手動輸入城市名稱,還要打開郵箱才能知道天氣情況,這也太麻煩了。於是乎,有了這一篇博客,這次我要做的就是用Python獲取本機IP地址,並根據這個IP地址獲取物理位置也就是我所在的城市名稱,然後用之前的辦法實現查詢天氣,再利用百度語音得到天氣預報的MP3文件,最後播放,這樣是不是就很方(tou)便(lan)了呢?

二、具體步驟

這次有四個py文件:get_ip.py,get_wather.py,get_mp3.py和main.py。其中get_ip.py實現了獲取本機ip地址和物理位置,get_wather.py實現了根據物理位置查詢天氣,get_mp3.py實現了調用百度語音API把文本轉化成MP3文件,main.py是我們需要運行的py文件。這裏由於查詢天氣用的是之前的方法,所以就不需要贅述了,主要說一下get_ip.py和get_mp3.py。

(1)get_ip.py

要獲取本機IP,這裏有一個很簡單的辦法,就是打開這個網頁:https://www.ip.cn/,打開之後就能看到我們的IP地址和所在地理位置信息了。因為我們可以請求一下這個網頁,然後對返回的結果進行一下解析,就能得到我們想要的結果了。代碼如下:

 1 """
 2 Version: Python3.5
 3 Author: OniOn
 4 Site: http://www.cnblogs.com/TM0831/
 5 Time: 2019/2/9 16:46
 6 """
 7 import re
 8 import requests
 9 
10 
11 # 獲取本機IP和地理位置
12
def get_ip(): 13 res = requests.get("http://www.ip.cn") 14 result = re.findall("<p>您現在的 IP:<code>(.*?)</code></p><p>所在地理位置:<code>(.*?)</code>", res.text) 15 ip, address = "", "" 16 if len(result): 17 ip = result[0][0] # IP地址 18 address = result[0][1].split(
)[0] # 地理位置 19 else: 20 print("Error!") 21 exit() 22 return ip, address

(2)get_mp3.py

這裏需要使用百度雲,沒有賬號的需要先註冊一下,然後搜索一下百度語音,再創建一個應用,如下:

技術分享圖片

這裏AppID、API Key和Secret Key在後面都需要用到,具體使用方法參見官方文檔。這裏還需要安裝一個第三方庫:baidu-aip,可以使用pip install baidu-aip進行下載安裝。

下面是一個調用百度語音接口的示例:

 1 from aip import AipSpeech
 2 
 3 """ 你的 APPID AK SK """
 4 APP_ID = 你的 App ID
 5 API_KEY = 你的 Api Key
 6 SECRET_KEY = 你的 Secret Key
 7 
 8 client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
 9 result = client.synthesis(你好百度, zh, 1, {
10     vol: 5,
11 })
12 
13 # 識別正確返回語音二進制 錯誤則返回dict
14 if not isinstance(result, dict):
15     with open(auido.mp3, wb) as f:
16         f.write(result)

其中synthesis方法的各參數含義如下:

技術分享圖片

有了這個例子,做起來就簡單多了,只需要將天氣預報的文本傳入進去就行了,然後我們可以根據自己喜好改變一下其他參數。代碼如下:

 1 """
 2 Version: Python3.5
 3 Author: OniOn
 4 Site: http://www.cnblogs.com/TM0831/
 5 Time: 2019/2/9 17:53
 6 """
 7 from aip import AipSpeech
 8 
 9 # 你的APP_ID,API_KEY,SECRET_KEY
10 APP_ID = ""
11 API_KEY = “"
12 SECRET_KEY = ""
13 
14 
15 # 獲取語音文件
16 def get_mp3(text):
17     client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
18 
19     result = client.synthesis(text, zh, 1, {"spd": 4, "vol": 6})
20 
21     # 識別正確返回語音二進制,錯誤則返回dict
22     if not isinstance(result, dict):
23         with open(weather.mp3, wb) as f:
24             f.write(result)
25     else:
26         print("Error!")
27         exit()

三、運行結果

首先是的代碼運行的結果,如下圖:

技術分享圖片

然後會生成一個weather.mp3文件:

技術分享圖片

最後會播放這個MP3文件。

完整代碼已上傳到GitHub!

【Python3爬蟲】自動查詢天氣並實現語音播報