Initial commit: web_hghl_server

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 16:28:14 +08:00
co-authored by Claude Opus 4.7
commit 65fca60622
653 changed files with 135901 additions and 0 deletions
+119
View File
@@ -0,0 +1,119 @@
// 短剧数据回流 demo。
//
// 用法:
//
// go run ./example # 只看将发送的 JSON,不发请求
// STUDIO_API_KEY='ld_xxx' go run ./example -send # 真正上报
//
// 接入时照着这个文件抄:改 records 里的数据,把 main 里的发送逻辑搬进你们自己的任务里。
package main
import (
"flag"
"fmt"
"os"
datacenter "videoweb/pub/data_center"
)
// ============================================================
// 1. 要上报的数据。一条 = 一个视频在某一天的表现。
//
// 不用填的(SDK 自动补):
// - data_date 数据所属日期 → 当天 UTC 日期
// - company 所属公司 → 瑞升
// - role_id 角色 ID 数组 → []
//
// 必须填的(漏了会在本地就报错,不会白跑请求):
// - company_platform 所属产品/项目名
// - published_data 视频上线时间
// - script_name 剧本名称
// - drama_name 短剧名称
// - drama_no 集数
// - video_url 成片下载链接
// - platform_url 产品内播放页链接
//
// 其余都是选填,不填就不会出现在请求体里。
// ============================================================
var records = []datacenter.Record{
{
// ---- 必填 ----
CompanyPlatform: "黄果短剧", // 你们的产品/项目名
PublishedData: "01/09/2026",
ScriptName: "剧本A",
DramaName: "短剧A",
DramaNo: "第1集",
VideoURL: "https://cdn.example.com/a.mp4",
PlatformURL: "https://example.com/a",
// ---- 选填,建议填:方便中台把同一条视频的历史数据串起来 ----
VideoID: "12345",
ScriptID: "S-001",
PlatformVideoID: "pv-12345",
// ---- 数据 ----
Views: 10000, // 浏览量
Clicks: 8200, // 播放量
Likes: 300, // 点赞量
// ---- 选填,不用就整行删掉 ----
// LikeRate: "3.66%", // 点赞量 ÷ 播放量 × 100%
// CompletionRate: "43.00%", // 完播率,没单条数据可填剧本整体完播率
// PaidRate: "0.00%", // 免费短剧统一 0.00%
// CompletionRateScope: "video", // video | script | unknown
// Comments: datacenter.Int(14), // 填 0 也会正常发出,删掉则不发这个字段
// Shares: datacenter.Int(0),
},
// 想一次发多条就继续往这里加,SDK 会打包成一个请求发出去。
// {
// CompanyPlatform: "黄果短剧",
// ...
// },
}
func main() {
send := flag.Bool("send", false, "真正 POST。默认只打印 JSON")
flag.Parse()
// ------------------------------------------------------------
// 第 1 步:本地核对。打印补齐默认值之后最终会发出的 JSON。
// ------------------------------------------------------------
body, err := datacenter.JSON(records...)
if err != nil {
fatal(err)
}
fmt.Println(string(body))
if !*send {
fmt.Println("\n未发送。确认无误后执行:")
fmt.Println(" STUDIO_API_KEY='ld_...' go run ./example -send")
return
}
// ------------------------------------------------------------
// 第 2 步:异步上报。
//
// SendAsync 把数据丢进内存队列就立即返回,HTTP 请求在后台发,
// 不会拖慢你们的主流程(接口 handler、定时任务都适用)。
//
// 两条铁律:
// 1. 失败不会返回给你,用 OnError 接住写日志。
// 2. 进程退出前必须 Close(),否则队列里的数据会丢。
// ------------------------------------------------------------
client := datacenter.New(os.Getenv("STUDIO_API_KEY")) // 创建一次,全程复用
client.OnError = func(err error) {
// 漏填字段、网络失败、队列满被丢弃,都会走到这里。
fmt.Fprintln(os.Stderr, "上报失败:", err)
}
client.SendAsync(records...) // 立即返回,不阻塞
client.Close() // 等队列里的数据发完再退出
fmt.Println("\n上报完成")
}
func fatal(err error) {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}