一、寫在前面 之前寫過一篇用Python發送天氣預報郵件的博客,但是因為要手動輸入城市名稱,還要打開郵箱才能知道天氣情況,這也太麻煩了。於是乎,有了這一篇博客,這次我要做的就是用Python獲取本機IP地址,並根據這個IP地址獲取物理位置也就是我所在的城市名稱,然後用之前的辦法實現查詢天氣,再利用百 ...
一、寫在前面
之前寫過一篇用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!