You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Steam Web API无法获取部分应用用户reviews 问题咨询

解决Steam Web API返回{"success":2}无法获取评论的问题

我之前也踩过这个坑,Steam Web API的success:2官方文档确实没给出明确说明,但根据社区实践和踩坑经验,这个响应码大多和目标应用的API访问限制有关——比如你提到的UFO: Afterlight - Old Version这类旧版本/分支版本应用,Steam可能没有为它们的评论数据开放API接口,或者这些版本的评论没有被API索引到(哪怕社区页面能正常显示)。

下面给你几个可行的解决方案:

1. 确认应用ID是否为主应用ID

很多旧版本/分支版本的应用ID其实是主应用的子分支,你可以查一下UFO: Afterlight的主应用ID,用主ID替换当前的分支ID再调用API试试。比如有些游戏的测试版、旧版本会用独立的子ID,但评论数据其实归属于主应用ID。

2. 直接爬取Steam社区评论页面

既然社区页面能看到评论,那我们可以绕过Web API,直接爬取社区页面的内容。你已经在用Requests和BeautifulSoup,正好可以用上。这里给你一个简单的实现示例:

import requests
from bs4 import BeautifulSoup
import time

def fetch_steam_community_reviews(app_id, max_pages=3):
    base_url = "https://steamcommunity.com/app/{}/reviews/?p={}&browsefilter=mostrecent&filterLanguage=all"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
    }
    all_reviews = []
    
    for page in range(1, max_pages+1):
        url = base_url.format(app_id, page)
        response = requests.get(url, headers=headers)
        if response.status_code != 200:
            print(f"请求第{page}页失败,状态码:{response.status_code}")
            break
        
        soup = BeautifulSoup(response.text, "html.parser")
        review_cards = soup.find_all("div", class_="apphub_Card")
        
        if not review_cards:
            print("没有更多评论了")
            break
        
        for card in review_cards:
            review_data = {}
            # 提取评论标题(推荐/不推荐)
            title = card.find("div", class_="title")
            review_data["rating"] = title.get_text(strip=True) if title else "未知"
            # 提取评论内容
            content = card.find("div", class_="apphub_CardTextContent")
            if content:
                # 移除时间标签,只保留评论正文
                date_tag = content.find("div", class_="date_posted")
                if date_tag:
                    date_tag.extract()
                review_data["content"] = content.get_text(strip=True, separator=" ")
            # 提取发布时间
            date = card.find("div", class_="date_posted")
            review_data["date"] = date.get_text(strip=True) if date else "未知"
            
            all_reviews.append(review_data)
        
        # 加个延迟,避免触发反爬
        time.sleep(1)
    
    return all_reviews

# 调用示例,替换成目标应用的ID
target_app_id = "123456"  # 替换成UFO: Afterlight - Old Version的实际ID
reviews = fetch_steam_community_reviews(target_app_id)
for idx, rev in enumerate(reviews, 1):
    print(f"评论{idx}: {rev['rating']} | {rev['date']}")
    print(f"内容: {rev['content']}\n")

注意事项:

  • 一定要加User-Agent请求头,否则Steam会直接拒绝请求
  • 加入请求延迟(比如time.sleep(1)),避免触发Steam的反爬机制
  • 如果需要获取更多评论,可以调整max_pages参数,或者判断页面是否还有更多内容

3. 检查API请求参数是否完整

再确认一下你的API请求参数是否正确,比如官方的appreviews接口需要的必要参数:

  • json=1:指定返回JSON格式
  • filter:可选值recent/updated,控制评论排序
  • language:指定评论语言,比如all获取所有语言评论

比如正确的API请求URL应该类似:

https://store.steampowered.com/appreviews/{appid}?json=1&filter=recent&language=all&num_per_page=20

如果参数缺失,也可能导致返回success:2的错误。

总的来说,success:2本质是API无法返回目标应用的评论数据,对于旧版本/分支版本应用,爬取社区页面是最可靠的替代方案。

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

火山引擎 最新活动