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




