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

来源:https://www.cnblogs.com/TM0831/archive/2019/02/10/10357900.html
-Advertisement-
Play Games

一、寫在前面 之前寫過一篇用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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 單一職責原則(Single Responsibility Principle),簡稱SRP。 定義:一個類只負責一件事情; 說明:類的單一職責原則受多重因素制約,實際實現起來,需要考慮項目工期、成本、人員技術水平等 使用:介面一定要做到單一職責原則,類的設計儘量做到單一職責原則 擴展:單一職責原則同 ...
  • 困擾 Intellij idea是一款非常強大的編輯器,可以很方便地幫我們創建maven項目,有用過的同學應該都深有體會,但我們經常會遇到一個困擾,那就是用idea創建maven項目時,速度很慢,往往需要好幾分鐘的時間,有時甚至會卡住,主要原因是創建maven項目時預設是下載求網路上的一個文件arc ...
  • 如果這是第二次看到我的文章,歡迎右側掃碼訂閱我喲~ 👉 本文長度為3012字,建議閱讀8分鐘。 堅持原創,每一篇都是用心之作~ 下麵的這個場景你可能會覺得很熟悉(Z哥我又要出演了): Z哥:@All 兄弟姐妹們,這次我這邊有個需求需要給「商品上架」增加一道審核,會影響到大家和我交互的介面。大家抽空 ...
  • 1 初步認識 適配器模式的定義 將一個類的介面轉成客戶期望的另外一個介面。適配器模式使得原本由於介面不匹配而不能一起工作的那些類可以一起工作。 大白話 適配器模式就像旅行插座轉換器(圖1)、Type-c轉VGA轉介面(圖4)一樣。 圖1. 圖片來源網路 圖2. 圖片來源網路 去過香港迪拜等的同學都知 ...
  • Nginx 介紹:高性能的http伺服器和反向代理(請求通過反向代理之後,訪問伺服器端的邏輯)如下圖所示: Ningx的作用 負載均衡 所謂負載就是伺服器各項技術所承受的壓力 均衡,平均分配壓力(物理平均,邏輯平均) 通過輪訓機制來達到物理均衡 動靜分離 伺服器可以處理動態資源(tomcat jsp ...
  • 前言:流程實現基本流轉功能外,通常也需要調用外部事件,用於和業務系統的交互,同時存儲一些流程變數,用於追蹤和記錄業務數據變化對流程流轉的影響。 1. 流程事件 流程執行過程中,伴隨各種事件的發生,而且是存在於整個流程的生命周期,即從流程啟動一直到流程結束的整個過程都有事件發生。這些事件的發生,業務系 ...
  • 定義: 裝飾模式是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。 結構:(書中圖,侵刪) 一個被裝飾介面類:從具體類中抽象出來,擁有用於修飾的一個公共方法 若幹被裝飾具體類;繼承於被裝飾介面類 一個抽象裝飾類:繼承於被裝飾介面類 ...
  • [toc] 前言 前陣子突發奇想,想學習下SpringMVC的源碼,於是打算用idea搭建一個簡易的maven版SSM案例,也就是SpringMVC+Spring+MyBatis+Maven,因為之前創建過一些Spring的小demo,相關的軟體環境已經搭建完成,本以為搭建一個入門級的SSM項目應該 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...