Python+API打造一個終端天氣預(yù)報工具
一個真正實用、優(yōu)雅、能日常用的 Python 小工具!
希望效果預(yù)覽
$ python weather.py 北京
?? 北京
?? 多云 28°C
?? 北風(fēng) 3級 ?? 濕度 45%
?? 更新時間:2025-07-02 14:00
不過 這個改了 url 換一個 直接使用 免費 api
import requests import sys from rich import print from rich.console import Console def get_coords(city): # geocoding 用 nominatim(OpenStreetMap 無 KEY) r = requests.get( "https://geocode.maps.co/search", params={"q": city} ) data = r.json() if not data: raise Exception("城市未找到") return data[0]["lat"], data[0]["lon"] def get_weather(lat, lon): r = requests.get( "https://api.open-meteo.com/v1/forecast", params={"latitude": lat, "longitude": lon, "current_weather": True} ) return r.json()["current_weather"] def main(): if len(sys.argv) < 2: print("[red]? 請?zhí)峁┏鞘忻?,例如:python weather.py 北京[/]") return city = sys.argv[1] try: lat, lon = get_coords(city) cw = get_weather(lat, lon) console = Console() console.print(f"?? [bold magenta]{city}[/]") console.print(f"?? 溫度:{cw['temperature']}°C,風(fēng)速:{cw['windspeed']}km/h,風(fēng)向:{cw['winddirection']}°") except Exception as e: console = Console() console.print(f"[red]? 錯誤:{e}[/]") if __name__ == "__main__": main()
1. 項目結(jié)構(gòu)
weather/
├── weather.py # 主文件
├── icons.py # 圖標映射
└── config.py # API KEY 配置
2. 注冊天氣 API(和風(fēng)天氣)
- 官網(wǎng):dev.qweather.com
- 注冊后 → 創(chuàng)建應(yīng)用 → 獲取「KEY」
- 使用免費接口即可(每分鐘 60 次)
3. config.py 示例
API_KEY = "你的和風(fēng)天氣 key"
4. 圖標文件:icons.py
weather_icons = { "晴": "??", "多云": "?", "陰": "??", "小雨": "???", "中雨": "???", "大雨": "???", "暴雨": "???", "雷陣雨": "??", "雪": "??" }
5. 核心代碼:weather.py
import requests, sys from config import API_KEY from icons import weather_icons def get_city_code(city): url = f"https://geoapi.qweather.com/v2/city/lookup?location={city}&key={API_KEY}" r = requests.get(url) data = r.json() if "location" in data: return data["location"][0]["id"] return None def get_weather(city_id): url = f"https://devapi.qweather.com/v7/weather/now?location={city_id}&key={API_KEY}" r = requests.get(url) return r.json() def display(city, weather): now = weather["now"] text = now["text"] icon = weather_icons.get(text, "") print(f"?? {city}") print(f"{icon} {text} {now['temp']}°C") print(f"?? {now['windDir']} {now['windScale']}級 ?? 濕度 {now['humidity']}%") print(f"?? 更新時間:{weather['updateTime'][11:16]}") if __name__ == "__main__": if len(sys.argv) < 2: print("?請輸入城市名:python weather.py 北京") sys.exit(1) city = sys.argv[1] city_id = get_city_code(city) if not city_id: print("? 城市不存在") sys.exit(1) weather = get_weather(city_id) display(city, weather)
6. 運行方式
python weather.py 上海
可選優(yōu)化方向
功能 | 說明 |
---|---|
多語言支持 | 支持中英文顯示 |
添加顏色輸出 | 使用 colorama 彩色打印 |
支持多日天氣 | 請求 3~7 天接口數(shù)據(jù) |
打包 CLI 工具 | 用 argparse 支持參數(shù)解析、封裝成命令行工具 |
支持定時更新日報 | 搭配 schedule 寫入 report_xxx.txt |
到此這篇關(guān)于Python+API打造一個終端天氣預(yù)報工具的文章就介紹到這了,更多相關(guān)Python天氣預(yù)報內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中基礎(chǔ)的socket編程實戰(zhàn)攻略
Python擁有內(nèi)置的socket模塊,可以用簡潔明了的代碼來進行socket通信操作,這里我們就為大家整理了一份Python中基礎(chǔ)的socket編程實戰(zhàn)攻略,需要的朋友可以參考下.2016-06-06python?PyAutoGUI實現(xiàn)自動化鼠標鍵盤等常用操作
這篇文章主要介紹了python?PyAutoGUI實現(xiàn)自動化鼠標鍵盤等常用操作使用實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12使用PyTorch處理多維特征輸入數(shù)據(jù)的完美實現(xiàn)
在機器學(xué)習(xí)和深度學(xué)習(xí)領(lǐng)域,我們經(jīng)常會面對具有多維特征輸入的問題,這種情況出現(xiàn)在各種應(yīng)用中,包括圖像識別、自然語言處理、時間序列分析等,PyTorch是一個強大的深度學(xué)習(xí)框架,在本篇博客中,我們將探討如何使用PyTorch來處理多維特征輸入數(shù)據(jù)2023-10-10Python?async+request與async+aiohttp實現(xiàn)異步網(wǎng)絡(luò)請求探索
這篇文章主要介紹了Python?async+request與async+aiohttp實現(xiàn)異步網(wǎng)絡(luò)請求探索,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10Python中JSON轉(zhuǎn)換的全面指南與最佳實踐
JSON是現(xiàn)代應(yīng)用程序中最流行的數(shù)據(jù)交換格式之一,Python通過內(nèi)置的json模塊提供了強大的JSON處理能力,本文將深入探討Python中的JSON轉(zhuǎn)換,包括基本用法、高級特性以及最佳實踐,需要的朋友可以參考下2025-03-03python機器學(xué)習(xí)創(chuàng)建基于規(guī)則聊天機器人過程示例詳解
這篇文章主要為大家介紹了python實現(xiàn)基于規(guī)則聊天機器人的過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2021-11-11Python虛擬機字節(jié)碼教程之裝飾器實現(xiàn)詳解
在本篇文章當(dāng)中主要給大家介紹在?cpython?當(dāng)中一些比較常見的字節(jié)碼,從根本上理解?python?程序的執(zhí)行。在本文當(dāng)中主要介紹一些?python?基本操作的字節(jié)碼,并且將從字節(jié)碼的角度分析函數(shù)裝飾器的原理2023-04-04python使用urllib2實現(xiàn)發(fā)送帶cookie的請求
這篇文章主要介紹了python使用urllib2實現(xiàn)發(fā)送帶cookie的請求,涉及Python操作cookie的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04