如何在Python中动态获取Pinterest API授权码?
实现Pinterest Ads API授权码自动获取方案
要实现授权码自动生成并读取,核心是用本地HTTP服务接收回调+无头浏览器自动完成授权流程,以下是具体实现步骤:
前置准备
- 在Pinterest开发者后台,将回调URI修改为本地可访问地址(例如
http://localhost:8000/callback),确保与代码中配置一致。 - 安装依赖:
pip install flask requests playwright playwright install chromium
完整代码实现
from flask import Flask, request import requests from playwright.sync_api import sync_playwright import threading # 配置参数,替换为你的实际信息 CLIENT_ID = "你的Client ID" CLIENT_SECRET = "你的Client Secret" REDIRECT_URI = "http://localhost:8000/callback" SCOPE = "ads:read" PINTEREST_USERNAME = "你的Pinterest账号" PINTEREST_PASSWORD = "你的Pinterest密码" TOKEN_URL = "https://api.pinterest.com/v5/oauth/token" # 全局变量存储授权码,用Event实现线程同步 auth_code = None code_received = threading.Event() app = Flask(__name__) @app.route('/callback') def callback(): global auth_code # 从回调URL中提取授权码 auth_code = request.args.get('code') if auth_code: code_received.set() # 通知主线程已获取到code return "授权码已获取,可关闭此页面" return "未获取到授权码,请重试" def run_flask(): app.run(port=8000, debug=False, use_reloader=False) def auto_authorize(): with sync_playwright() as p: # 调试时可设置headless=False,直观查看浏览器操作 browser = p.chromium.launch(headless=True) page = browser.new_page() # 构造授权URL auth_url = f"https://www.pinterest.com/oauth/?client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&scope={SCOPE}&response_type=code" page.goto(auth_url) # 输入账号密码并提交登录 page.wait_for_selector('input[type="email"]').fill(PINTEREST_USERNAME) page.wait_for_selector('input[type="password"]').fill(PINTEREST_PASSWORD) page.click('button[type="submit"]') # 点击授权按钮(若页面元素更新,需调整选择器) page.wait_for_selector('button:has-text("Allow access")').click() # 等待回调完成后关闭浏览器 code_received.wait() browser.close() def get_access_token(): # 用授权码请求Access Token payload = { "grant_type": "authorization_code", "code": auth_code, "redirect_uri": REDIRECT_URI, "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET } response = requests.post(TOKEN_URL, data=payload) return response.json() if response.status_code == 200 else {"error": response.json()} if __name__ == "__main__": # 启动Flask服务线程 flask_thread = threading.Thread(target=run_flask) flask_thread.start() # 执行自动授权流程 auto_authorize() # 获取并打印Access Token token_info = get_access_token() print("Access Token信息:") print(token_info) # 停止Flask服务 func = request.environ.get('werkzeug.server.shutdown') if func: func()
关键说明
- 线程同步:通过
threading.Event实现Flask服务与授权流程的同步,确保拿到授权码后再请求Token。 - 页面适配:如果Pinterest页面元素更新,需要调整代码中的CSS选择器(比如登录按钮、授权按钮的定位逻辑)。
- 安全提示:不要硬编码账号密码,建议用环境变量或加密配置文件存储;若账号开启两步验证,需额外添加验证码输入逻辑,或使用Pinterest应用密码。
内容的提问来源于stack exchange,提问作者Ishank lakhmani
相关产品推荐
相关产品推荐

