如何使用Azure定时器函数触发运行自定义Python脚本?
Azure Python定时器触发器自定义代码放置方案
你在main函数里标注#is this where my function goes?的位置是完全正确的,只要补全自定义函数的导入/定义、修正代码错误即可正常触发执行。
完整可运行的__init__.py示例
import datetime import logging import os import pandas as pd import requests # 补全缺失的依赖导入 from hubspot import HubSpot # 根据你实际使用的analytics库补充对应导入 import analytics import azure.functions as func # 自定义业务函数统一放在main函数外 def HubspotIngest(): df = pd.DataFrame() print(9) # 密钥从Azure函数的环境变量读取,不要硬编码 hubspot_key = os.getenv("HUBSPOT_API_KEY") api_client = HubSpot(api_key=hubspot_key) x = requests.get('替换为你实际的请求地址') data = x.json() for i in range(0, len(data['objects'])): Id = data['objects'][i]['id'] sent = data['objects'][i]['publishDate'] From = data['objects'][i]['fromName'] subject = data['objects'][i]['subject'] analytics.track('Newsletter', {'datasource': 'hubspot', 'timestamp': datetime.datetime.now(),'id': Id, 'sent':sent, 'from': From, 'subject': subject}) df2 = {'datasource': 'hubspot', 'id': Id, 'sent':sent, 'from': From, 'subject': subject} # 修正原有笔误:df1改为df2,dfappend改为df.append df = df.append(df2, ignore_index = True) def main(mytimer: func.TimerRequest) -> None: utc_timestamp = datetime.datetime.utcnow().replace( tzinfo=datetime.timezone.utc).isoformat() # 此处调用自定义业务函数的位置完全正确 HubspotIngest() if mytimer.past_due: logging.info('The timer is past due!') logging.info('Python timer trigger function ran at %s', utc_timestamp)
配套配置要求
- 你现有的
function.json配置可正常使用,当前设置的触发规则为每天UTC时间0点执行,如果需要调整触发时间直接修改schedule的cron表达式即可。 - 必须在函数项目根目录的
requirements.txt里添加所有用到的依赖,示例:
azure-functions pandas requests hubspot-api-client # 补充你用到的analytics相关依赖包名
- 密钥
HUBSPOT_API_KEY需要在Azure门户的函数应用→配置→应用程序设置里添加,不要直接写在代码里避免泄露。
原有代码的错误修正点
- 原来的
dfappend(df1, ignore_index = True)是笔误,正确写法是df.append(df2, ignore_index = True) - 缺失
HubSpot、analytics相关的依赖导入 - 重复导入了
datetime包 - 存在密钥硬编码风险
内容的提问来源于stack exchange,提问作者NandaPanda
相关产品推荐
相关产品推荐

