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

无法在Google Cloud Function部署含Polygon库的Python脚本求解决

问题解决与部署方案

一、先解决构建错误(ERROR: failed to build...)

你遇到的构建错误和Polygon支持无关,大概率是依赖未正确声明导致的。Cloud Function部署时会根据requirements.txt安装依赖,你需要明确添加Polygon的Python SDK依赖:

创建requirements.txt文件,内容如下:

polygon-api-client>=1.14.0
python-dateutil>=2.8.2

二、适配Cloud Function的代码调整

你的代码需要修改为符合Cloud Function触发规范的结构,同时优化全局变量的使用(避免冷启动或并发问题)。以下是适配Pub/Sub触发的版本(匹配你的定时触发需求):

from polygon import RESTClient
import json
from typing import cast
from urllib3 import HTTPResponse
import datetime
import os

def get_stocks_data(event, context):
    # 从环境变量读取API密钥,避免硬编码敏感信息
    api_key = os.getenv("POLYGON_API_KEY")
    client = RESTClient(api_key=api_key, trace=False)

    maang_companies = ["META", "AAPL", "AMZN", "GOOGL", "NFLX"]
    stock_data = {}
    
    today = datetime.date.today()
    one_day_prior = today - datetime.timedelta(days=1)
    one_day_prior_str = one_day_prior.strftime("%Y-%m-%d")

    for stock in maang_companies:
        aggs = cast(
            HTTPResponse,
            client.get_aggs(
                stock,
                1,
                "day",
                one_day_prior_str,
                one_day_prior_str,
                raw=True
            ),
        )

        data = json.loads(aggs.data)
        stock_data[stock] = data
    
    # 可根据需求扩展:写入Cloud Storage/BigQuery、发送通知等
    print(json.dumps(stock_data, indent=2))
    return "Data fetched successfully"

代码调整说明:

  • 入口函数改为get_stocks_data(event, context),符合Pub/Sub触发的函数签名要求
  • 用环境变量存储Polygon密钥,避免代码泄露敏感信息
  • 将client和stock_data移到函数内部,避免全局变量在冷启动时的状态冲突

三、部署与触发配置

  1. 部署Cloud Function:
    使用gcloud命令行(或GCP控制台)部署:

    gcloud functions deploy get_stocks_data \
        --runtime python311 \
        --trigger-topic YOUR_PUBSUB_TOPIC_NAME \
        --set-env-vars POLYGON_API_KEY=你的Polygon密钥
    

    替换YOUR_PUBSUB_TOPIC_NAME为你创建的Pub/Sub主题名称。

  2. 配置Cloud Scheduler定时触发:

    • 在GCP控制台创建Cloud Scheduler任务,选择Pub/Sub作为目标,指定上述创建的主题
    • 设置调度时间为午夜(Cron表达式示例:0 0 * * *,对应UTC时间午夜,可根据你的时区调整)

四、额外注意事项

  • 确保Cloud Function的服务账号拥有Pub/Sub订阅权限,默认网络配置即可访问Polygon公网API
  • 如果需要持久化数据,可在函数中添加代码将stock_data写入Cloud Storage或BigQuery
  • 测试时可手动发布Pub/Sub消息触发函数,通过Cloud Function日志排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:55:01