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

Ubuntu环境下Python脚本调用Affectiva API及MongoDB存储问题求助

解决Affectiva API调用与MongoDB存储问题

嘿,我来帮你搞定这两个问题——先把Affectiva的API调用理顺,再把分析结果存进MongoDB。咱们一步步来:

一、Affectiva API的正确打开方式

你现在用requests.get直接访问的方式不对,Affectiva Cloud API是通过API密钥认证,并且需要用POST请求提交分析任务(因为视频分析是异步的,得先创建任务再轮询结果)。

1. 先做准备工作

  • 去Affectiva开发者平台注册/登录,获取你的专属API密钥(这是认证的关键,别用用户名密码直接请求)
  • 确保要分析的视频能被Affectiva访问:如果是本地视频,得先传到公开存储(比如AWS S3);如果是YouTube视频,直接用公开的视频URL就行

2. 修正后的API调用代码

下面是完整的任务提交+结果轮询代码,替换你现有的片段就行:

import requests
import json
import time
from pymongo import MongoClient  # 后面存MongoDB要用

# 替换成你的Affectiva API密钥
AFFECTIVA_API_KEY = "你的API密钥"
BASE_API_URL = "https://api.affectiva.com/v4"

# 要分析的视频URL(比如公开的YouTube链接)
target_video_url = "https://www.youtube.com/watch?v=xxxxxxx"

# 1. 提交分析任务
auth_headers = {
    "Authorization": f"Bearer {AFFECTIVA_API_KEY}",
    "Content-Type": "application/json"
}

task_payload = {
    "url": target_video_url,
    "tasks": ["emotion"]  # 指定要执行的情感分析任务
}

# 发起POST请求创建任务
try:
    create_task_res = requests.post(f"{BASE_API_URL}/analyze", headers=auth_headers, json=task_payload)
    create_task_res.raise_for_status()  # 请求失败直接抛出异常
except requests.exceptions.RequestException as e:
    print(f"创建任务失败: {e}")
    exit(1)

task_id = create_task_res.json()["id"]
print(f"分析任务已创建,ID: {task_id}")

# 2. 轮询任务状态,直到完成
task_status = "processing"
while task_status in ["queued", "processing"]:
    time.sleep(10)  # 每10秒查一次状态,别太频繁
    try:
        status_res = requests.get(f"{BASE_API_URL}/analyze/{task_id}", headers=auth_headers)
        status_res.raise_for_status()
    except requests.exceptions.RequestException as e:
        print(f"查询任务状态失败: {e}")
        exit(1)
    
    task_data = status_res.json()
    task_status = task_data["status"]
    print(f"当前任务状态: {task_status}")

# 3. 获取最终分析结果
if task_status == "completed":
    analysis_result = task_data["results"]
    print("分析结果获取成功!")
else:
    print(f"任务执行失败,状态: {task_status}")
    exit(1)

二、把JSON结果存进MongoDB

接下来咱们把拿到的Affectiva分析结果存入MongoDB,很简单:

1. 先装依赖

在Ubuntu终端里跑这个命令安装MongoDB的Python驱动:

pip install pymongo

2. 连接MongoDB并存储数据

在上面的代码末尾加上这段,就能把结果存进去了:

# 连接本地MongoDB(默认端口27017)
try:
    mongo_client = MongoClient("mongodb://localhost:27017/")
    # 创建或选择数据库
    db = mongo_client["affectiva_emotion_db"]
    # 创建或选择集合(相当于SQL里的表)
    collection = db["video_analysis"]
except Exception as e:
    print(f"连接MongoDB失败: {e}")
    exit(1)

# 给结果加一些元信息(方便后续查询,可选)
analysis_result["video_url"] = target_video_url
analysis_result["task_id"] = task_id
analysis_result["created_time"] = time.time()

# 插入文档到MongoDB
insert_result = collection.insert_one(analysis_result)
print(f"结果已成功存入MongoDB,文档ID: {insert_result.inserted_id}")

三、踩坑提示

  • 认证失败:检查API密钥是否正确,Authorization头的格式必须是Bearer 你的密钥,别写错
  • 任务一直processing:视频太大或者Affectiva服务器忙,多等会儿;如果是私有视频,得确保Affectiva能访问到这个资源
  • MongoDB连不上:先检查本地MongoDB服务有没有启动(终端跑sudo systemctl start mongod),或者连接地址是不是错了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:14:48