decode.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package common
  2. import (
  3. "github.com/beevik/etree"
  4. "io/ioutil"
  5. "os"
  6. "strings"
  7. )
  8. func get_IMDB_movie_xml(movieFilePath string) (string, error) {
  9. doc := etree.NewDocument()
  10. if err := doc.ReadFromFile(movieFilePath); err != nil {
  11. return "", err
  12. }
  13. for _, t := range doc.FindElements("//IMDB") {
  14. return t.Text(), nil
  15. }
  16. return "", CanNotFindIMDBID
  17. }
  18. func get_IMDB_nfo(nfoFilePath string) (string, error) {
  19. doc := etree.NewDocument()
  20. if err := doc.ReadFromFile(nfoFilePath); err != nil {
  21. return "", err
  22. }
  23. for _, t := range doc.FindElements("//uniqueid[@type='Imdb']") {
  24. return t.Text(), nil
  25. }
  26. return "", CanNotFindIMDBID
  27. }
  28. func Get_IMDB_Id(dirPth string) (string ,error) {
  29. dir, err := ioutil.ReadDir(dirPth)
  30. if err != nil {
  31. return "", err
  32. }
  33. pathSep := string(os.PathSeparator)
  34. // 优先找 movie.xml 这个是 raddarr 下载的电影会存下来的,可以在 Metadata 设置 Emby
  35. var movieFilePath = ""
  36. // 这个是使用 tinyMediaManager 削刮器按 Kodi 来存储的
  37. var nfoFilePath = ""
  38. for _, fi := range dir {
  39. if fi.IsDir() == true {
  40. continue
  41. }
  42. upperName := strings.ToUpper(fi.Name())
  43. // 找 movie.xml
  44. if upperName == strings.ToUpper(metadataFileEmby) {
  45. movieFilePath = dirPth + pathSep + fi.Name()
  46. }
  47. // 找 *.nfo
  48. ok := strings.HasSuffix(fi.Name(), suffixNameNfo)
  49. if ok {
  50. nfoFilePath = dirPth + pathSep + fi.Name()
  51. }
  52. }
  53. // 根据找到的开始解析
  54. if movieFilePath == "" && nfoFilePath == "" {
  55. return "", NoMetadataFile
  56. }
  57. if movieFilePath != "" {
  58. outId, err := get_IMDB_movie_xml(movieFilePath)
  59. if err != nil {
  60. println(err)
  61. } else {
  62. return outId, nil
  63. }
  64. }
  65. if nfoFilePath != "" {
  66. outId, err := get_IMDB_nfo(nfoFilePath)
  67. if err != nil {
  68. return "", err
  69. } else {
  70. return outId, nil
  71. }
  72. }
  73. return "", CanNotFindIMDBID
  74. }
  75. const (
  76. metadataFileEmby = "movie.xml"
  77. suffixNameXml = ".xml"
  78. suffixNameNfo = ".nfo"
  79. )