You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Python API求助:获取AccessToken并提取第三方接口数据

Python实现第三方API数据提取完整方案

作为Python API初学者,你遇到的问题很常见——咱们一步步来,先搞定Token获取,再请求目标数据。我帮你写了完整的代码,包含登录拿Token、数据请求,还有基础的错误处理,方便你调试:

import requests
import json

def get_auth_token(uid, password):
    """登录接口,获取Token ID"""
    login_url = "https://api.Asw.com/api/auth.json"  # 用JSON格式返回,处理更方便
    payload = {
        "uid": uid,
        "password": password
    }
    try:
        response = requests.post(login_url, data=payload)
        response.raise_for_status()  # 触发HTTP错误(比如401、500)
        token_data = response.json()
        # 假设返回的JSON里Token字段是"TokenID",如果实际字段名不同,记得修改这里
        token_id = token_data.get("TokenID")
        if not token_id:
            raise ValueError("登录响应中未找到Token ID")
        print(f"成功获取Token,有效期24小时:{token_id}")
        return token_id
    except requests.exceptions.RequestException as e:
        print(f"登录请求失败:{str(e)}")
        return None
    except ValueError as e:
        print(f"Token解析失败:{str(e)}")
        return None

def get_weather_data(token_id, points):
    """请求船舶轨迹/定点气象数据"""
    data_url = "https://api.Asw.com/api/v1/hires-weather-on-track.json"  # 用JSON格式返回
    headers = {
        "Authorization": f"AswWebApi {token_id}"
    }
    # 因为内容类型是application/x-www-form-urlencoded,需要把JSON转成字符串作为表单参数
    payload = {
        "point": json.dumps(points)
    }
    try:
        response = requests.post(data_url, headers=headers, data=payload)
        response.raise_for_status()
        weather_data = response.json()
        print("成功获取气象/轨迹数据")
        return weather_data
    except requests.exceptions.RequestException as e:
        print(f"数据请求失败:{str(e)}")
        return None

if __name__ == "__main__":
    # 账号信息
    USER_ID = "trial"
    PASSWORD = "aaw3r5lL"
    
    # 示例点位列表(最多100个,根据实际需求修改)
    sample_points = [
        {"lat": 31.2304, "lon": 121.4737},  # 上海
        {"lat": 23.1291, "lon": 113.2644}   # 广州
    ]
    
    # 第一步:获取Token
    token = get_auth_token(USER_ID, PASSWORD)
    if not token:
        print("无法获取Token,终止程序")
        exit()
    
    # 第二步:请求数据
    result = get_weather_data(token, sample_points)
    if result:
        # 这里可以添加数据处理、保存的逻辑
        print("数据预览:", json.dumps(result, indent=2))

关键细节说明:

  • 登录接口:用data=payload传递表单参数,选择.json后缀让返回值更易处理;如果需要XML,把URL改成https://api.Asw.com/api/auth.xml,然后用response.text解析。
  • 数据请求
    • 请求头必须携带Authorization,格式是AswWebApi 你的TokenID,注意空格不能少。
    • point参数是JSON格式的点位列表,因为内容类型是application/x-www-form-urlencoded,所以要先用json.dumps()把列表转成字符串再传递。
  • 错误处理:代码里加了raise_for_status()来捕获HTTP状态码错误(比如401未授权、400参数错误),还有Token解析失败的判断,方便你定位问题。

如果运行时遇到错误,比如返回401,先检查账号密码是否正确;如果返回400,检查点位格式是否符合要求(比如lat/lon的范围、点位数量不超过100)。

内容的提问来源于stack exchange,提问作者user8231331

火山引擎 最新活动