用 Instagram 评论 API 做红人和舆情分析

帖子下面的评论是最真实的"用户原声":粉丝喜欢什么、吐槽什么、对一次合作/上新的反应如何,全在里面。人工看只能看到零星案例;用程序把成千上万条评论抓下来打分,你得到的是一条能驱动决策的趋势线。本文用 Instagram Cheapest API 的评论接口,带你做红人评估和舆情分析。数据实时、未缓存,每千次请求低至 $0.10

整体流程

  1. 拿到目标账号的帖子和短码(user_media)
  2. 按短码抓每条帖子的评论(media_comments)
  3. 对评论做情绪打分
  4. 聚合成可看的指标:按帖子、按时间、按主题

第一步:拿到帖子的短码

评论接口按帖子短码(code)取数据。先用 user/{username} 拿到 user_id,再用 user_media 拿帖子列表和它们的 code

import requests

API_HOST = "instagram-cheapest.p.rapidapi.com"
BASE = f"https://{API_HOST}/api/v1/instagram"
API_KEY = "你的_RAPIDAPI_KEY"
HEADERS = {"x-rapidapi-host": API_HOST, "x-rapidapi-key": API_KEY}

def get_json(path, params=None):
    r = requests.get(f"{BASE}/{path}", headers=HEADERS, params=params or {})
    r.raise_for_status()
    return r.json()

profile = get_json("user/some_brand")
user_id = profile.get("user_id")           # 以原始 JSON 为准
posts = get_json("user_media", {"user_id": user_id}).get("items", [])
codes = [p.get("code") for p in posts if p.get("code")]

第二步:分页抓取评论

media_comments?code= 返回某条帖子的评论,用 after 游标翻页(游标取响应里的 page_info.end_cursor)。

def all_comments(code, max_pages=10):
    texts, after = [], None
    for _ in range(max_pages):
        params = {"code": code}
        if after:
            params["after"] = after
        data = get_json("media_comments", params)
        for c in data.get("comments", []):   # 以原始 JSON 为准
            if c.get("text"):
                texts.append(c["text"])
        page = data.get("page_info", {})
        if not page.get("has_next_page"):
            break
        after = page.get("end_cursor")
    return texts

max_pages 兜底——爆款帖子可能有几万条评论,做情绪分析通常取有代表性的样本就够,不必全量,既省请求又省钱。

第三步:情绪打分

英文评论可以用 VADER(对短社媒文本友好);如果评论里中文多、或者要识别反讽、混合情绪,建议把评论批量丢给大模型(LLM)打分,顺便还能抽取主题。

# 英文基线:VADER(pip install nltk)
from nltk.sentiment import SentimentIntensityAnalyzer
sia = SentimentIntensityAnalyzer()

def score(texts):
    out = []
    for t in texts:
        s = sia.polarity_scores(t)["compound"]  # -1(负) ~ +1(正)
        label = "正面" if s > 0.05 else "负面" if s < -0.05 else "中性"
        out.append({"text": t, "score": s, "label": label})
    return out

scored = score(all_comments("ABC1234XYZ_"))
pos = sum(1 for s in scored if s["label"] == "正面")
print(f"{pos}/{len(scored)} 条评论为正面")

第四步:识别刷量(评论真实性)

评估红人时,这一步最值钱:真实粉丝的评论内容多样、切题;而刷出来的互动往往是清一色单个表情、"很棒🔥"、"互关一下"之类的模板和垃圾评论。几个低成本高信号的检查:

SPAM = {"互关", "follow back", "dm me", "加我", "私信"}

def authenticity(texts):
    if not texts:
        return None
    total = len(texts)
    emoji_only = sum(1 for t in texts if t and not any(ch.isalnum() for ch in t))
    spam = sum(1 for t in texts if any(p in t.lower() for p in SPAM))
    dup = total - len(set(t.strip().lower() for t in texts))
    return {
        "纯表情占比": round(emoji_only / total * 100, 1),
        "垃圾评论占比": round(spam / total * 100, 1),
        "重复评论占比": round(dup / total * 100, 1),
    }

如果大量评论是纯表情、重复或满屏"互关",那这条帖子的互动大概率是刷出来的——哪怕评论"数量"很好看。把这个和粉丝数/点赞数对比,就能在投放前判断一个红人值不值得合作。

能做成什么

费用大概多少

分析一个品牌最近 30 条帖子、每条抓 ~3 页评论,大约 1 次资料 + 3 页帖子 + 30×3 ≈ 94 次请求,也就一分多钱。各档价格:

给请求加 fields 参数,只取评论文本和时间,能把原始 JSON 裁小,守住每月 10 GB 流量额度。

合规提醒

本 API 只返回 公开的 Instagram 数据。对公开评论做情绪/舆情分析是常见用途,但你需自行遵守 Instagram 服务条款及适用隐私法规(GDPR、CCPA),尤其是存储评论文本和用户名时。与 Meta/Instagram 无隶属或背书关系。

小结

评论是最丰富又最被低估的公开数据源。用 user_media 找帖子、media_comments 抓评论,再做情绪打分和真实性检查,你就能把一堆零散评论变成可决策的洞察。每千次低至 $0.10,监测几十个品牌/红人也就几美元一个月。基础用法可先看 用 Python 获取用户资料和帖子Instagram API 入门

在 RapidAPI 上免费开始 →

合规说明:本 API 仅返回公开的 Instagram 数据。你需自行遵守 Instagram 服务条款及适用隐私法规(GDPR/CCPA)。与 Meta/Instagram 无隶属或背书关系。

今天就开始构建

Basic 免费档每月 30 次请求,无需承诺。

在 RapidAPI 上开始