【立即体验】微博实时数据API
想要微博数据做舆情分析?别再用爬虫了
“从2014年到现在的微博数据,我们想做个完整的舆情回顾。”——当市场部提出这个需求时,技术团队的第一反应是:写爬虫。
但爬微博不是一件容易的事:反爬机制、封IP、验证码……一个月后,爬虫可能已经挂了三次。
而微博实时数据API提供了一条捷径:官方数据接口,支持2014年至今的全量数据,分钟级更新。本文教你如何通过Java SDK快速接入。
Key Takeaways
– 典枢数据通过Java SDK调用微博数据API,不是curl或爬虫
– 每次调用2元,最多返回100条数据;1000条数据分页调10次,共20元
– 支持2014年至今的微博全量数据,超过12年的历史回溯能力
– SDK安装三步走:下载→解压到Maven仓库→pom引入依赖
– 返回字段丰富:微博内容、互动数据、用户信息(含MCN)、多媒体、位置等
定价说明
| 计费项 | 说明 |
|---|---|
| 每次调用 | 2元 |
| 每次最多返回 | 100条数据 |
| 需要1000条 | 分页调10次,总成本20元 |
| 关键词太严格 | 不足100条也按1次计费(2元),建议优化关键词 |
对比一下:
– 自己写爬虫:服务器成本 + 开发时间 + 维护成本,一个月可能上千元
– 用API:2元/次,1000条数据20元
第一步:SDK安装
1.1 下载SDK包
从典枢数据平台下载 dianshu-api-sdk 包。
1.2 安装到Maven仓库
将 tech.zip 解压,把 tech 目录放入Maven本地仓库(~/.m2/repository/)。
1.3 pom.xml引入依赖
<dependency>
<groupId>tech.yeez</groupId>
<artifactId>dianshu-api-sdk</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
第二步:调用代码
2.1 基础调用示例
import tech.yeez.dianshu.sdk.DSAPIClient;
import tech.yeez.dianshu.sdk.model.*;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
// 设置appCode(基本信息页面获取)
DSAPIContext context = new DSAPIContext("你的appCode");
// 设置apiCode(API详情页可查看)
String apiCode = "Y5N3SsiHvt2XwtDeb75MqYFtDcTAvjGK3NF8d1YeDsF";
DSAPIClient apiClient = new DSAPIClient(apiCode, context);
PostRequestDTO dto = new PostRequestDTO();
List<ParamInfoDTO> bodyParams = new ArrayList<>();
bodyParams.add(new ParamInfoDTO("startTime", "1779381079"));
bodyParams.add(new ParamInfoDTO("endTime", "1779427884"));
bodyParams.add(new ParamInfoDTO("keyword", "品牌监测"));
bodyParams.add(new ParamInfoDTO("page", "1"));
dto.setBodyParams(bodyParams);
String result = apiClient.doPost(dto);
System.out.println("接口返回结果:" + result);
}
}
2.2 分页获取更多数据
public class BatchFetch {
public static void main(String[] args) {
DSAPIContext context = new DSAPIContext("你的appCode");
String apiCode = "Y5N3SsiHvt2XwtDeb75MqYFtDcTAvjGK3NF8d1YeDsF";
DSAPIClient apiClient = new DSAPIClient(apiCode, context);
// 需要500条数据,分5页获取
// 成本:5次 × 2元 = 10元
for (int page = 1; page <= 5; page++) {
PostRequestDTO dto = new PostRequestDTO();
List<ParamInfoDTO> bodyParams = new ArrayList<>();
bodyParams.add(new ParamInfoDTO("keyword", "品牌监测"));
bodyParams.add(new ParamInfoDTO("startTime", "1776643200"));
bodyParams.add(new ParamInfoDTO("endTime", "1779244800"));
bodyParams.add(new ParamInfoDTO("page", String.valueOf(page)));
dto.setBodyParams(bodyParams);
String result = apiClient.doPost(dto);
System.out.println("第" + page + "页结果:" + result);
}
System.out.println("共获取500条数据,总成本10元");
}
}
2.3 参数说明
| 参数 | 类型 | 说明 | 建议 |
|---|---|---|---|
keyword |
String | 搜索关键词,最多100字符 | 宽泛关键词获得更多结果 |
startTime |
String | 开始时间,Unix秒级时间戳 | 单次最多7天范围 |
endTime |
String | 结束时间,Unix秒级时间戳 | 按周分段查询 |
page |
String | 页码,从1开始 | 每页最多100条 |
微博特有返回字段说明
📄 基本信息
| 字段 | 类型 | 说明 |
|---|---|---|
| title | String | 微博标题 |
| content | String | 微博正文 |
| raw_content | String | 未处理的原始内容 |
| content_xml | String | 带HTML的正文 |
| mid | String | 系统生成的文章MID |
| wtype | Integer | 类型:1原创/2转发/7评论/8弹幕 |
| device | String | 发布设备 |
📊 微博互动指标(与其他平台不同)
| 字段 | 类型 | 说明 |
|---|---|---|
| like_count | Integer | 点赞数 |
| repost_count | Integer | 转发数(微博核心指标) |
| reply_count | Integer | 评论数 |
| share_count | Integer | 分享数 |
| visit_count | Integer | 阅读量/播放数 |
| involved_count | Integer | 参与人数 |
| bullet_count | Integer | 弹幕数(B站场景) |
注意:微博的 repost_count(转发数) 是最核心的互动指标之一,与其他平台的分享数不同。
👤 用户信息(含MCN)
| 字段 | 类型 | 说明 |
|---|---|---|
| name | String | 用户名 |
| nickname | String | 用户昵称 |
| followers_count | Integer | 粉丝数 |
| friends_count | Integer | 关注数 |
| mcn_name | String | MCN机构名称 |
| ip_region | Array | IP属地(微博特色字段) |
| verified | Integer | 是否认证 |
| verified_type | Integer | 认证类型 |
| level | Integer | 用户等级 |
| description | String | 用户简介 |
| province | String | 所在省份 |
| city | String | 所在城市 |
用户认证类型
| 数值 | 说明 |
|---|---|
| -1 | 普通用户 |
| 0 | 名人 |
| 1 | 政府 |
| 2 | 企业 |
| 3 | 媒体 |
| 200 | 初级达人 |
| 220 | 中高级达人 |
📺 多媒体
| 字段 | 类型 | 说明 |
|---|---|---|
| pic_urls | Array | 图片链接列表 |
| video_urls | Array | 视频链接列表 |
| face_img | String | 封面图URL |
| duration | Integer | 视频长度(秒) |
| ocr | String | 图片OCR文字识别 |
| music_id | String | 背景音乐ID |
📍 位置信息
| 字段 | 类型 | 说明 |
|---|---|---|
| geo.lat | Float | 纬度 |
| geo.lon | Float | 经度 |
| place | String | 签到位置 |
🔁 原文与转发
| 字段 | 类型 | 说明 |
|---|---|---|
| pid | String | 上一级信息ID(转发/评论) |
| repost_source | String | 文章来源/转载来源 |
| retweeted | Object | 原始文章/主贴信息 |
异常处理
| 状态码 | 含义 | 处理方式 |
|---|---|---|
| 400 | 参数错误 | 检查请求参数 |
| 401 | 认证失败 | 确认appCode |
| 403 | 权限不足 | 检查apiCode权限 |
| 406 | 编码格式错误 | 检查Accept-Encoding |
| 429 | 请求过频(QPS:1) | 实现退避重试 |
| 500 | 服务端异常 | 稍后重试 |
调用成本测算
| 场景 | 数据量 | 调用次数 | 成本 |
|---|---|---|---|
| 舆情监控(每天1次) | 最多100条/天 | 30次/月 | 60元/月 |
| 舆情监控(每天5页) | 最多500条/天 | 150次/月 | 300元/月 |
| 历史回溯(一个月数据) | 约3000条 | 30次 | 60元 |
| 历史回溯(半年数据) | 约18000条 | 180次 | 360元 |
相比之下,传统舆情监测服务的月费通常在3000-20000元区间。根据 Forrester 的分析,超过70%的企业在部署API驱动的数据采集方案后,数据获取成本降低了60%以上。
QPS限制说明
每秒最多1次请求。如果需要大量数据,建议:
– 异步处理:在代码中实现队列机制
– 分批执行:每小时执行一批
– 时间分散:将不同关键词的查询分散在不同时间段
常见问题
Q1:微博数据最早能查到什么时候?
2014年。这意味着你有超过12年的微博数据可以回溯,适合做舆情事件的完整复盘和长期趋势分析。
Q2:SDK和爬虫有什么区别?
爬虫需要处理反爬、封IP、验证码等问题,维护成本高。SDK是官方接口,稳定可靠,1次调用2元。
Q3:repost_count和share_count有什么区别?
repost_count:微博的”转发”数,是微博生态中最核心的传播指标share_count:分享到其他平台的次数
Q4:用户信息的mcn_name字段有什么用?
mcn_name 字段标识了用户所属的MCN机构。这个字段对达人筛选和合作评估非常有价值——你可以直接看到哪些达人属于哪个MCN,方便对接合作。
Q5:单次查询拿不满100条怎么办?
如果关键词较严格导致返回数据不足100条,建议:
– 使用更宽泛的关键词
– 扩大时间范围(不超过7天)
– 用逗号组合多个关键词
总结
接入微博实时数据API只需三步:下载SDK → 配置Maven → 写几行Java代码。2元/次,最多拿100条数据,2014年至今的全量数据都能查。
和爬虫比:API稳定、省心、便宜。
和传统舆情服务比:API灵活、自主、低成本。
下一步行动:
1. 在典枢数据获取appCode和apiCode
2. 下载并安装SDK
3. 运行示例代码
【立即体验】微博实时数据API
参考资料:
– Stack Overflow – API Integration Best Practices
– Forrester – Social Media Data Collection Research
– Maven官方文档 – 依赖管理