如何提取URL中code参数值并传入Python函数及获取Foursquare access_token
提取URL中code参数并换取Foursquare access_token的实现方案
一、通用提取URL中code参数的方法
要提取URL里的code=xxx参数其实很简单,Python标准库urllib.parse就有现成的工具,比自己写正则靠谱多了,能自动处理各种URL编码的情况。步骤如下:
- 先用
urlparse把URL拆分成各个组成部分(比如查询参数、片段部分等) - 再用
parse_qs解析查询参数,直接拿到code的值
给你个通用的函数示例:
from urllib.parse import urlparse, parse_qs def extract_code_from_url(url): # 拆分URL的结构 parsed_url = urlparse(url) # 解析查询参数,返回的是字典,每个参数值都是列表(应对可能的重复参数) query_params = parse_qs(parsed_url.query) # 取出code参数,取第一个值就行(通常code只会出现一次) code = query_params.get('code', [None])[0] return code
调用这个函数拿到code之后,直接把变量传给你需要的Python函数就搞定了。
二、针对Foursquare的具体实现
你给出的Foursquare返回链接里,末尾的# = 是URL的片段部分,完全不影响查询参数的解析,直接用上面的方法提取code就行。接下来要换取access_token,按照Foursquare的认证流程,需要向他们的token端点发送POST请求,带上code、你的客户端ID、密钥还有重定向URI这些参数。
完整的代码示例给你写好了:
from urllib.parse import urlparse, parse_qs import requests def get_foursquare_access_token(auth_url, client_id, client_secret, redirect_uri): # 第一步:从认证链接里提取code parsed_url = urlparse(auth_url) query_params = parse_qs(parsed_url.query) code = query_params.get('code', [None])[0] if not code: raise ValueError("哎,这个URL里没找到有效的code参数啊") # 第二步:向Foursquare请求access_token token_url = "https://foursquare.com/oauth2/access_token" payload = { 'client_id': client_id, 'client_secret': client_secret, 'grant_type': 'authorization_code', 'code': code, 'redirect_uri': redirect_uri } response = requests.post(token_url, data=payload) response.raise_for_status() # 如果请求出错会直接抛出异常,方便排查 return response.json() # 调用的时候替换成你自己的信息就行 auth_url = 'http://www.example.net/auth?code=Z0NJ55C4BUX4DIMNCHRSVSIIPBEBD4TGOD45J3IZNVNVAIFZ# = ' your_client_id = "你的Foursquare客户端ID" your_client_secret = "你的Foursquare客户端密钥" your_redirect_uri = "你在开发者平台设置的重定向URI" access_token_result = get_foursquare_access_token(auth_url, your_client_id, your_client_secret, your_redirect_uri) print("拿到的access_token:", access_token_result.get('access_token'))
记得把代码里的占位符替换成你自己在Foursquare开发者平台创建应用时的实际信息哦。
内容的提问来源于stack exchange,提问作者Biashara Employers
相关产品推荐
相关产品推荐

