Guest User

Untitled

a guest
Sep 28th, 2018
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.26 KB | None | 0 0
  1. import requests
  2. import argparse
  3. import urllib.parse
  4. import os
  5. import xml.etree.ElementTree as etree
  6. from bs4 import BeautifulSoup
  7.  
  8. parser = argparse.ArgumentParser()
  9. parser.add_argument("-s", "--silent", help="Run without extra messages", action="store_true")
  10.  
  11. plexURL = ""
  12. plexToken = ""
  13. OMDBAPI = ""
  14. ignorefilename = 'ignorefilms.txt'
  15.  
  16. args = parser.parse_args()
  17.  
  18. res = requests.get(plexURL+"/tv.plex.providers.epg.onconnect:16/sections/1/all?type=1&X-Plex-Product=Plex%20Web&X-Plex-Version=3.67.1&X-Plex-Platform=Firefox&X-Plex-Platform-Version=61.0&X-Plex-Sync-Version=2&X-Plex-Device=Windows&X-Plex-Device-Name=Firefox&X-Plex-Device-Screen-Resolution=1920x929%2C1920x1080&X-Plex-Token="+plexToken+"&X-Plex-Language=en&X-Plex-Text-Format=plain")
  19.  
  20. if not args.silent:
  21. print("")
  22. print("Checking for Movies in EPG")
  23. EPGMovies = BeautifulSoup(res.text,"html.parser")
  24.  
  25. if not args.silent:
  26. print(str(len(EPGMovies.find_all('video')))+" movie(s) found")
  27.  
  28. res = requests.get(plexURL+"/library/sections/1/all?type=1&includeCollections=0&X-Plex-Product=Plex%20Web&X-Plex-Version=3.67.1&X-Plex-Platform=Firefox&X-Plex-Platform-Version=61.0&X-Plex-Sync-Version=2&X-Plex-Device=Windows&X-Plex-Device-Name=Firefox&X-Plex-Device-Screen-Resolution=1920x929%2C1920x1080&X-Plex-Token="+plexToken+"&X-Plex-Language=en&X-Plex-Text-Format=plain")
  29.  
  30.  
  31. if not args.silent:
  32. print("")
  33. print("Getting full list of movies in our main library")
  34. LibraryMovies = BeautifulSoup(res.text,"html.parser")
  35.  
  36. if not args.silent:
  37. print(str(len(LibraryMovies.find_all('video')))+" movie(s) found")
  38.  
  39. res = requests.get(plexURL+"/library/sections/2/all?type=1&includeCollections=0&X-Plex-Product=Plex%20Web&X-Plex-Version=3.67.1&X-Plex-Platform=Firefox&X-Plex-Platform-Version=61.0&X-Plex-Sync-Version=2&X-Plex-Device=Windows&X-Plex-Device-Name=Firefox&X-Plex-Device-Screen-Resolution=1920x929%2C1920x1080&X-Plex-Token="+plexToken+"&X-Plex-Language=en&X-Plex-Text-Format=plain")
  40.  
  41.  
  42. if not args.silent:
  43. print("")
  44. print("Getting full list of movies in our Kids library")
  45. LibraryKidsMovies = BeautifulSoup(res.text,"html.parser")
  46.  
  47. if not args.silent:
  48. print(str(len(LibraryKidsMovies.find_all('video')))+" movie(s) found")
  49.  
  50. print("")
  51. print("Checking for previously scheduled recordings")
  52. res = requests.get(plexURL+"/media/subscriptions?X-Plex-Product=Plex%20Web&X-Plex-Version=3.67.1&X-Plex-Platform=Firefox&X-Plex-Platform-Version=61.0&X-Plex-Sync-Version=2&X-Plex-Device=Windows&X-Plex-Device-Name=Firefox&X-Plex-Device-Screen-Resolution=1920x929%2C1920x1080&X-Plex-Token="+plexToken+"&X-Plex-Language=en")
  53.  
  54. ScheduledRecordings = BeautifulSoup(res.text,"html.parser")
  55.  
  56. if not args.silent:
  57. print(str(len(ScheduledRecordings.find_all('video', {'type' : 'movie'})))+" movie(s) found")
  58. print("")
  59.  
  60. print("Here is a full list of missing movies with (currently) no scheduled Recordings")
  61. print("")
  62.  
  63. def ignoredFilms(title,year):
  64. filmString = title + " ("+year+")"
  65. if os.path.isfile(ignorefilename) and filmString in open(ignorefilename).read():
  66. return True
  67. else:
  68. return False
  69.  
  70. def checkSchedule(title,year):
  71. matchMovie = ScheduledRecordings.select_one('video[title="'+title+'"]')
  72. if matchMovie and matchMovie.get("year") == year:
  73. return True
  74. else:
  75. return False
  76.  
  77. def IMDBInfo(title,year):
  78. res= requests.get("http://www.omdbapi.com/?apikey="+OMDBAPI+"&type=movie&r=xml&t="+title+"&y="+year)
  79. IMDBResponse = BeautifulSoup(res.text,"html.parser")
  80. IMDBMovie = IMDBResponse.select_one('movie')
  81. IMDBRating = ""
  82. #metaRating = ""
  83. if IMDBMovie:
  84. IMDBRating = str(IMDBMovie.get("imdbrating")) + "/10 "
  85. IMDBUrl = "https://www.imdb.com/title/" + str(IMDBMovie.get("imdbid"))
  86. #metaRating = "MetaCritic : "+str(IMDBMovie.get("metascore"))
  87. return " "+title+" ("+year+") "+IMDBRating+"\n "+IMDBUrl
  88. else:
  89. return " "+title+" ("+year+")\n (No Matches on IMDB)"
  90.  
  91.  
  92.  
  93. def checkFilm(title,year):
  94. matchMovie = LibraryMovies.select_one('video[title="'+title+'"]')
  95. if matchMovie and matchMovie.get("year") == year:
  96. if not args.silent:
  97. print(title +" is already in our Films Library")
  98. return False
  99. else:
  100. matchKidsMovie = LibraryKidsMovies.select_one('video[title="'+title+'"]')
  101. if matchKidsMovie and matchKidsMovie.get("year") == year:
  102. if not args.silent:
  103. print(title +" is already in Kids Films")
  104. return False
  105. else:
  106. #We need to check if there is already a subscription for this film
  107. if checkSchedule(title,year):
  108. if not args.silent:
  109. print(title + " is scheduled to record")
  110. return
  111. else:
  112. print(IMDBInfo(title,year))
  113. return True
  114. print("")
  115. #print(soup)
  116. for movie in EPGMovies.find_all("video"):
  117. #Check our Ignore list
  118. if not ignoredFilms(movie['title'],movie['year']):
  119. if checkFilm(movie['title'],movie['year']):
  120. setRecording = input("Should we set a recording for this Film? (y|i|n) ")
  121. if setRecording.lower() == "y":
  122. hintGuid="&hints[guid]="+urllib.parse.quote_plus(movie['guid'])+"&"
  123. hintTitle="hints[title]="+urllib.parse.quote_plus(movie['title'])+"&"
  124. hintYear="hints[year]="+movie['year']+"&"
  125. hintThumb="hints[thumb]="+urllib.parse.quote_plus(movie['thumb'])+"&"
  126. RecordURL = plexURL+"/media/subscriptions?prefs%5BminVideoQuality%5D=0&prefs%5BreplaceLowerQuality%5D=false&prefs%5BrecordPartials%5D=true&prefs%5BstartOffsetMinutes%5D=3&prefs%5BendOffsetMinutes%5D=5&prefs%5BlineupChannel%5D=&prefs%5BstartTimeslot%5D=-1&prefs%5BcomskipEnabled%5D=-1&prefs%5BoneShot%5D=true&targetLibrarySectionID=15&targetSectionLocationID=&includeGrabs=1"+hintGuid+hintThumb+hintTitle+hintYear+"hints[type]=1&params[libraryType]=1&params[mediaProviderID]=17&type=1&X-Plex-Product=Plex%20Web&X-Plex-Version=3.67.1&X-Plex-Platform=Firefox&X-Plex-Platform-Version=61.0&X-Plex-Sync-Version=2&X-Plex-Device=Windows&X-Plex-Device-Name=Firefox&X-Plex-Device-Screen-Resolution=1920x929%2C1920x1080&X-Plex-Token="+plexToken+"&X-Plex-Language=en"
  127. res = requests.post(RecordURL)
  128. if res.status_code == 200:
  129. print("Recording successfully added")
  130. #print(RecordURL)
  131. else:
  132. print("Error Returned : "+res.status_code)
  133. if setRecording.lower() == "i":
  134. # Add to the ignore list
  135. with open(ignorefilename, 'a') as file:
  136. file.write(movie['title'] + " ("+movie['year']+")\n")
  137. file.close
Advertisement
Add Comment
Please, Sign In to add comment