批量查詢影片觀看日誌
更新時間:2025-01-14 16:21:46
介面描述
1、通过自然月批量获取视频观看日志
2、从播放行为产生到数据可查询的间隔时间为1~2小时
3、响应参数消耗流量(flowSize字段)的计算依赖于CDN日志,为了保证数据完整性,流量数据需要间隔一个自然日才会生成
4、接口URL中的{userid}为点播账号userid,具体参考【获取密钥】
5、接口URL中的{month}为查询月份,格式:yyyyMM
6、接口支持https协议
介面URL
http://api.polyv.net/v2/viewlog/{userid}/monthly/{month}
請求方式
GET
介面限制
1、介面同時支援HTTP、HTTPS,建議使用HTTPS以確保介面安全,介面呼叫有頻率限制,詳細請查看
請求參數描述
| 參數名 | 必選 | 類型 | 說明 |
|---|---|---|---|
| ptime | true | Long | 當前時間的毫秒級時間戳,3分鐘內有效 |
| sign | true | String | 簽名,為40位大寫的SHA1值,生成簽名的secretkey金鑰作為通訊資料安全的關鍵資訊,嚴禁儲存在用戶端直接使用,所有API都必須透過客戶自己伺服器中轉呼叫POLYV伺服器取得回應資料【詳見簽名生成規則】 |
| month | true | Integer | 查詢月份資料,格式:yyyyMM,例如:202101 |
| numPerPage | false | Integer | 每一頁的大小,預設為99 |
| pageNum | false | Integer | 第幾頁,預設為1 |
| start | false | String | 查詢開始日期,格式:yyyy-MM-dd,例如:2021-01-01 |
| end | false | String | 查詢結束日期,格式:yyyy-MM-dd,例如:2021-01-05 |
| vid | false | String | 影片id,當影片id為空時,查詢該使用者所有影片的日誌 |
| sessionId | false | String | 使用者自訂id |
| currentDay | false | String | 月內某一天的資料,格式:yyyy-MM-dd,例如:2021-01-01 |
範例
http://api.polyv.net/v2/viewlog/1b448be323/monthly/202104?currentDay=2021-04-07&month=202104&sign=504AD715A14CE68DA568B2935953A1796994B3D1&numPerPage=2&ptime=1617852294166&pageNum=1
回應參數描述
| 參數名 | 類型 | 說明 |
|---|---|---|
| code | Integer | 回應狀態碼,200為成功返回,非200為失敗【詳見全域錯誤說明】 |
| status | String | 回應狀態文字資訊 |
| message | String | 回應描述資訊,當code為400或500時,輔助描述錯誤原因 |
| data | Array | 回應成功時返回日誌詳細資訊【詳見data欄位說明】 |
| total | Integer | 總記錄數 |
data欄位說明
| 參數名 | 類型 | 說明 |
|---|---|---|
| playId | String | 表示此次播放動作的id |
| userId | String | POLYV使用者ID,與保利威官網一致,取得路徑:官網->登入->點播(API介面) |
| videoId | String | 影片id |
| playDuration | Integer | 播放時長,單位為秒,與是否倍速播放無關(使用者觀看的總時間,例如:18:00開始看一個影片,看到了18:30,這30分鐘就是播放時長) |
| stayDuration | Integer | 頁面停留時長,單位為秒,與是否播放影片無關 |
| currentTimes | Integer | 播放時間,單位為秒(使用者觀看的最後時間,例如:停止觀看影片的時候,進度條最後的分鐘數為35分鐘,播放時間就是35分鐘) |
| duration | Integer | 影片總時長,單位為秒 |
| flowSize | Long | 流量大小,單位為位元組 |
| sessionId | String | 使用者自訂參數,如學員id等 |
| param1/2/3/4/5 | String | POLYV系統參數 |
| ipAddress | String | ip位址 |
| country | String | 國家 |
| province | String | 省份 |
| city | String | 城市 |
| isp | String | ISP運營商 |
| referer | String | 播放影片頁面位址 |
| userAgent | String | 使用者裝置 |
| operatingSystem | String | 作業系統 |
| browser | String | 瀏覽器 |
| isMobile | String | 是否為行動端 Y:是 N:否 |
| currentDay | String | 日誌查詢日期,格式:yyyy-MM-dd |
| currentHour | Integer | 日誌建立時間(24小時制小時數),例如:18,表示下午六點建立 |
| viewSource | String | 使用者觀看渠道 vod_ios_sdk:ios端 vod_android_sdk:安卓端 vod_flash:flash vod_wechat_mini_program:微信小程式 vod_pc_html5:pc端web vod_mobile_html5:行動端web vod_mobile_html5_v2:行動端web v2 polyv-android-sdk:安卓端投屏 polyv-ios-vod-sdk:ios端投屏 |
| createdTime | Long | 日誌建立時間,13位毫秒級的時間戳 |
| lastModified | Long | 日誌更新日期,13位毫秒級的時間戳 |
| viewerId | String | 觀看者id |
| viewerName | String | 觀看者名稱 |
返回錯誤代碼列表
| 錯誤代碼 | message | 說明 |
|---|---|---|
| 400 | ptime is illegal. | 時間戳格式問題,或時間戳超過當前時間3分鐘 |
| 400 | sign can not be empty. | 加密串為空 |
| 400 | Could not find user by userid. | 使用者id不存在 |
| 400 | ptime is too old. | 時間戳過期(3分鐘過期) |
| 400 | the sign is not right. | 加密串錯誤 |
| 401 | pageNum和numPerPage必須為大於0的正整數. | 分頁參數不正確 |
| 402 | month必須為合法的yyyyMM格式. | month格式內容不正確 |
| 500 | 查詢失敗. | 後台發生錯誤異常 |
Java請求範例
快速接入基礎程式碼請下載相關依賴原始碼,點擊下載原始碼,下載後加入到自己的原始碼工程中即可。測試案例中的HttpUtil.java 和 VodSignUtil.java 都包含在下載檔案中。
強烈建議您使用點播Java SDK完成API的功能對接,點播Java SDK 對API呼叫邏輯、異常處理、資料簽名、HTTP請求執行緒池進行了統一封裝和最佳化。
private static final Logger log = LoggerFactory.getLogger(VodStatisticsTest.class);
/**
* 批量查询视频观看日志
* @throws Exception
* @throws NoSuchAlgorithmException
*/
@Test
public void testGetViewlog() throws Exception, NoSuchAlgorithmException {
//公共参数,填写自己的实际参数
String secretKey = super.secretKey;
String userId = super.userId;
String ptime = String.valueOf(System.currentTimeMillis());
//业务参数
String month = "202104";
String url = String.format("http://api.polyv.net/v2/viewlog/%s/monthly/%s", userId, month);
String currentDay = "2021-04-07";
String numPerPage = String.valueOf(2);
String pageNum = String.valueOf(1);
Map<String, String> requestMap = new HashMap<>();
requestMap.put("ptime", ptime);
requestMap.put("currentDay", currentDay);
requestMap.put("month", month);
requestMap.put("numPerPage", numPerPage);
requestMap.put("pageNum", pageNum);
requestMap.put("sign", VodSignUtil.getSign(requestMap, secretKey));
String response = HttpUtil.get(url, requestMap);
log.debug("测试批量查询视频观看日志,{}", response);
//do somethings
}
回應範例
系統全域錯誤說明詳見全域錯誤說明
成功範例
{
"code": 200,
"status": "success",
"message": "success",
"data": [{
"playId": "1617791143803X1210954",
"userId": "1b448be323",
"videoId": "1b448be323a146649ad0cc89d0faed9c_1",
"playDuration": 21,
"stayDuration": 30,
"currentTimes": 22,
"duration": 191,
"flowSize": 0,
"sessionId": "",
"param1": "",
"param2": "",
"param3": "",
"param4": "",
"param5": "",
"ipAddress": "xxxxxxx",
"country": "中国",
"province": "湖南",
"city": "长沙",
"isp": "湖南电信",
"referer": "https://share.plvideo.cn/front/video/preview?vid=1b448be323a146649ad0cc89d0faed9c_1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36",
"operatingSystem": "Windows",
"browser": "Chrome",
"isMobile": "N",
"currentDay": "2021-04-07",
"currentHour": 18,
"createdTime": 1617791314000,
"lastModified": 1617802680000,
"viewerId": "",
"viewerName": "",
"viewSource": "vod_pc_html5"
}, {
"playId": "1617791015552X1409047",
"userId": "1b448be323",
"videoId": "1b448be323a146649ad0cc89d0faed9c_1",
"playDuration": 33,
"stayDuration": 40,
"currentTimes": 35,
"duration": 191,
"flowSize": 0,
"sessionId": "",
"param1": "",
"param2": "",
"param3": "",
"param4": "",
"param5": "",
"ipAddress": "xxxxxxx",
"country": "中国",
"province": "湖南",
"city": "长沙",
"isp": "湖南电信",
"referer": "https://share.plvideo.cn/front/video/preview?vid=1b448be323a146649ad0cc89d0faed9c_1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36",
"operatingSystem": "Windows",
"browser": "Chrome",
"isMobile": "N",
"currentDay": "2021-04-07",
"currentHour": 18,
"createdTime": 1617791294000,
"lastModified": 1617802668000,
"viewerId": "",
"viewerName": "",
"viewSource": "vod_pc_html5"
}],
"total": 8
}
異常範例
{
"code": 400,
"status": "error",
"message": "ptime is too old.",
"data": ""
}
