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

Python使用requests庫實現(xiàn)調(diào)用外部API的實戰(zhàn)指南

 更新時間:2026年03月12日 08:47:20   作者:MarkHD  
API(應用程序編程接口)允許不同軟件之間相互通信,requests庫是Python中最優(yōu)雅、最常用的HTTP庫,下面我們就來看看Python如何使用requests庫實現(xiàn)調(diào)用外部API吧

一、RESTful API 基礎與 requests 庫簡介

1.1 什么是RESTful API

API(應用程序編程接口)允許不同軟件之間相互通信。RESTful API是目前最流行的API設計風格,它基于HTTP協(xié)議,使用URL定位資源,用HTTP方法(GET、POST、PUT、DELETE等)描述操作。

例如,一個提供天氣數(shù)據(jù)的API可能有一個端點:https://api.weather.com/v1/city/beijing?unit=celsius

通過向該URL發(fā)送GET請求,我們可以獲取北京的天氣信息。

1.2 requests庫:Python的HTTP客戶端

requests庫是Python中最優(yōu)雅、最常用的HTTP庫。它簡化了發(fā)送HTTP請求和處理響應的過程,讓開發(fā)者能夠?qū)W⒂跇I(yè)務邏輯。

安裝非常簡單:

pip install requests

一個最基本的GET請求示例:

import requests

response = requests.get('https://api.github.com')
print(response.status_code)  # 200
print(response.json())       # 解析JSON響應

二、requests庫核心用法詳解

在深入案例之前,我們先系統(tǒng)梳理一下requests庫的常用功能,這些將是所有API調(diào)用的基礎。

2.1 發(fā)送請求

GET請求:獲取資源

params = {'q': 'python', 'page': 1}
response = requests.get('https://api.github.com/search/repositories', params=params)

POST請求:創(chuàng)建資源(常用于提交數(shù)據(jù))

data = {'name': 'John', 'age': 30}
response = requests.post('https://httpbin.org/post', data=data)  # 表單格式
# 或者JSON格式
import json
response = requests.post('https://httpbin.org/post', json={'key': 'value'})

PUT/DELETE:更新/刪除資源,用法類似。

2.2 設置請求頭

許多API需要認證或指定內(nèi)容類型,通過headers參數(shù)設置:

headers = {
    'User-Agent': 'Mozilla/5.0',
    'Authorization': 'Bearer YOUR_TOKEN'
}
response = requests.get('https://api.example.com/data', headers=headers)

2.3 處理響應

  • response.status_code:HTTP狀態(tài)碼(200成功,404未找到,500服務器錯誤)
  • response.text:原始文本內(nèi)容
  • response.json():將JSON響應解析為Python字典/列表(最常用)
  • response.headers:響應頭
  • response.encoding:編碼方式

異常處理:使用response.raise_for_status()可以自動拋出HTTP錯誤異常。

2.4 超時與重試

網(wǎng)絡請求必須設置超時,防止程序卡死:

try:
    response = requests.get('https://api.example.com', timeout=5)  # 5秒超時
    response.raise_for_status()
except requests.exceptions.Timeout:
    print("請求超時")
except requests.exceptions.HTTPError as err:
    print(f"HTTP錯誤: {err}")

對于需要重試的場景,可以使用requests的適配器或第三方庫tenacity,但簡單場景可手動循環(huán)。

2.5 文件上傳與下載

上傳:用files參數(shù)

files = {'file': open('report.xlsx', 'rb')}
requests.post('https://httpbin.org/post', files=files)

下載:流式下載大文件

with requests.get('https://example.com/bigfile.zip', stream=True) as r:
    r.raise_for_status()
    with open('bigfile.zip', 'wb') as f:
        for chunk in r.iter_content(chunk_size=8192):
            f.write(chunk)

三、實戰(zhàn)案例一:調(diào)用天氣API獲取實時天氣

天氣API是最常見的免費API之一。以OpenWeatherMap為例,演示如何調(diào)用。

3.1 注冊并獲取API密鑰

訪問 OpenWeatherMap,注冊賬號后,在API Keys頁面獲取你的密鑰(例如:your_api_key)。

3.2 構建請求并解析數(shù)據(jù)

import requests

def get_weather(city, api_key):
    url = "http://api.openweathermap.org/data/2.5/weather"
    params = {
        'q': city,
        'appid': api_key,
        'units': 'metric',   # 使用攝氏度
        'lang': 'zh_cn'      # 返回中文天氣描述
    }
    
    try:
        response = requests.get(url, params=params, timeout=10)
        response.raise_for_status()
        data = response.json()
        
        # 提取關鍵信息
        city_name = data['name']
        weather_desc = data['weather'][0]['description']
        temp = data['main']['temp']
        feels_like = data['main']['feels_like']
        humidity = data['main']['humidity']
        
        return {
            'city': city_name,
            'weather': weather_desc,
            'temperature': temp,
            'feels_like': feels_like,
            'humidity': humidity
        }
    except requests.exceptions.RequestException as e:
        print(f"請求失敗: {e}")
        return None
    except KeyError as e:
        print(f"解析響應失敗,可能API返回錯誤: {e}")
        return None

# 使用示例
if __name__ == '__main__':
    api_key = 'your_api_key'  # 請?zhí)鎿Q為真實密鑰
    weather = get_weather('Beijing', api_key)
    if weather:
        print(f"{weather['city']}天氣:{weather['weather']}")
        print(f"溫度:{weather['temperature']}°C (體感{weather['feels_like']}°C)")
        print(f"濕度:{weather['humidity']}%")

輸出示例

北京天氣:晴
溫度:25°C (體感26°C)
濕度:45%

3.3 集成到自動化流程

假設我們之前實現(xiàn)了郵件自動發(fā)送功能,現(xiàn)在可以每天定時獲取天氣,并發(fā)送天氣日報郵件。代碼只需將獲取的天氣數(shù)據(jù)填入郵件正文即可。

四、實戰(zhàn)案例二:調(diào)用匯率API實現(xiàn)貨幣轉換

匯率數(shù)據(jù)更新頻繁,非常適合通過API獲取。以 exchangerate-api.com 為例,它提供免費、無需認證的匯率接口。

4.1 API介紹

端點:https://api.exchangerate-api.com/v4/latest/{base}

返回以base為基礎貨幣的實時匯率。

4.2 實現(xiàn)匯率轉換函數(shù)

import requests

def convert_currency(amount, from_currency, to_currency):
    url = f"https://api.exchangerate-api.com/v4/latest/{from_currency.upper()}"
    
    try:
        response = requests.get(url, timeout=10)
        response.raise_for_status()
        data = response.json()
        
        if to_currency.upper() not in data['rates']:
            print(f"不支持的貨幣: {to_currency}")
            return None
        
        rate = data['rates'][to_currency.upper()]
        converted = amount * rate
        return converted, rate
    except requests.exceptions.RequestException as e:
        print(f"匯率請求失敗: {e}")
        return None

# 示例:100美元兌換人民幣
result = convert_currency(100, 'USD', 'CNY')
if result:
    converted, rate = result
    print(f"100 USD = {converted:.2f} CNY (匯率: {rate})")

4.3 進階:處理多個貨幣對

可以封裝一個類,緩存匯率數(shù)據(jù)以減少請求頻率,或使用批量查詢。

這種能力在跨境電商、財務自動化腳本中非常實用。例如,自動讀取Excel中的外幣金額,轉換為本幣后生成報表。

五、實戰(zhàn)案例三:調(diào)用AI接口實現(xiàn)智能文本處理

近年來,AI接口如雨后春筍般涌現(xiàn)。以OpenAI GPT為例,展示如何調(diào)用AI生成文本。由于OpenAI的API需要付費且國內(nèi)訪問受限,我們也可以使用國內(nèi)平臺如百度文心一言、阿里通義千問等。這里以OpenAI風格為例,但代碼稍作修改即可適配其他平臺。

5.1 準備工作

注冊OpenAI并獲取API密鑰。設置環(huán)境變量或直接在代碼中配置(注意安全)。

5.2 封裝AI調(diào)用函數(shù)

import requests
import json

def ask_ai(prompt, api_key, model="gpt-3.5-turbo"):
    url = "https://api.openai.com/v1/chat/completions"
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}"
    }
    data = {
        "model": model,
        "messages": [{"role": "user", "content": prompt}],
        "temperature": 0.7
    }
    
    try:
        response = requests.post(url, headers=headers, json=data, timeout=30)
        response.raise_for_status()
        result = response.json()
        # 提取AI回復內(nèi)容
        reply = result['choices'][0]['message']['content']
        return reply
    except requests.exceptions.RequestException as e:
        print(f"AI請求失敗: {e}")
        return None
    except (KeyError, json.JSONDecodeError) as e:
        print(f"解析AI響應失敗: {e}")
        return None

# 示例
api_key = "your_openai_key"
reply = ask_ai("用一句話解釋什么是RESTful API", api_key)
if reply:
    print("AI回復:", reply)

5.3 將AI能力融入自動化

想象一下:每天收到一堆客戶反饋郵件,你可以用AI自動總結要點,然后發(fā)送給團隊?;蛘?,監(jiān)控系統(tǒng)報警時,讓AI分析日志并生成解決方案建議。AI接口為自動化注入了“智能”。

六、將API調(diào)用集成到自動化流程中

前面幾天的學習我們實現(xiàn)了郵件自動發(fā)送與接收(Day 55-58)、OCR文字識別(Day 51-54)?,F(xiàn)在有了API調(diào)用能力,我們可以將這些模塊組合成一個強大的自動化系統(tǒng)。

示例:智能郵件助手

  • 接收郵件(使用imap_tools)獲取未讀郵件。
  • 解析郵件內(nèi)容,如果是特定指令(如“查詢天氣”),提取城市信息。
  • 調(diào)用天氣API獲取該城市實時天氣。
  • 調(diào)用AI接口將天氣數(shù)據(jù)組織成友好的回復文本。
  • 自動回復郵件(使用smtplib)將結果發(fā)送給用戶。

關鍵代碼片段(偽代碼):

from imap_tools import MailBox, AND
import smtplib
from email.mime.text import MIMEText

# 省略天氣和AI函數(shù)定義

def process_emails():
    with MailBox('imap.qq.com').login('user@qq.com', 'pwd', 'INBOX') as mailbox:
        for msg in mailbox.fetch(AND(seen=False, subject='天氣查詢')):
            # 假設郵件正文包含城市名
            city = msg.text.strip()
            weather = get_weather(city, WEATHER_API_KEY)
            if weather:
                prompt = f"請將以下天氣信息整理成一段友好的文字:{weather}"
                reply_text = ask_ai(prompt, AI_API_KEY)
            else:
                reply_text = "抱歉,未查到該城市的天氣。"
            
            # 發(fā)送回復
            send_email(msg.from_, "Re: 天氣查詢", reply_text)
            mailbox.move([msg.uid], 'PROCESSED')

這樣,一個半智能的客服機器人就誕生了!

七、最佳實踐與注意事項

安全存儲API密鑰

絕對不要將密鑰硬編碼在代碼中,尤其是當代碼會公開時。推薦使用環(huán)境變量或配置文件。

import os
API_KEY = os.environ.get('WEATHER_API_KEY')

或使用.env文件配合python-dotenv。

速率限制與禮貌

大多數(shù)免費API都有請求頻率限制(如每分鐘60次)。應合理控制請求間隔,避免被封??梢栽诖a中添加sleep或使用令牌桶算法。

錯誤處理

網(wǎng)絡請求可能因各種原因失?。撼瑫r、4xx/5xx錯誤、JSON解析失敗。務必使用try/except捕獲異常,并考慮重試機制。

超時設置

始終設置timeout參數(shù),防止程序因等待響應而永久掛起。

緩存數(shù)據(jù)

對于變化不頻繁的數(shù)據(jù)(如匯率,雖實時更新但可接受幾分鐘延遲),可以緩存一段時間以減少API調(diào)用。

使用會話對象

如果需要對同一主機發(fā)送多個請求,使用requests.Session()可以復用TCP連接,提高性能。

with requests.Session() as session:
    session.headers.update({'Authorization': f'Bearer {TOKEN}'})
    resp1 = session.get('https://api.example.com/data1')
    resp2 = session.get('https://api.example.com/data2')

到此這篇關于Python使用requests庫實現(xiàn)調(diào)用外部API的實戰(zhàn)指南的文章就介紹到這了,更多相關Python requests調(diào)用外部API內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python使用paramiko模塊實現(xiàn)ssh遠程登陸上傳文件并執(zhí)行

    python使用paramiko模塊實現(xiàn)ssh遠程登陸上傳文件并執(zhí)行

    使用paramiko,ssh遠程登陸,長傳文件并執(zhí)行。其中用到了多線程和隊列,paramiko是用python語言寫的一個模塊,遵循SSH2協(xié)議,支持以加密和認證的方式,進行遠程服務器的連接。
    2014-01-01
  • Python數(shù)據(jù)類型之Number數(shù)字操作實例詳解

    Python數(shù)據(jù)類型之Number數(shù)字操作實例詳解

    這篇文章主要介紹了Python數(shù)據(jù)類型之Number數(shù)字操作,結合實例形式詳細分析了Python數(shù)字類型的概念、功能、分類及常用數(shù)學函數(shù)相關使用技巧,需要的朋友可以參考下
    2019-05-05
  • 如何快速一次性卸載所有python包(第三方庫)呢

    如何快速一次性卸載所有python包(第三方庫)呢

    這篇文章主要介紹了如何快速一次性卸載所有python包(第三方庫)呢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Selenium獲取登錄Cookies并添加Cookies自動登錄的方法

    Selenium獲取登錄Cookies并添加Cookies自動登錄的方法

    這篇文章主要介紹了Selenium獲取登錄Cookies并添加Cookies自動登錄的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • selenium在scrapy中的使用代碼

    selenium在scrapy中的使用代碼

    本文給大家分享selenium在scrapy中的使用代碼,使用selenium可以很好的幫助我們獲取一些重要數(shù)據(jù)信息,本文通過代碼給大家詳細介紹,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • Django 靜態(tài)文件配置過程詳解

    Django 靜態(tài)文件配置過程詳解

    這篇文章主要介紹了Django 靜態(tài)文件配置過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • python讀取文件指定行內(nèi)容實例講解

    python讀取文件指定行內(nèi)容實例講解

    在本篇文章里小編給大家整理的是關于python讀取文件指定行內(nèi)容實例講解,需要的朋友們可以參考下。
    2020-03-03
  • 利用Python實現(xiàn)數(shù)值積分的方法

    利用Python實現(xiàn)數(shù)值積分的方法

    這篇文章主要介紹了利用Python實現(xiàn)數(shù)值積分。本文主要用于對比使用Python來實現(xiàn)數(shù)學中積分的幾種計算方式,并和真值進行對比,加深大家對積分運算實現(xiàn)方式的理解
    2022-02-02
  • Python進階之高級用法詳細總結

    Python進階之高級用法詳細總結

    今天帶各位小伙伴學習一下Python高級語法,主要有Lambda表達式,map函數(shù),filter函數(shù),reduce函數(shù),三大推導式等,文中有非常詳細的介紹,需要的朋友可以參考下
    2021-05-05
  • PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)

    PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)

    這篇文章主要介紹了PyQt5.6+pycharm配置以及pyinstaller生成exe,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06

最新評論

伊宁县| 高陵县| 日喀则市| 东阳市| 海盐县| 九江县| 张家界市| 湟源县| 衡阳县| 塔城市| 汪清县| 元阳县| 扬州市| 尚志市| 隆昌县| 辉县市| 高州市| 都安| 青铜峡市| 囊谦县| 喀什市| 丹江口市| 平顺县| 北碚区| 庆安县| 乐清市| 临清市| 延川县| 集贤县| 宣威市| 克什克腾旗| 中西区| 鄂州市| 安国市| 即墨市| 中方县| 山丹县| 汪清县| 邵东县| 天峨县| 仁化县|