imdb.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package imdb_helper
  2. import (
  3. "github.com/StalkR/imdb"
  4. "github.com/allanpk716/ChineseSubFinder/internal/dao"
  5. "github.com/allanpk716/ChineseSubFinder/internal/models"
  6. "github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
  7. "github.com/allanpk716/ChineseSubFinder/internal/pkg/notify_center"
  8. "github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
  9. "strings"
  10. )
  11. // GetVideoInfoFromIMDB 从 IMDB ID 查询影片的信息
  12. func GetVideoInfoFromIMDB(imdbID string, _proxySettings ...settings.ProxySettings) (*imdb.Title, error) {
  13. var proxySettings settings.ProxySettings
  14. if len(_proxySettings) > 0 {
  15. proxySettings = _proxySettings[0]
  16. }
  17. t, err := imdb.NewTitle(my_util.NewHttpClient(proxySettings).GetClient(), imdbID)
  18. if err != nil {
  19. notify_center.Notify.Add("imdb model - imdb.NewTitle :", err.Error())
  20. return nil, err
  21. }
  22. return t, nil
  23. }
  24. // GetVideoIMDBInfoFromLocal 从本地获取 IMDB 信息,如果找不到则去网络获取并写入本地缓存
  25. func GetVideoIMDBInfoFromLocal(imdbID string, _proxySettings ...settings.ProxySettings) (*models.IMDBInfo, error) {
  26. var proxySettings settings.ProxySettings
  27. if len(_proxySettings) > 0 {
  28. proxySettings = _proxySettings[0]
  29. }
  30. // 首先从数据库中查找是否存在这个 IMDB 信息,如果不存在再使用 Web 查找,且写入数据库
  31. var imdbInfos []models.IMDBInfo
  32. // 把嵌套关联的 has many 的信息都查询出来
  33. dao.GetDb().Preload("VideoSubInfos").Limit(1).Where(&models.IMDBInfo{IMDBID: imdbID}).Find(&imdbInfos)
  34. if len(imdbInfos) <= 0 {
  35. // 没有找到,去网上获取
  36. t, err := GetVideoInfoFromIMDB(imdbID, proxySettings)
  37. if err != nil {
  38. return nil, err
  39. }
  40. // 存入数据库
  41. nowIMDBInfo := models.NewIMDBInfo(imdbID, t.Name, t.Year, t.Description, t.Languages, t.AKA)
  42. imdbInfos = make([]models.IMDBInfo, 0)
  43. imdbInfos = append(imdbInfos, *nowIMDBInfo)
  44. dao.GetDb().Create(nowIMDBInfo)
  45. return nowIMDBInfo, nil
  46. } else {
  47. // 找到
  48. return &imdbInfos[0], nil
  49. }
  50. }
  51. // IsChineseVideo 从 imdbID 去查询判断是否是中文视频
  52. func IsChineseVideo(imdbID string, _proxySettings ...settings.ProxySettings) (bool, *models.IMDBInfo, error) {
  53. const chName0 = "chinese"
  54. const chName1 = "mandarin"
  55. var proxySettings settings.ProxySettings
  56. if len(_proxySettings) > 0 {
  57. proxySettings = _proxySettings[0]
  58. }
  59. localIMDBInfo, err := GetVideoIMDBInfoFromLocal(imdbID, proxySettings)
  60. if err != nil {
  61. return false, nil, err
  62. }
  63. if len(localIMDBInfo.Languages) <= 0 {
  64. return false, nil, nil
  65. }
  66. firstLangLowCase := strings.ToLower(localIMDBInfo.Languages[0])
  67. // 判断第一语言是否是中文
  68. switch firstLangLowCase {
  69. case chName0, chName1:
  70. return true, localIMDBInfo, nil
  71. default:
  72. return false, localIMDBInfo, nil
  73. }
  74. }