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

如何调度Python脚本实现OneDrive文件上传并部署至服务器?

解决方案:将Excel同步脚本部署到Heroku并集成OneDrive

1. 注册Azure AD应用获取API凭证

要在服务器端访问OneDrive,必须通过Microsoft Graph API完成授权,步骤如下:

  • 登录Azure门户,进入Azure Active Directory → 应用注册 → 新注册
  • 自定义应用名称,支持账户类型选任何组织目录中的账户和个人Microsoft账户(适配个人OneDrive),重定向URI留空(服务器端用无用户交互的客户端凭证流)
  • 注册完成后,记录页面上的客户端ID和租户ID
  • 进入证书和密码 → 新客户端密码,设置过期时间后生成密钥,务必保存生成的客户端密钥(仅显示一次)
  • 进入API权限 → 添加权限 → Microsoft Graph → 应用权限,添加Files.ReadWrite.All权限(可根据需求选择更细的权限范围),最后点击授予管理员同意

2. 修改Python脚本适配Heroku与Graph API

整理依赖文件

在项目根目录创建requirements.txt,添加所需依赖:

requests
msgraph-core
python-dotenv
pandas  # 若脚本需处理Excel逻辑则添加

核心代码调整示例

替换原本地操作OneDrive的代码,改用Graph API实现文件上传:

import os
import requests
from dotenv import load_dotenv
from msgraph.core import GraphClient

# 加载环境变量
load_dotenv()

# 初始化Graph客户端
client = GraphClient(
    credential={
        'client_id': os.getenv('CLIENT_ID'),
        'client_secret': os.getenv('CLIENT_SECRET'),
        'tenant_id': os.getenv('TENANT_ID'),
        'scopes': ['https://graph.microsoft.com/.default']
    }
)

def download_excel(url, save_path):
    # 实现你的Excel下载逻辑
    response = requests.get(url)
    with open(save_path, 'wb') as f:
        f.write(response.content)

def upload_to_onedrive(local_file_path, onedrive_folder_name, file_name):
    # 查询目标文件夹ID(可预先手动获取后硬编码,减少重复请求)
    folder_response = client.get(f'/me/drive/root:/{onedrive_folder_name}')
    folder_id = folder_response.json()['id']
    
    # 上传文件到指定文件夹
    with open(local_file_path, 'rb') as f:
        client.put(
            f'/me/drive/items/{folder_id}:/{file_name}:/content',
            data=f,
            headers={'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}
        )

if __name__ == '__main__':
    # 下载Excel到Heroku临时目录(Heroku仅/tmp目录可写)
    temp_file = '/tmp/daily_excel.xlsx'
    download_excel('你的Excel文件下载URL', temp_file)
    
    # 上传至OneDrive指定文件夹
    upload_to_onedrive(temp_file, '每日数据备份', f'当日数据_{pd.Timestamp.now().strftime("%Y%m%d")}.xlsx')
    
    # 清理临时文件
    os.remove(temp_file)

3. 配置Heroku环境变量

进入Heroku控制台对应应用 → 设置 → 配置变量,添加以下字段:

  • CLIENT_ID:Azure应用的客户端ID
  • CLIENT_SECRET:Azure应用的客户端密钥
  • TENANT_ID:Azure应用的租户ID

4. 设置定时任务

  • 在Heroku控制台的资源页面搜索并安装Scheduler插件
  • 进入Scheduler页面点击添加任务,设置执行频率(如每天固定时间),命令填写python your_script.py(替换为你的脚本文件名)

5. 部署与测试

  • 通过Git推送代码到Heroku:
git init
heroku create your-app-name
git add .
git commit -m "Initial deploy"
git push heroku main
  • 手动触发脚本测试:heroku run python your_script.py,通过heroku logs --tail查看运行日志排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:50:29