from.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. package search
  2. import (
  3. "encoding/json"
  4. "go-common/library/log"
  5. xtime "go-common/library/time"
  6. )
  7. // search const
  8. const (
  9. TypeVideo = "video"
  10. TypeLive = "live_room"
  11. TypeMediaBangumi = "media_bangumi"
  12. TypeMediaFt = "media_ft"
  13. TypeArticle = "article"
  14. TypeSpecial = "special_card"
  15. TypeBanner = "banner"
  16. TypeUser = "user"
  17. TypeBiliUser = "bili_user"
  18. TypeGame = "game"
  19. TypeSpecialS = "special_card_small"
  20. TypeConverge = "content_card"
  21. TypeQuery = "query"
  22. TypeLiveMaster = "live_master"
  23. TypeTwitter = "twitter"
  24. // TypeLiveComic = "comic"
  25. SuggestionJump = 99
  26. SuggestionAV = "video"
  27. SuggestionLive = "live"
  28. )
  29. // Search all
  30. type Search struct {
  31. Code int `json:"code,omitempty"`
  32. Trackid string `json:"seid,omitempty"`
  33. Page int `json:"page,omitempty"`
  34. PageSize int `json:"pagesize,omitempty"`
  35. Total int `json:"total,omitempty"`
  36. NumResults int `json:"numResults,omitempty"`
  37. NumPages int `json:"numPages,omitempty"`
  38. SuggestKeyword string `json:"suggest_keyword,omitempty"`
  39. Attribute int32 `json:"exp_bits,omitempty"`
  40. PageInfo struct {
  41. UpUser *Page `json:"upuser,omitempty"`
  42. BiliUser *Page `json:"bili_user,omitempty"`
  43. User *Page `json:"user,omitempty"`
  44. Movie *Page `json:"movie,omitempty"`
  45. Article *Page `json:"article,omitempty"`
  46. LiveRoom *Page `json:"live_room,omitempty"`
  47. LiveUser *Page `json:"live_user,omitempty"`
  48. LiveAll *Page `json:"live_all,omitempty"`
  49. MediaBangumi *Page `json:"media_bangumi,omitempty"`
  50. MediaFt *Page `json:"media_ft,omitempty"`
  51. } `json:"pageinfo,omitempty"`
  52. Result struct {
  53. Bangumi []*Bangumi `json:"bangumi,omitempty"`
  54. UpUser []*User `json:"upuser,omitempty"`
  55. BiliUser []*User `json:"bili_user,omitempty"`
  56. User []*User `json:"user,omitempty"`
  57. Movie []*Movie `json:"movie,omitempty"`
  58. LiveRoom []*Live `json:"live_room,omitempty"`
  59. LiveUser []*Live `json:"live_user,omitempty"`
  60. Video []*Video `json:"video,omitempty"`
  61. MediaBangumi []*Media `json:"media_bangumi,omitempty"`
  62. MediaFt []*Media `json:"media_ft,omitempty"`
  63. } `json:"result,omitempty"`
  64. FlowResult []*Flow `json:"flow_result,omitempty"`
  65. FlowPlaceholder int `json:"flow_placeholder,omitempty"`
  66. EggInfo *struct {
  67. Source int64 `json:"source,omitempty"`
  68. ShowCount int `json:"show_count,omitempty"`
  69. } `json:"egg_info,omitempty"`
  70. }
  71. // NoResultRcmd no result rcmd
  72. type NoResultRcmd struct {
  73. Code int `json:"code,omitempty"`
  74. Msg string `json:"msg,omitempty"`
  75. ReqType string `json:"req_type,omitempty"`
  76. Result []*Video `json:"result,omitempty"`
  77. NumResults int `json:"numResults,omitempty"`
  78. Page int `json:"page,omitempty"`
  79. Trackid string `json:"seid,omitempty"`
  80. SuggestKeyword string `json:"suggest_keyword,omitempty"`
  81. RecommendTips string `json:"recommend_tips,omitempty"`
  82. }
  83. // RecommendPre search at pre-page
  84. type RecommendPre struct {
  85. Code int `json:"code,omitempty"`
  86. Msg string `json:"msg,omitempty"`
  87. NumResult int `json:"numResult,omitempty"`
  88. Trackid string `json:"seid,omitempty"`
  89. Result []*struct {
  90. Type string `json:"type,omitempty"`
  91. Query string `json:"query,omitempty"`
  92. List []*struct {
  93. Type string `json:"source_type,omitempty"`
  94. ID int64 `json:"source_id,omitempty"`
  95. } `json:"rec_list,omitempty"`
  96. } `json:"result,omitempty"`
  97. }
  98. // Page struct
  99. type Page struct {
  100. NumResults int `json:"numResults"`
  101. Pages int `json:"pages"`
  102. }
  103. // Bangumi struct
  104. type Bangumi struct {
  105. Name string `json:"name,omitempty"`
  106. SeasonID int `json:"season_id,omitempty"`
  107. Title string `json:"title,omitempty"`
  108. Cover string `json:"cover,omitempty"`
  109. Evaluate string `json:"evaluate,omitempty"`
  110. NewestEpID int `json:"newest_ep_id,omitempty"`
  111. NewestEpIndex string `json:"newest_ep_index,omitempty"`
  112. IsFinish int `json:"is_finish,omitempty"`
  113. IsStarted int `json:"is_started,omitempty"`
  114. NewestCat string `json:"newest_cat,omitempty"`
  115. NewestSeason string `json:"newest_season,omitempty"`
  116. TotalCount int `json:"total_count,omitempty"`
  117. Pages int `json:"numPages,omitempty"`
  118. CatList *struct {
  119. TV int `json:"tv"`
  120. Movie int `json:"movie"`
  121. Ova int `json:"ova"`
  122. } `json:"catlist,omitempty"`
  123. }
  124. // Movie struct
  125. type Movie struct {
  126. Title string `json:"title"`
  127. SpID string `json:"spid"`
  128. Type string `json:"type"`
  129. Aid int64 `json:"aid"`
  130. Desc string `json:"description"`
  131. Actors string `json:"actors"`
  132. Staff string `json:"staff"`
  133. Cover string `json:"cover"`
  134. Pic string `json:"pic"`
  135. ScreenDate string `json:"screenDate"`
  136. Area string `json:"area"`
  137. Status int `json:"status"`
  138. Length int `json:"length"`
  139. Pages int `json:"numPages"`
  140. }
  141. // User struct
  142. type User struct {
  143. Mid int64 `json:"mid,omitempty"`
  144. Name string `json:"uname,omitempty"`
  145. SName string `json:"name,omitempty"`
  146. OfficialVerify *OfficialVerify `json:"official_verify,omitempty"`
  147. Usign string `json:"usign,omitempty"`
  148. Fans int `json:"fans,omitempty"`
  149. Videos int `json:"videos,omitempty"`
  150. Level int `json:"level,omitempty"`
  151. Pic string `json:"upic,omitempty"`
  152. Pages int `json:"numPages,omitempty"`
  153. Res []*struct {
  154. Play interface{} `json:"play,omitempty"`
  155. Danmaku int `json:"dm,omitempty"`
  156. Pubdate int64 `json:"pubdate,omitempty"`
  157. Title string `json:"title,omitempty"`
  158. Aid int64 `json:"aid,omitempty"`
  159. Pic string `json:"pic,omitempty"`
  160. ArcURL string `json:"arcurl,omitempty"`
  161. Duration string `json:"duration,omitempty"`
  162. } `json:"res,omitempty"`
  163. IsLive int `json:"is_live,omitempty"`
  164. RoomID int64 `json:"room_id,omitempty"`
  165. IsUpuser int `json:"is_upuser,omitempty"`
  166. }
  167. // OfficialVerify struct
  168. type OfficialVerify struct {
  169. Type int `json:"type"`
  170. Desc string `json:"desc,omitempty"`
  171. }
  172. // Video struct
  173. type Video struct {
  174. ID int64 `json:"id"`
  175. Author string `json:"author"`
  176. Title string `json:"title"`
  177. Pic string `json:"pic"`
  178. Desc string `json:"description"`
  179. Play interface{} `json:"play"`
  180. Danmaku int `json:"video_review"`
  181. Duration string `json:"duration"`
  182. Pages int `json:"numPages"`
  183. ViewType string `json:"view_type"`
  184. RecTags []string `json:"rec_tags"`
  185. }
  186. // Live struct
  187. type Live struct {
  188. Total int `json:"total,omitempty"`
  189. Pages int `json:"pages"`
  190. UID int64 `json:"uid,omitempty"`
  191. RoomID int64 `json:"roomid,omitempty"`
  192. Type string `json:"type,omitempty"`
  193. Title string `json:"title,omitempty"`
  194. LiveStatus int `json:"live_status,omitempty"`
  195. ShortID int `json:"short_id,omitempty"`
  196. Uname string `json:"uname,omitempty"`
  197. Uface string `json:"uface,omitempty"`
  198. Cover string `json:"cover,omitempty"`
  199. Online int `json:"online,omitempty"`
  200. Attentions int `json:"attentions,omitempty"`
  201. Tags string `json:"tags,omitempty"`
  202. Area int `json:"area,omitempty"`
  203. CateName string `json:"cate_name,omitempty"`
  204. CateParentName string `json:"cate_parent_name,omitempty"`
  205. UserCover string `json:"user_cover,omitempty"`
  206. VerifyType int `json:"verify_type,omitempty"`
  207. VerifyDesc string `json:"verify_desc,omitempty"`
  208. Fans int `json:"fans,omitempty"`
  209. }
  210. // Article struct
  211. type Article struct {
  212. ID int64 `json:"id"`
  213. Mid int64 `json:"mid"`
  214. Uname string `json:"uname"`
  215. TemplateID int `json:"template_id"`
  216. Title string `json:"title"`
  217. Desc string `json:"desc"`
  218. ImageUrls []string `json:"image_urls"`
  219. View int `json:"view"`
  220. Like int `json:"like"`
  221. Reply int `json:"reply"`
  222. }
  223. // Media struct
  224. type Media struct {
  225. MediaID int64 `json:"media_id,omitempty"`
  226. SeasonID int64 `json:"season_id,omitempty"`
  227. Title string `json:"title,omitempty"`
  228. OrgTitle string `json:"org_title,omitempty"`
  229. Styles string `json:"styles,omitempty"`
  230. Cover string `json:"cover,omitempty"`
  231. PlayState int `json:"play_state,omitempty"`
  232. MediaScore *struct {
  233. Score float64 `json:"score,omitempty"`
  234. UserCount int `json:"user_count,omitempty"`
  235. } `json:"media_score,omitempty"`
  236. MediaType int `json:"media_type,omitempty"`
  237. CV string `json:"cv,omitempty"`
  238. Staff string `json:"staff,omitempty"`
  239. Areas string `json:"areas,omitempty"`
  240. GotoURL string `json:"goto_url,omitempty"`
  241. Pubtime xtime.Time `json:"pubtime,omitempty"`
  242. HitColumns []string `json:"hit_columns,omitempty"`
  243. }
  244. // Query struct
  245. type Query struct {
  246. Type string `json:"type,omitempty"`
  247. Name string `json:"name,omitempty"`
  248. ID int64 `json:"id,omitempty"`
  249. FromSource string `json:"from_source,omitempty"`
  250. }
  251. // Hot struct
  252. type Hot struct {
  253. Code int `json:"code,omitempty"`
  254. SeID string `json:"seid,omitempty"`
  255. TrackID string `json:"trackid"`
  256. List []struct {
  257. Keyword string `json:"keyword"`
  258. Status string `json:"status"`
  259. NameType string `json:"name_type"`
  260. } `json:"list"`
  261. }
  262. // Suggest struct
  263. type Suggest struct {
  264. Code int `json:"code"`
  265. Stoken string `json:"stoken"`
  266. ResultBs interface{} `json:"result"`
  267. Result struct {
  268. Accurate struct {
  269. UpUser interface{} `json:"upuser,omitempty"`
  270. Bangumi interface{} `json:"bangumi,omitempty"`
  271. } `json:"accurate,omitempty"`
  272. Tag []*struct {
  273. Value string `json:"value,omitempty"`
  274. } `json:"tag,omitempty"`
  275. } `json:"-"`
  276. }
  277. // Suggest2 struct
  278. type Suggest2 struct {
  279. Code int `json:"code"`
  280. Stoken string `json:"stoken"`
  281. Result *struct {
  282. Tag []*SuggestTag `json:"tag"`
  283. } `json:"result"`
  284. }
  285. // SuggestTag struct
  286. type SuggestTag struct {
  287. Value string `json:"value,omitempty"`
  288. Ref int64 `json:"ref,omitempty"`
  289. Name string `json:"name,omitempty"`
  290. SpID int `json:"spid,omitempty"`
  291. Type string `json:"type,omitempty"`
  292. }
  293. // Suggest3 struct
  294. type Suggest3 struct {
  295. Code int `json:"code"`
  296. TrackID string `json:"trackid"`
  297. Result []*Sug `json:"result"`
  298. }
  299. // Sug struct
  300. type Sug struct {
  301. ShowName string `json:"show_name,omitempty"`
  302. Term string `json:"term,omitempty"`
  303. Ref int64 `json:"ref,omitempty"`
  304. TermType int `json:"term_type,omitempty"`
  305. SubType string `json:"sub_type,omitempty"`
  306. Pos int `json:"pos,omitempty"`
  307. Cover string `json:"cover,omitempty"`
  308. CoverSize float64 `json:"cover_size,omitempty"`
  309. }
  310. // Operate struct
  311. type Operate struct {
  312. ID int64 `json:"id,omitempty"`
  313. Title string `json:"title,omitempty"`
  314. Cover string `json:"cover,omitempty"`
  315. RedirectURL string `json:"redirect_url,omitempty"`
  316. Desc string `json:"desc,omitempty"`
  317. Corner string `json:"corner,omitempty"`
  318. RecReason string `json:"rec_reason,omitempty"`
  319. ContentList []*struct {
  320. Type int `json:"type,omitempty"`
  321. ID int64 `json:"id,omitempty"`
  322. } `json:"content_list,omitempty"`
  323. }
  324. // Game struct
  325. type Game struct {
  326. ID int64 `json:"id,omitempty"`
  327. Title string `json:"title,omitempty"`
  328. Cover string `json:"cover,omitempty"`
  329. Desc string `json:"description,omitempty"`
  330. View float64 `json:"view,omitempty"`
  331. Like int64 `json:"like,omitempty"`
  332. Status int `json:"status,omitempty"`
  333. RedirectURL string `json:"redirect_url,omitempty"`
  334. }
  335. // type Comic struct {
  336. // ID int64 `json:"id,omitempty"`
  337. // Title string `json:"title,omitempty"`
  338. // Cover string `json:"cover,omitempty"`
  339. // Uname string `json:"uname,omitempty"`
  340. // Areas string `json:"areas,omitempty"`
  341. // Styles string `json:"styles,omitempty"`
  342. // URL string `json:"url,omitempty"`
  343. // Type string `json:"type,omitempty"`
  344. // }
  345. // Channel struct
  346. type Channel struct {
  347. Type string `json:"type,omitempty"`
  348. TagID int64 `json:"tag_id,omitempty"`
  349. TagName string `json:"tag_name,omitempty"`
  350. AttenCount int `json:"atten_count,omitempty"`
  351. Cover string `json:"cover,omitempty"`
  352. }
  353. // Twitter twitter.
  354. type Twitter struct {
  355. ID int64 `json:"id,omitempty"`
  356. PicID int64 `json:"pic_id"`
  357. Cover []string `json:"cover,omitempty"`
  358. CoverCount int `json:"cover_count,omitempty"`
  359. Content string `json:"content,omitempty"`
  360. }
  361. // Flow struct
  362. type Flow struct {
  363. LinkType string `json:"linktype,omitempty"`
  364. Position int `json:"position,omitempty"`
  365. Type string `json:"type,omitempty"`
  366. TypeName string `json:"type_name,omitempty"`
  367. Value json.RawMessage `json:"value,omitempty"`
  368. Video *Video
  369. Live *Live
  370. Operate *Operate
  371. Article *Article
  372. Media *Media
  373. User *User
  374. Game *Game
  375. Query []*Query
  376. Twitter *Twitter
  377. // Comic *Comic
  378. TrackID string `json:"trackid,omitempty"`
  379. }
  380. // Change chagne flow
  381. func (f *Flow) Change() {
  382. var err error
  383. switch f.Type {
  384. case TypeVideo:
  385. err = json.Unmarshal(f.Value, &f.Video)
  386. case TypeLive:
  387. err = json.Unmarshal(f.Value, &f.Live)
  388. case TypeMediaBangumi, TypeMediaFt:
  389. err = json.Unmarshal(f.Value, &f.Media)
  390. case TypeArticle:
  391. err = json.Unmarshal(f.Value, &f.Article)
  392. case TypeSpecial, TypeBanner, TypeSpecialS, TypeConverge:
  393. err = json.Unmarshal(f.Value, &f.Operate)
  394. case TypeUser, TypeBiliUser:
  395. err = json.Unmarshal(f.Value, &f.User)
  396. case TypeGame:
  397. err = json.Unmarshal(f.Value, &f.Game)
  398. case TypeQuery:
  399. err = json.Unmarshal(f.Value, &f.Query)
  400. // case TypeLiveComic:
  401. // err = json.Unmarshal(f.Value, &f.Comic)
  402. case TypeTwitter:
  403. err = json.Unmarshal(f.Value, &f.Twitter)
  404. }
  405. if err != nil {
  406. log.Error("json.Unmarshal(%s) error(%+v)", f.Value, err)
  407. }
  408. }