You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中动态获取Pinterest API授权码?

实现Pinterest Ads API授权码自动获取方案

要实现授权码自动生成并读取,核心是用本地HTTP服务接收回调+无头浏览器自动完成授权流程,以下是具体实现步骤:

前置准备

  1. 在Pinterest开发者后台,将回调URI修改为本地可访问地址(例如http://localhost:8000/callback),确保与代码中配置一致。
  2. 安装依赖:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:23:28