百度统计API在Symfony2中需手动封装服务类,access_token须通过OAuth2流程获取并存储refresh_token以续期,siteId从百度统计后台获取;调用时需注意返回格式、日期格式(YYYYMMDD)和指标名大小写敏感。

百度统计API本身不依赖任何PHP框架,symfony2里调用它只需要标准HTTP请求 + 正确的access_token和siteId,不需要“配置”框架级集成——所谓“配置”,其实是手动封装一个服务类,避免每次都在控制器里重复写curl或guzzle逻辑。
怎么拿到百度统计API必需的 access_token 和 siteId?
这两个不是在symfony2里生成的,必须从百度统计后台手动获取:
-
siteId:登录百度统计 → 进入「网站列表」→ 点击目标站点 → 浏览器地址栏中siteId=xxx那段数字就是 -
access_token:需走OAuth2流程,不能直接在后台复制。步骤是:
① 去百度开发者中心创建应用,拿到client_id和client_secret;
② 用client_id拼出授权URL,手动登录百度账号并授权,拿到code;
③ 用code、client_id、client_secret向https://openapi.baidu.com/oauth/2.0/token发POST请求,返回JSON里的access_token字段才是有效token - 注意:
access_token有效期30天,refresh_token可用来续期——但symfony2项目里得自己存refresh_token(比如存在数据库或Redis),否则token过期就查不到数据
在 symfony2 中封装百度统计 API 客户端服务
别把API调用逻辑散落在控制器里。推荐新建一个服务类,例如BaiduTongjiClient,放在src/Acme/StatsBundle/Service/下:
class BaiduTongjiClient
{
private $httpClient;
private $accessToken;
private $siteId;
<pre class='brush:php;toolbar:false;'>public function __construct(HttpClientInterface $httpClient, $accessToken, $siteId)
{
$this->httpClient = $httpClient;
$this->accessToken = $accessToken;
$this->siteId = $siteId;
}
public function getReport($startDate, $endDate, $metrics = 'pv_count,visitor_count')
{
$url = 'https://api.baidu.com/json/tongji/v1/ReportData/getData';
$params = [
'access_token' => $this->accessToken,
'site_id' => $this->siteId,
'start_date' => $startDate,
'end_date' => $endDate,
'metrics' => $metrics,
'method' => 'overview/getData',
];
$response = $this->httpClient->request('POST', $url, [
'json' => $params,
]);
return json_decode($response->getContent(), true);
}}
百度热榜监控 | Baidu Hot Topics Monitor. 获取百度热搜榜、搜索趋势、关键词热度 | Get Baidu trending searches, trends, keyword popularity. 触发词:百度、热搜、baidu.
然后在services.yml里声明服务(注意替换占位符):
acme.stats.baidu_client:
class: Acme\StatsBundle\Service\BaiduTongjiClient
arguments:
- '@httplug.client'
- '%baidu_tongji.access_token%'
- '%baidu_tongji.site_id%'再把access_token和siteId写进parameters.yml(别硬编码!):
baidu_tongji:
access_token: "1.a6b7dbd428f731035f771b8d15063f61.86400.1292922000-2346678-124328"
site_id: 12345678调用时要注意的三个坑
百度统计API返回格式不统一,容易在symfony2里踩错:
- 错误响应不是HTTP状态码异常,而是返回
200+ JSON里带error_msg字段,比如"error_msg":"site_id is invalid"——必须检查返回体里的error_code是否为0,不能只看$response->getStatusCode() - 日期格式必须是
YYYYMMDD(如20260701),不支持2026-07-01或2026/07/01,传错直接返回空数组 - 指标名(
metrics)大小写敏感且有固定枚举值,比如pv_count对,PV_Count或pvCount就报错;完整可用指标见官方文档overview/getData接口说明页
真正麻烦的从来不是写几行HTTP请求,而是token续期、错误重试、指标拼接、分页拉取——这些都得自己补全。别指望有个现成Bundle能兜底,symfony2生态里没有维护良好的百度统计SDK。

















