from.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. package search
  2. import (
  3. "encoding/json"
  4. "go-common/app/interface/main/app-interface/model"
  5. "go-common/library/log"
  6. xtime "go-common/library/time"
  7. )
  8. // search const
  9. const (
  10. TypeVideo = "video"
  11. TypeLive = "live_room"
  12. TypeMediaBangumi = "media_bangumi"
  13. TypeMediaFt = "media_ft"
  14. TypeArticle = "article"
  15. TypeSpecial = "special_card"
  16. TypeBanner = "banner"
  17. TypeUser = "user"
  18. TypeBiliUser = "bili_user"
  19. TypeGame = "game"
  20. TypeSpecialS = "special_card_small"
  21. TypeConverge = "content_card"
  22. TypeQuery = "query"
  23. TypeLiveMaster = "live_master"
  24. TypeTwitter = "twitter"
  25. TypeComic = "comic"
  26. TypeStar = "star"
  27. TypeTicket = "ticket"
  28. TypeProduct = "product"
  29. TypeSpecialerGuide = "special_guide_card"
  30. TypeChannel = "tag"
  31. SuggestionJump = 99
  32. SuggestionJumpUser = 81
  33. SuggestionJumpPGC = 82
  34. SuggestionAV = "video"
  35. SuggestionLive = "live"
  36. SuggestionArticle = "article"
  37. SearchLiveAllAndroid = 5275000
  38. SearchLiveAllIOS = 6800
  39. SearchEggInfoAndroid = 5270000
  40. LiveBroadcastTypeAndroid = 5305000
  41. SearchTwitterAndroid = 5315000
  42. SearchTwitterIOS = 8111
  43. SearchNewIPad = 8231
  44. SearchNewIPadHD = 12041
  45. SearchConvergeIOS = 8140
  46. SearchConvergeAndroid = 5320000
  47. SearchStarIOS = 8220
  48. SearchStarAndroid = 5335000
  49. SearchTicketIOS = 8220
  50. SearchTicketAndroid = 5335000
  51. SearchProductIOS = 8220
  52. SearchProductAndroid = 5335000
  53. )
  54. // Search all
  55. type Search struct {
  56. Code int `json:"code,omitempty"`
  57. Trackid string `json:"seid,omitempty"`
  58. Page int `json:"page,omitempty"`
  59. PageSize int `json:"pagesize,omitempty"`
  60. Total int `json:"total,omitempty"`
  61. NumResults int `json:"numResults,omitempty"`
  62. NumPages int `json:"numPages,omitempty"`
  63. SuggestKeyword string `json:"suggest_keyword,omitempty"`
  64. CrrQuery string `json:"crr_query,omitempty"`
  65. Attribute int32 `json:"exp_bits,omitempty"`
  66. PageInfo struct {
  67. Bangumi *Page `json:"bangumi,omitempty"`
  68. UpUser *Page `json:"upuser,omitempty"`
  69. BiliUser *Page `json:"bili_user,omitempty"`
  70. User *Page `json:"user,omitempty"`
  71. Movie *Page `json:"movie,omitempty"`
  72. Film *Page `json:"pgc,omitempty"`
  73. Article *Page `json:"article,omitempty"`
  74. LiveRoom *Page `json:"live_room,omitempty"`
  75. LiveUser *Page `json:"live_user,omitempty"`
  76. LiveAll *Page `json:"live_all,omitempty"`
  77. MediaBangumi *Page `json:"media_bangumi,omitempty"`
  78. MediaFt *Page `json:"media_ft,omitempty"`
  79. } `json:"pageinfo,omitempty"`
  80. Result struct {
  81. Bangumi []*Bangumi `json:"bangumi,omitempty"`
  82. UpUser []*User `json:"upuser,omitempty"`
  83. BiliUser []*User `json:"bili_user,omitempty"`
  84. User []*User `json:"user,omitempty"`
  85. Movie []*Movie `json:"movie,omitempty"`
  86. LiveRoom []*Live `json:"live_room,omitempty"`
  87. LiveUser []*Live `json:"live_user,omitempty"`
  88. Video []*Video `json:"video,omitempty"`
  89. MediaBangumi []*Media `json:"media_bangumi,omitempty"`
  90. MediaFt []*Media `json:"media_ft,omitempty"`
  91. } `json:"result,omitempty"`
  92. FlowResult []*Flow `json:"flow_result,omitempty"`
  93. FlowPlaceholder int `json:"flow_placeholder,omitempty"`
  94. EggInfo *struct {
  95. Source int64 `json:"source,omitempty"`
  96. ShowCount int `json:"show_count,omitempty"`
  97. } `json:"egg_info,omitempty"`
  98. }
  99. // NoResultRcmd no result rcmd
  100. type NoResultRcmd struct {
  101. Code int `json:"code,omitempty"`
  102. Msg string `json:"msg,omitempty"`
  103. ReqType string `json:"req_type,omitempty"`
  104. Result []*Video `json:"result,omitempty"`
  105. NumResults int `json:"numResults,omitempty"`
  106. Page int `json:"page,omitempty"`
  107. Trackid string `json:"seid,omitempty"`
  108. SuggestKeyword string `json:"suggest_keyword,omitempty"`
  109. RecommendTips string `json:"recommend_tips,omitempty"`
  110. }
  111. // RecommendPre search at pre-page
  112. type RecommendPre struct {
  113. Code int `json:"code,omitempty"`
  114. Msg string `json:"msg,omitempty"`
  115. NumResult int `json:"numResult,omitempty"`
  116. Trackid string `json:"seid,omitempty"`
  117. Result []*struct {
  118. Type string `json:"type,omitempty"`
  119. Query string `json:"query,omitempty"`
  120. List []*struct {
  121. Type string `json:"source_type,omitempty"`
  122. ID int64 `json:"source_id,omitempty"`
  123. } `json:"rec_list,omitempty"`
  124. } `json:"result,omitempty"`
  125. }
  126. // Page struct
  127. type Page struct {
  128. NumResults int `json:"numResults"`
  129. Pages int `json:"pages"`
  130. }
  131. // Bangumi struct
  132. type Bangumi struct {
  133. Name string `json:"name,omitempty"`
  134. SeasonID int `json:"season_id,omitempty"`
  135. Title string `json:"title,omitempty"`
  136. Cover string `json:"cover,omitempty"`
  137. Evaluate string `json:"evaluate,omitempty"`
  138. NewestEpID int `json:"newest_ep_id,omitempty"`
  139. NewestEpIndex string `json:"newest_ep_index,omitempty"`
  140. IsFinish int `json:"is_finish,omitempty"`
  141. IsStarted int `json:"is_started,omitempty"`
  142. NewestCat string `json:"newest_cat,omitempty"`
  143. NewestSeason string `json:"newest_season,omitempty"`
  144. TotalCount int `json:"total_count,omitempty"`
  145. Pages int `json:"numPages,omitempty"`
  146. CatList *struct {
  147. TV int `json:"tv"`
  148. Movie int `json:"movie"`
  149. Ova int `json:"ova"`
  150. } `json:"catlist,omitempty"`
  151. }
  152. // Movie struct
  153. type Movie struct {
  154. Title string `json:"title"`
  155. SpID string `json:"spid"`
  156. Type string `json:"type"`
  157. Aid int64 `json:"aid"`
  158. Desc string `json:"description"`
  159. Actors string `json:"actors"`
  160. Staff string `json:"staff"`
  161. Cover string `json:"cover"`
  162. Pic string `json:"pic"`
  163. ScreenDate string `json:"screenDate"`
  164. Area string `json:"area"`
  165. Status int `json:"status"`
  166. Length int `json:"length"`
  167. Pages int `json:"numPages"`
  168. }
  169. // User struct
  170. type User struct {
  171. Mid int64 `json:"mid,omitempty"`
  172. Name string `json:"uname,omitempty"`
  173. SName string `json:"name,omitempty"`
  174. OfficialVerify *OfficialVerify `json:"official_verify,omitempty"`
  175. Usign string `json:"usign,omitempty"`
  176. Fans int `json:"fans,omitempty"`
  177. Videos int `json:"videos,omitempty"`
  178. Level int `json:"level,omitempty"`
  179. Pic string `json:"upic,omitempty"`
  180. Pages int `json:"numPages,omitempty"`
  181. Res []*struct {
  182. Play interface{} `json:"play,omitempty"`
  183. Danmaku int `json:"dm,omitempty"`
  184. Pubdate int64 `json:"pubdate,omitempty"`
  185. Title string `json:"title,omitempty"`
  186. Aid int64 `json:"aid,omitempty"`
  187. Pic string `json:"pic,omitempty"`
  188. ArcURL string `json:"arcurl,omitempty"`
  189. Duration string `json:"duration,omitempty"`
  190. IsPay int `json:"is_pay,omitempty"`
  191. } `json:"res,omitempty"`
  192. IsLive int `json:"is_live,omitempty"`
  193. RoomID int64 `json:"room_id,omitempty"`
  194. IsUpuser int `json:"is_upuser,omitempty"`
  195. }
  196. // OfficialVerify struct
  197. type OfficialVerify struct {
  198. Type int `json:"type"`
  199. Desc string `json:"desc,omitempty"`
  200. }
  201. // Video struct
  202. type Video struct {
  203. ID int64 `json:"id"`
  204. Author string `json:"author"`
  205. Title string `json:"title"`
  206. Pic string `json:"pic"`
  207. Desc string `json:"description"`
  208. Play interface{} `json:"play"`
  209. Danmaku int `json:"video_review"`
  210. Duration string `json:"duration"`
  211. Pages int `json:"numPages"`
  212. ViewType string `json:"view_type"`
  213. RecTags []string `json:"rec_tags"`
  214. IsPay int `json:"is_pay"`
  215. NewRecTags []*RecTag `json:"new_rec_tags"`
  216. }
  217. // RecTag from video
  218. type RecTag struct {
  219. Name string `json:"tag_name"`
  220. Style int8 `json:"tag_style"`
  221. }
  222. // Live struct
  223. type Live struct {
  224. Total int `json:"total,omitempty"`
  225. Pages int `json:"pages"`
  226. UID int64 `json:"uid,omitempty"`
  227. RoomID int64 `json:"roomid,omitempty"`
  228. Type string `json:"type,omitempty"`
  229. Title string `json:"title,omitempty"`
  230. LiveStatus int `json:"live_status,omitempty"`
  231. ShortID int `json:"short_id,omitempty"`
  232. Uname string `json:"uname,omitempty"`
  233. Uface string `json:"uface,omitempty"`
  234. Cover string `json:"cover,omitempty"`
  235. Online int `json:"online,omitempty"`
  236. Attentions int `json:"attentions,omitempty"`
  237. Tags string `json:"tags,omitempty"`
  238. Area int `json:"area,omitempty"`
  239. CateName string `json:"cate_name,omitempty"`
  240. CateParentName string `json:"cate_parent_name,omitempty"`
  241. UserCover string `json:"user_cover,omitempty"`
  242. VerifyType int `json:"verify_type,omitempty"`
  243. VerifyDesc string `json:"verify_desc,omitempty"`
  244. Fans int `json:"fans,omitempty"`
  245. }
  246. // Article struct
  247. type Article struct {
  248. ID int64 `json:"id"`
  249. Mid int64 `json:"mid"`
  250. Uname string `json:"uname"`
  251. TemplateID int `json:"template_id"`
  252. Title string `json:"title"`
  253. Desc string `json:"desc"`
  254. ImageUrls []string `json:"image_urls"`
  255. View int `json:"view"`
  256. Like int `json:"like"`
  257. Reply int `json:"reply"`
  258. }
  259. // Media struct
  260. type Media struct {
  261. MediaID int64 `json:"media_id,omitempty"`
  262. SeasonID int64 `json:"season_id,omitempty"`
  263. Title string `json:"title,omitempty"`
  264. OrgTitle string `json:"org_title,omitempty"`
  265. Styles string `json:"styles,omitempty"`
  266. Cover string `json:"cover,omitempty"`
  267. PlayState int `json:"play_state,omitempty"`
  268. MediaScore *struct {
  269. Score float64 `json:"score,omitempty"`
  270. UserCount int `json:"user_count,omitempty"`
  271. } `json:"media_score,omitempty"`
  272. MediaType int `json:"media_type,omitempty"`
  273. CV string `json:"cv,omitempty"`
  274. Staff string `json:"staff,omitempty"`
  275. Areas string `json:"areas,omitempty"`
  276. GotoURL string `json:"goto_url,omitempty"`
  277. Pubtime xtime.Time `json:"pubtime,omitempty"`
  278. HitColumns []string `json:"hit_columns,omitempty"`
  279. AllNetName string `json:"all_net_name,omitempty"`
  280. AllNetIcon string `json:"all_net_icon,omitempty"`
  281. AllNetURL string `json:"all_net_url,omitempty"`
  282. DisplayInfo json.RawMessage `json:"display_info,omitempty"`
  283. }
  284. // Query struct
  285. type Query struct {
  286. Type string `json:"type,omitempty"`
  287. Name string `json:"name,omitempty"`
  288. ID int64 `json:"id,omitempty"`
  289. FromSource string `json:"from_source,omitempty"`
  290. }
  291. // Hot struct
  292. type Hot struct {
  293. Code int `json:"code,omitempty"`
  294. SeID string `json:"seid,omitempty"`
  295. TrackID string `json:"trackid"`
  296. List []struct {
  297. Keyword string `json:"keyword"`
  298. Status string `json:"status"`
  299. NameType string `json:"name_type"`
  300. } `json:"list"`
  301. }
  302. // Suggest struct
  303. type Suggest struct {
  304. Code int `json:"code"`
  305. Stoken string `json:"stoken"`
  306. ResultBs interface{} `json:"result"`
  307. Result struct {
  308. Accurate struct {
  309. UpUser interface{} `json:"upuser,omitempty"`
  310. Bangumi interface{} `json:"bangumi,omitempty"`
  311. } `json:"accurate,omitempty"`
  312. Tag []*struct {
  313. Value string `json:"value,omitempty"`
  314. } `json:"tag,omitempty"`
  315. } `json:"-"`
  316. }
  317. // Suggest2 struct
  318. type Suggest2 struct {
  319. Code int `json:"code"`
  320. Stoken string `json:"stoken"`
  321. Result *struct {
  322. Tag []*SuggestTag `json:"tag"`
  323. } `json:"result"`
  324. }
  325. // SuggestTag struct
  326. type SuggestTag struct {
  327. Value string `json:"value,omitempty"`
  328. Ref int64 `json:"ref,omitempty"`
  329. Name string `json:"name,omitempty"`
  330. SpID int `json:"spid,omitempty"`
  331. Type string `json:"type,omitempty"`
  332. }
  333. // Suggest3 struct
  334. type Suggest3 struct {
  335. Code int `json:"code"`
  336. TrackID string `json:"trackid"`
  337. Result []*Sug `json:"result"`
  338. }
  339. // Sug struct
  340. type Sug struct {
  341. ShowName string `json:"show_name,omitempty"`
  342. Term string `json:"term,omitempty"`
  343. Ref int64 `json:"ref,omitempty"`
  344. TermType int `json:"term_type,omitempty"`
  345. SubType string `json:"sub_type,omitempty"`
  346. Pos int `json:"pos,omitempty"`
  347. Cover string `json:"cover,omitempty"`
  348. CoverSize float64 `json:"cover_size,omitempty"`
  349. Value json.RawMessage `json:"value,omitempty"`
  350. PGC *SugPGC `json:"-"`
  351. User *SugUser `json:"-"`
  352. }
  353. // SugPGC fro sug
  354. type SugPGC struct {
  355. MediaID int64 `json:"media_id,omitempty"`
  356. SeasonID int64 `json:"season_id,omitempty"`
  357. Title string `json:"title,omitempty"`
  358. MediaType int `json:"media_type,omitempty"`
  359. GotoURL string `json:"goto_url,omitempty"`
  360. Areas string `json:"areas,omitempty"`
  361. Pubtime xtime.Time `json:"pubtime,omitempty"`
  362. FixPubTime string `json:"fix_pubtime_str,omitempty"`
  363. Styles string `json:"styles,omitempty"`
  364. CV string `json:"cv,omitempty"`
  365. Staff string `json:"staff,omitempty"`
  366. MediaScore float64 `json:"media_score,omitempty"`
  367. MediaUserCount int `json:"media_user_cnt,omitempty"`
  368. Cover string `json:"cover,omitempty"`
  369. Badges []*model.ReasonStyle `json:"badges,omitempty"`
  370. }
  371. // SugUser fro sug
  372. type SugUser struct {
  373. Mid int64 `json:"uid,omitempty"`
  374. Face string `json:"face,omitempty"`
  375. Name string `json:"uname,omitempty"`
  376. Fans int `json:"fans,omitempty"`
  377. Videos int `json:"videos,omitempty"`
  378. Level int `json:"level,omitempty"`
  379. OfficialVerifyType int `json:"verify_type,omitempty"`
  380. }
  381. // Operate struct
  382. type Operate struct {
  383. ID int64 `json:"id,omitempty"`
  384. Title string `json:"title,omitempty"`
  385. Cover string `json:"cover,omitempty"`
  386. RedirectURL string `json:"redirect_url,omitempty"`
  387. Desc string `json:"desc,omitempty"`
  388. Corner string `json:"corner,omitempty"`
  389. RecReason string `json:"rec_reason,omitempty"`
  390. ContentList []*struct {
  391. Type int `json:"type,omitempty"`
  392. ID int64 `json:"id,omitempty"`
  393. } `json:"content_list,omitempty"`
  394. }
  395. // Game struct
  396. type Game struct {
  397. ID int64 `json:"id,omitempty"`
  398. Title string `json:"title,omitempty"`
  399. Cover string `json:"cover,omitempty"`
  400. Desc string `json:"description,omitempty"`
  401. View float64 `json:"view,omitempty"`
  402. Like int64 `json:"like,omitempty"`
  403. Status int `json:"status,omitempty"`
  404. RedirectURL string `json:"redirect_url,omitempty"`
  405. }
  406. // Comic struct
  407. type Comic struct {
  408. ID int64 `json:"id,omitempty"`
  409. Title string `json:"title,omitempty"`
  410. Author []string `json:"author,omitempty"`
  411. Cover string `json:"cover,omitempty"`
  412. Styles string `json:"styles,omitempty"`
  413. URL string `json:"url,omitempty"`
  414. ComicURL string `json:"sq_url,omitempty"`
  415. }
  416. // Channel struct
  417. type Channel struct {
  418. Type string `json:"type,omitempty"`
  419. TagID int64 `json:"tag_id,omitempty"`
  420. TagName string `json:"tag_name,omitempty"`
  421. AttenCount int `json:"atten_count,omitempty"`
  422. Cover string `json:"cover,omitempty"`
  423. Desc string `json:"desc,omitempty"`
  424. Values []*Flow `json:"value_list,omitempty"`
  425. }
  426. // Twitter twitter.
  427. type Twitter struct {
  428. ID int64 `json:"id,omitempty"`
  429. PicID int64 `json:"pic_id"`
  430. Cover []string `json:"cover,omitempty"`
  431. CoverCount int `json:"cover_count,omitempty"`
  432. Content string `json:"content,omitempty"`
  433. }
  434. // Star struct
  435. type Star struct {
  436. ID int64 `json:"id,omitempty"`
  437. Cover string `json:"cover,omitempty"`
  438. Desc string `json:"desc,omitempty"`
  439. Title string `json:"title,omitempty"`
  440. MID int64 `json:"mid,omitempty"`
  441. TagID int64 `json:"tag_id,omitempty"`
  442. TagList []*struct {
  443. TagName string `json:"tagname,omitempty"`
  444. KeyWord string `json:"searchtagname,omitempty"`
  445. ValueList []*struct {
  446. Type string `json:"type,omitempty"`
  447. Video *Video `json:"values,omitempty"`
  448. } `json:"value_list,omitempty"`
  449. } `json:"tag_list,omitempty"`
  450. }
  451. // Ticket for search.
  452. type Ticket struct {
  453. ID int64 `json:"id,omitempty"`
  454. Title string `json:"project_name,omitempty"`
  455. Cover string `json:"cover,omitempty"`
  456. ShowTime string `json:"show_time,omitempty"`
  457. CityName string `json:"city_name,omitempty"`
  458. VenueName string `json:"venue_name,omitempty"`
  459. PriceLow int `json:"price_low,omitempty"`
  460. PriceType int `json:"need_up,omitempty"`
  461. ReqNum int `json:"required_number,omitempty"`
  462. URL string `json:"url,omitempty"`
  463. }
  464. // Product for search.
  465. type Product struct {
  466. ID int64 `json:"id,omitempty"`
  467. Title string `json:"title,omitempty"`
  468. Cover string `json:"cover,omitempty"`
  469. ShopName string `json:"shop_name,omitempty"`
  470. Price int `json:"price,omitempty"`
  471. PriceType int `json:"need_up,omitempty"`
  472. ReqNum int `json:"required_number,omitempty"`
  473. URL string `json:"url,omitempty"`
  474. }
  475. // SpecialerGuide fro search
  476. type SpecialerGuide struct {
  477. ID int64 `json:"id,omitempty"`
  478. Title string `json:"title,omitempty"`
  479. Desc string `json:"desc,omitempty"`
  480. Cover string `json:"cover,omitempty"`
  481. Tel string `json:"tel,omitempty"`
  482. }
  483. // Flow struct
  484. type Flow struct {
  485. LinkType string `json:"linktype,omitempty"`
  486. Position int `json:"position,omitempty"`
  487. Type string `json:"type,omitempty"`
  488. TypeName string `json:"type_name,omitempty"`
  489. Value json.RawMessage `json:"value,omitempty"`
  490. Video *Video
  491. Live *Live
  492. Operate *Operate
  493. Article *Article
  494. Media *Media
  495. User *User
  496. Game *Game
  497. Query []*Query
  498. Twitter *Twitter
  499. Comic *Comic
  500. Star *Star
  501. Ticket *Ticket
  502. Product *Product
  503. SpecialerGuide *SpecialerGuide
  504. Channel *Channel
  505. TrackID string `json:"trackid,omitempty"`
  506. }
  507. // Change chagne flow
  508. func (f *Flow) Change() {
  509. var err error
  510. switch f.Type {
  511. case TypeVideo:
  512. err = json.Unmarshal(f.Value, &f.Video)
  513. case TypeLive:
  514. err = json.Unmarshal(f.Value, &f.Live)
  515. case TypeMediaBangumi, TypeMediaFt:
  516. err = json.Unmarshal(f.Value, &f.Media)
  517. case TypeArticle:
  518. err = json.Unmarshal(f.Value, &f.Article)
  519. case TypeSpecial, TypeBanner, TypeSpecialS, TypeConverge:
  520. err = json.Unmarshal(f.Value, &f.Operate)
  521. case TypeUser, TypeBiliUser:
  522. err = json.Unmarshal(f.Value, &f.User)
  523. case TypeGame:
  524. err = json.Unmarshal(f.Value, &f.Game)
  525. case TypeQuery:
  526. err = json.Unmarshal(f.Value, &f.Query)
  527. case TypeComic:
  528. err = json.Unmarshal(f.Value, &f.Comic)
  529. case TypeTwitter:
  530. err = json.Unmarshal(f.Value, &f.Twitter)
  531. case TypeStar:
  532. err = json.Unmarshal(f.Value, &f.Star)
  533. case TypeTicket:
  534. err = json.Unmarshal(f.Value, &f.Ticket)
  535. case TypeProduct:
  536. err = json.Unmarshal(f.Value, &f.Product)
  537. case TypeSpecialerGuide:
  538. err = json.Unmarshal(f.Value, &f.SpecialerGuide)
  539. case TypeChannel:
  540. if err = json.Unmarshal(f.Value, &f.Channel); err == nil {
  541. if f.Channel != nil && len(f.Channel.Values) > 0 {
  542. for _, value := range f.Channel.Values {
  543. value.Change()
  544. }
  545. }
  546. }
  547. }
  548. if err != nil {
  549. log.Error("Change json.Unmarshal(%s) error(%+v)", f.Value, err)
  550. }
  551. }
  552. // SugChange chagne sug value
  553. func (s *Sug) SugChange() {
  554. var err error
  555. switch s.TermType {
  556. case SuggestionJumpUser:
  557. err = json.Unmarshal(s.Value, &s.PGC)
  558. case SuggestionJumpPGC:
  559. err = json.Unmarshal(s.Value, &s.User)
  560. }
  561. if err != nil {
  562. log.Error("SugChange json.Unmarshal(%s) error(%+v)", s.Value, err)
  563. }
  564. }