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

YouTube频道统计匹配异常求助:API调用后数据重复问题

解决YouTube Data API统计字段重复问题

调用YouTube Data API时,首次获取视频片段数据,二次调用获取多个视频统计数据并整合到原循环后,存入pandas DataFrame发现播放量、点赞量等统计字段出现重复值。问题出在始终取response_2['items'][0],但移除[0]会报错,以下是修正方案:

问题根源

原代码每次固定取统计API返回结果的第一个视频数据,导致所有视频复用同一组统计值;同时统计数据未与对应的视频片段数据关联,直接移除[0]会因response_2['items']是列表类型,无法直接访问statistics字段而报错。

修正思路

  1. 先批量收集所有目标视频的片段数据和对应的video_id,存储到列表中
  2. 将所有需要查询的video_id批量传给统计API,一次获取所有统计数据
  3. 把统计数据转换为以video_id为键的字典,方便快速匹配对应视频
  4. 遍历片段数据列表,通过video_id匹配对应的统计数据,最终整合为完整数据集

修正后的代码

import requests
import pandas as pd

# 替换为你的API密钥
API_KEY = "YOUR_API_KEY"

# 第一步:收集所有视频的基础片段数据
snippet_data = []
for video in response['items']:
    if video['id']['kind'] == "youtube#video": 
        video_id = video['id']['videoId']
        video_title = video['snippet']['title']
        video_description = video['snippet']['description']
        channel_title = video['snippet']['channelTitle']
        date_upload = video['snippet']['publishedAt'].split('T')[0]
        
        # 将单条视频数据存入列表
        snippet_data.append({
            'video_id': video_id,
            'title': video_title,
            'description': video_description,
            'channel_title': channel_title,
            'upload_date': date_upload
        })

# 第二步:批量获取统计数据
# 提取所有需要查询的video_id
video_ids = [item['video_id'] for item in snippet_data]
# 构建统计API请求URL
video_stats_url = f"https://www.googleapis.com/youtube/v3/videos?part=statistics&key={API_KEY}"
for vid in video_ids:
    video_stats_url += f"&id={vid}"

# 发送请求并解析响应
response_2 = requests.get(video_stats_url).json()

# 将统计数据转为字典,key为video_id,value为统计信息
stats_dict = {}
for item in response_2['items']:
    vid = item['id']
    stats = item['statistics']
    stats_dict[vid] = {
        'view_count': int(stats.get('viewCount', 0)),
        'like_count': int(stats.get('likeCount', 0)),
        'favorite_count': int(stats.get('favoriteCount', 0)),
        'comment_count': int(stats.get('commentCount', 0))
    }

# 第三步:整合基础数据与统计数据
final_data = []
for item in snippet_data:
    vid = item['video_id']
    # 匹配对应统计数据,无数据则用默认值填充
    stats = stats_dict.get(vid, {
        'view_count': 0,
        'like_count': 0,
        'favorite_count': 0,
        'comment_count': 0
    })
    # 合并两类数据
    final_item = {**item, **stats}
    final_data.append(final_item)

# 转为pandas DataFrame
df = pd.DataFrame(final_data)
print(df.head())

关键修改说明

  • 批量收集基础数据:避免循环内重复操作,统一存储所有视频的基础信息
  • 统计数据字典化:通过video_id作为键,实现O(1)时间复杂度的匹配,彻底解决重复值问题
  • 安全取值:用get()方法获取统计字段,避免部分视频缺失字段导致报错
  • 数据对应整合:确保每条视频的基础数据与统计数据一一匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:05:20