def getSeasonArtByTheTvDbId(self, info): url = self.apiSeriesByID url = re.sub("<seriesid>", info.TheTvDbId, url) url = re.sub("<lang>", u"banners", url) xml = WebGrabber.getXml(url, cache=False) if xml is None: WebGrabber.removeFromCache(url) printl(" <- None (xml is None)", self) return None movieList = xml.getElementsByTagName("Banners") seasonsFound = [] info.SeasonPoster.clear() for eMovie in movieList: for p in eMovie.getElementsByTagName("Banner"): bannerType = p.getElementsByTagName( "BannerType")[0].childNodes[0].data bannerType2 = p.getElementsByTagName( "BannerType2")[0].childNodes[0].data bannerPath = p.getElementsByTagName( "BannerPath")[0].childNodes[0].data if bannerType == "season" and bannerType2 == "season": season = p.getElementsByTagName( "Season")[0].childNodes[0].data if season not in seasonsFound: seasonsFound.append(season) info.SeasonPoster[str( season)] = self.apiArt + bannerPath if len(info.SeasonPoster.values()) > 0: return info return None
def getSeasonArtByTheTvDbId(self, info): url = self.apiSeriesByID; url = re.sub("<seriesid>", info.TheTvDbId, url) url = re.sub("<lang>", u"banners", url) xml = WebGrabber.getXml(url, cache=False); if xml is None: WebGrabber.removeFromCache(url) printl(" <- None (xml is None)", self) return None movieList = xml.getElementsByTagName("Banners") seasonsFound = [] info.SeasonPoster.clear() for eMovie in movieList: for p in eMovie.getElementsByTagName("Banner"): bannerType = p.getElementsByTagName("BannerType")[0].childNodes[0].data bannerType2 = p.getElementsByTagName("BannerType2")[0].childNodes[0].data bannerPath = p.getElementsByTagName("BannerPath")[0].childNodes[0].data if bannerType == "season" and bannerType2 == "season": season = p.getElementsByTagName("Season")[0].childNodes[0].data if season not in seasonsFound: seasonsFound.append(season) info.SeasonPoster[str(season)] = self.apiArt + bannerPath if len(info.SeasonPoster.values()) > 0: return info return None
def getSerie(self, info, lang): if info.TheTvDbId == info.TheTvDbIdNull: printl(" <- None (info.TheTvDbId == info.TheTvDbIdNull)", self) return None lang = lang.lower() #if lang == u"en": # return info #en already parsed using getSerieByImdbID() url = self.apiSeriesByID url = re.sub("<seriesid>", info.TheTvDbId, url) url = re.sub("<lang>", lang, url) xml = WebGrabber.getXml(url) if xml is None: WebGrabber.removeFromCache(url) printl(" <- None (xml is None)", self) return None movieList = xml.getElementsByTagName("Series") for eMovie in movieList: entryLang = self.getLanguage(eMovie).lower() if entryLang != lang: continue #tmp = self.getTvdbId(info, eMovie) #if tmp is not None: # info = tmp #tmp = self.getImdbId(info, eMovie) #if tmp is not None: # info = tmp tmp = self.getSeriesName(info, eMovie) if tmp is not None: info = tmp tmp = self.getOverview(info, eMovie) if tmp is not None: info = tmp tmp = self.getFirstAired(info, eMovie) if tmp is not None: info = tmp tmp = self.getRuntime(info, eMovie) if tmp is not None: info = tmp tmp = self.getRating(info, eMovie) if tmp is not None: info = tmp tmp = self.getGenre(info, eMovie) if tmp is not None: info = tmp return info WebGrabber.removeFromCache(url) printl(" <- None (eof)", self) return None
def checkPathXml(self): printl(" -> ", "checkPathXml", "S") DEFAULTURL = "http://project-valerie.googlecode.com/svn/trunk/default/" try: printl("Check " + config.plugins.pvmc.configfolderpath.value + "paths.xml", __name__) if os.path.isfile(config.plugins.pvmc.configfolderpath.value + "paths.xml") is False: printl("Check paths.xml - Missing -> Downloading", __name__) WebGrabber.getFile(DEFAULTURL+"paths.xml", config.plugins.pvmc.configfolderpath.value + "paths.xml") printl("\t- Created", __name__) else: printl("\t- OK", __name__) except Exception, ex: printl("Exception: " + str(ex), __name__)
def getArtByImdbId(self, info): printl ("", self, "S") if info.ImdbId == info.ImdbIdNull: printl("None (info.ImdbId == info.ImdbIdNull)", self, "D") printl ("", self, "C") return None url = self.apiImdbLookup url = re.sub("<imdbid>", info.ImdbId, url) url = re.sub("<lang>", u"en", url) result = WebGrabber.getJson(url) if result is None: printl("None (result is None)", self, "D") printl ("", self, "C") return None eMovie = json.loads(result) try: info.Poster = "http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w300" + eMovie['poster_path'] except Exception, ex: printl("Exception: " + str(ex), self) info.Poster = ""
def getMovie(self, info, lang): printl ("", self, "S") if info.TmDbId == info.TmDbIdNull: printl("None (info.TmDbId == info.TmDbIdNull)", self, "I") printl ("", self, "C") return None lang = lang.lower() if lang == u"en": printl("en already parsed using getSerieByImdbID()", self, "I") printl ("", self, "C") return info url = self.apiImdbLookup url = re.sub("<imdbid>", info.ImdbId, url) url = re.sub("<lang>", lang, url) result = WebGrabber.getJson(url) if result is None: printl("None (result is None)", self, "I") printl ("", self, "C") return None eMovie = json.loads(result) #if self.getTranslated(eMovie) is False: # continue #tmp = self.getTmdbId(info, eMovie) #if tmp is not None: # info = tmp #tmp = self.getImdbId(info, eMovie) #if tmp is not None: # info = tmp tmp = self.getName(info, eMovie) if tmp is not None: info = tmp tmp = self.getOverview(info, eMovie) if tmp is not None: info = tmp tmp = self.getReleased(info, eMovie) if tmp is not None: info = tmp tmp = self.getRating(info, eMovie) if tmp is not None: info = tmp tmp = self.getRuntime(info, eMovie) if tmp is not None: info = tmp tmp = self.getGenre(info, eMovie) if tmp is not None: info = tmp printl ("", self, "C") return info
def getMoviesByImdbID(self, info): #print "getMoviesByImdbID", info.ImdbId url = self.apiDetails url = re.sub("<imdbid>", info.ImdbId, url) html = WebGrabber.getHtml(url) if html is None: # print "if html is None" return None tmp = self.getTag(info, html) if tmp is not None: info = tmp tmp = self.getVotes(info, html) if tmp is not None: info = tmp tmp = self.getTitle(info, html) if tmp is not None: info = tmp tmp = self.getPlot(info, html) if tmp is not None: info = tmp tmp = self.getRuntime(info, html) if tmp is not None: info = tmp tmp = self.getGenre(info, html) if tmp is not None: info = tmp return info
def getMoviesByImdbID(self, info): #print "getMoviesByImdbID", info.ImdbId url = self.apiDetails url = re.sub("<imdbid>", info.ImdbId, url) html = WebGrabber.getHtml(url) if html is None: # print "if html is None" return None; tmp = self.getTag(info, html) if tmp is not None: info = tmp tmp = self.getVotes(info, html) if tmp is not None: info = tmp tmp = self.getTitle(info, html) if tmp is not None: info = tmp tmp = self.getPlot(info, html) if tmp is not None: info = tmp tmp = self.getRuntime(info, html) if tmp is not None: info = tmp tmp = self.getGenre(info, html) if tmp is not None: info = tmp return info;
def getSeasonAndEpisodeFromEpisodeName(self, info): if info.SearchString is None or len(info.SearchString) == 0: printl(" <- None (info.SearchString is None or len(info.SearchString) == 0)", self) return (False, None) url = self.apiSearch url = re.sub("<search>", info.SearchString, url) printl("Google-query: " + info.SearchString, self, "I") html = WebGrabber.getHtml(url) if html is None: printl(" <- None (html is None)", self) return (False, None) # well there seems to be a problem with detecting tvshows, #so lets build in a workaround, you will need at least 2 time the same #season and episode before acepting it count = 0 s = 0 e = 0 # Issue #205, efo => use only result tag # htmlSplitted = html.split(self.DIV_RESULT_START) htmlSplitted = html.split(self.DIV_RESULT_FLAG) lobSkipEntry = True for htmlSplitter in htmlSplitted: # Skip first entry, since this mostly contain script stuff... if lobSkipEntry == True: lobSkipEntry = False continue htmlSplitter = htmlSplitter.strip() # Issue #205, efo => don't split again, since we now already have a single line which can be checked... #if htmlSplitter.startswith(self.DIV_RESULT_FLAG) is False: # continue #pos = htmlSplitter.find(self.DIV_RESULT_END) #if pos < 0: # continue tmp = self.searchForSeasonAndEpisode(info, htmlSplitter.lower()) if tmp is not None: info = tmp if s == 0 or e == 0: s = info.Season e = info.Episode if s == info.Season and e == info.Episode: count = count + 1 if count == 2: return (True, info) else: continue printl(" <- None (eof)", self) return (True, None)
def getSerieByImdbID(self, info): if info.ImdbId == info.ImdbIdNull: printl(" <- None (info.ImdbId == info.ImdbIdNull)", self) return None url = self.apiSeriesByImdbID + info.ImdbId xml = WebGrabber.getXml(url) if xml is None: WebGrabber.removeFromCache(url) printl(" <- None (xml is None)", self) return None movieList = xml.getElementsByTagName("Series") for eMovie in movieList: tmp = self.getTvdbId(info, eMovie) if tmp is not None: info = tmp #tmp = self.getImdbId(info, eMovie) #if tmp is not None: # info = tmp tmp = self.getSeriesName(info, eMovie) if tmp is not None: info = tmp tmp = self.getOverview(info, eMovie) if tmp is not None: info = tmp tmp = self.getFirstAired(info, eMovie) if tmp is not None: info = tmp #tmp = self.getRuntime(info, eMovie) #if tmp is not None: # info = tmp tmp = self.getRating(info, eMovie) if tmp is not None: info = tmp tmp = self.getGenre(info, eMovie) if tmp is not None: info = tmp return info WebGrabber.removeFromCache(url) printl(" <- None (eof)", self) return None
def getMoviesByTitle(self, info): if info.ImdbId != info.ImdbIdNull: printl("IMDb-ID already set to '" + str(info.ImdbId) + "' - get movie by ID instead... ", self, "I") info2 = self.getMoviesByImdbID(info) if info2 is not None: printl("Get movie by ID succeeded. ", self, "I") return info2 url = self.apiSearch url = re.sub("<search>", info.SearchString, url) html = WebGrabber.getHtml(url) if html is None: printl("<- None (html is None)", self) return None if self.testNoResults in html: printl("<- None (self.testNoResults in html)", self) return None #print "MIMDB seraches for ", info.is_Movie, info.is_Episode, info.is_Serie year = info.Year results = self.getResults(html) printl("Results are: ", self) for result in results: printl("\t" + str(result), self) for result in results: if info.isTypeEpisode() or info.isTypeSerie(): if not result.IsTVSeries: printl("Searched media is a TV-show - but result seems to be a movie => skip...", self, "I") continue else: # is_Movie if result.IsTVSeries: printl("Searched media is a movie - but result seems to be a TV-show => skip...", self, "I") continue # We check if year +-1, cause sometimes the year is wrong by one year if year is None or year <= 0 or year == result.Year or (year+1) == result.Year or (year-1) == result.Year: info.ImdbId = result.ImdbId info.Title = result.Title info.Year = result.Year printl("Get movie by ID '" + str(info.ImdbId) + "'", self, "I") tmp = self.getMoviesByImdbID(info) if tmp is not None: info = tmp printl("Get movie by ID succeeded: " + str(info.ImdbId) + "'", self, "I") return info printl("<- None (eof)", self) return None
def checkPathXml(self): printl(" -> ", "checkPathXml", "S") DEFAULTURL = "http://project-valerie.googlecode.com/svn/trunk/default/" try: printl( "Check " + config.plugins.pvmc.configfolderpath.value + "paths.xml", __name__) if os.path.isfile(config.plugins.pvmc.configfolderpath.value + "paths.xml") is False: printl("Check paths.xml - Missing -> Downloading", __name__) WebGrabber.getFile( DEFAULTURL + "paths.xml", config.plugins.pvmc.configfolderpath.value + "paths.xml") printl("\t- Created", __name__) else: printl("\t- OK", __name__) except Exception, ex: printl("Exception: " + str(ex), __name__)
def save(self, url, file=None, overwrite=False, useDuck=False): if useDuck is False: urlresponse = WebGrabber.getText(url, cache=False) else: try: urlresponse = DuckboxAPI.sendFile(url, file, ()) except: urlresponse = "" printl("EXCEPTION ON DUCKAPI") printl("urlresponse=" + str(urlresponse), self, "D") if urlresponse is not None and urlresponse != "NONE": urlresponse = urlresponse.strip().split("<br />") for file in urlresponse: fileInfo = file.strip().split('|') printl("fileInfo=" + str(fileInfo), self, "D") if len(fileInfo) == 2: printl("overwrite => " + str(overwrite), self, "I") WebGrabber.getFile(self.URL + fileInfo[1], fileInfo[0], retry=3, fixurl=True, overwrite=overwrite)
def getMovie(self, info, lang): if info.TmDbId == info.TmDbIdNull: printl(" <- None (info.TmDbId == info.TmDbIdNull)", self) return None lang = lang.lower() if lang == u"en": return info #en already parsed using getSerieByImdbID() url = self.apiImdbLookup url = re.sub("<imdbid>", info.ImdbId, url) url = re.sub("<lang>", lang, url) xml = WebGrabber.getXml(url) if xml is None: printl(" <- None (xml is None)", self) return None movieList = xml.getElementsByTagName("movie") for eMovie in movieList: if self.getTranslated(eMovie) is False: continue #tmp = self.getTmdbId(info, eMovie) #if tmp is not None: # info = tmp #tmp = self.getImdbId(info, eMovie) #if tmp is not None: # info = tmp tmp = self.getName(info, eMovie) if tmp is not None: info = tmp tmp = self.getOverview(info, eMovie) if tmp is not None: info = tmp tmp = self.getReleased(info, eMovie) if tmp is not None: info = tmp tmp = self.getRating(info, eMovie) if tmp is not None: info = tmp tmp = self.getRuntime(info, eMovie) if tmp is not None: info = tmp tmp = self.getGenre(info, eMovie) if tmp is not None: info = tmp return info printl(" <- None (eof)", self) return None
def getArtByTheTvDbId(self, info): if info.TheTvDbId == info.TheTvDbIdNull: printl(" <- None (info.TheTvDbId == info.TheTvDbIdNull)", self) return None url = self.apiSeriesByID url = re.sub("<seriesid>", info.TheTvDbId, url) url = re.sub("<lang>", u"en", url) xml = WebGrabber.getXml(url) if xml is None: WebGrabber.removeFromCache(url) printl(" <- None (xml is None)", self) return None movieList = xml.getElementsByTagName("Series") for eMovie in movieList: for p in eMovie.getElementsByTagName("poster"): if len(p.childNodes) > 0: info.Poster = self.apiArt + p.childNodes[0].data break for p in eMovie.getElementsByTagName("fanart"): if len(p.childNodes) > 0: info.Backdrop = self.apiArt + p.childNodes[0].data break if info.isTypeSerie(): tmp = self.getSeasonArtByTheTvDbId(info) if tmp is not None and len(tmp.SeasonPoster.values()) > 0: info = tmp else: info.SeasonPoster.clear() if len(info.Poster) > 0 or len(info.Backdrop) > 0: return info WebGrabber.removeFromCache(url) printl(" <- None (eof)", self) return None
def getArtByTheTvDbId(self, info): if info.TheTvDbId == info.TheTvDbIdNull: printl(" <- None (info.TheTvDbId == info.TheTvDbIdNull)", self) return None url = self.apiSeriesByID; url = re.sub("<seriesid>", info.TheTvDbId, url) url = re.sub("<lang>", u"en", url) xml = WebGrabber.getXml(url); if xml is None: WebGrabber.removeFromCache(url) printl(" <- None (xml is None)", self) return None movieList = xml.getElementsByTagName("Series") for eMovie in movieList: for p in eMovie.getElementsByTagName("poster"): if len(p.childNodes) > 0: info.Poster = self.apiArt + p.childNodes[0].data break for p in eMovie.getElementsByTagName("fanart"): if len(p.childNodes) > 0: info.Backdrop = self.apiArt + p.childNodes[0].data break if info.isTypeSerie(): tmp = self.getSeasonArtByTheTvDbId(info) if tmp is not None and len(tmp.SeasonPoster.values()) > 0: info = tmp else: info.SeasonPoster.clear() if len(info.Poster) > 0 or len(info.Backdrop) > 0: return info WebGrabber.removeFromCache(url) printl(" <- None (eof)", self) return None
def getMovieByTitle(self, mediaInfo): if mediaInfo.isTypeSerie(): urlTitle = mediaInfo.SearchString urlTitle = re.sub(" ", "+", urlTitle) pageHtml = WebGrabber.getHtml( re.sub("<title>", urlTitle, self.apiSearchTV)) if not pageHtml: return mediaInfo m = re.search(r'Most Popular TV Series With Title Matching', pageHtml) if m and m.group(): mediaInfo = self.parseAdvancedSearchResultScreen( mediaInfo, pageHtml) mediaInfo = self.getMoviesByImdbId(mediaInfo) if mediaInfo.ImdbId != "tt0000000": return mediaInfo urlTitle = mediaInfo.SearchString urlTitle = re.sub(" ", "+", urlTitle) pageHtml = WebGrabber().grab(self.apiSearch + urlTitle) if not pageHtml: return mediaInfo pageHtml = decode_htmlentities(pageHtml) m = re.search(r'<title>IMDb Title Search</title>', pageHtml) if m and m.group(): mediaInfo = self.parseSearchResultScreen(mediaInfo, pageHtml) mediaInfo = self.getMoviesByImdbId(mediaInfo) else: #m = re.search(r'<title>.+?\(?P<year>\d{4}[\/IVX]*\).*?</title>', pageHtml) #if m and m.group(): mediaInfo = self.parseDetailsScreen(mediaInfo, pageHtml) return mediaInfo
def getPlot(self, mediaInfo): if mediaInfo.ImdbId == mediaInfo.ImdbIdNull: return mediaInfo pageHtml = WebGrabber.getHtml(self.apiImdbLookup + mediaInfo.ImdbId + "/plotsummary") if not pageHtml: return mediaInfo m = re.search(r'<p class=\"plotpar\">\s*(?P<plot>[^<]+?)<i>', pageHtml) if m and m.group("plot"): mediaInfo.Plot = unicode(m.group("plot").strip()) return mediaInfo
def getMoviesByImdbId(self, mediaInfo): if mediaInfo.ImdbId == mediaInfo.ImdbIdNull: return mediaInfo pageHtml = WebGrabber.getHtml(self.apiImdbLookup + mediaInfo.ImdbId) if not pageHtml: return mediaInfo m = re.search(r'<title>.+?\(\d{4}[\/IVX]*\).*?</title>', pageHtml) if m and m.group(): mediaInfo = self.parseDetailsScreen(mediaInfo, pageHtml) return mediaInfo
def getAlternatives(self, info): url = self.apiSearch url = re.sub("<search>", info.SearchString, url) html = WebGrabber.getHtml(url) if html is None: #print "MobileImdbComProvider::getAlternatives() <- html is None" return None if self.testNoResults in html: #print "MobileImdbComProvider::getAlternatives() <- self.testNoResults in html" return None results = self.getResults(html) return results
def getMovieByImdbID(self, info): printl ("", self, "S") if info.ImdbId == info.ImdbIdNull: printl("None (info.ImdbId == info.ImdbIdNull)", self, "I") printl ("", self, "C") return None url = self.apiImdbLookup url = re.sub("<imdbid>", info.ImdbId, url) url = re.sub("<lang>", u"en", url) result = WebGrabber.getJson(url) if result is None: printl("None (result is None)", self, "I") printl ("", self, "C") return None eMovie = json.loads(result) tmp = self.getTmdbId(info, eMovie) if tmp is not None: info = tmp #tmp = self.getImdbId(info, eMovie) #if tmp is not None: # info = tmp tmp = self.getName(info, eMovie) if tmp is not None: info = tmp tmp = self.getOverview(info, eMovie) if tmp is not None: info = tmp tmp = self.getReleased(info, eMovie) if tmp is not None: info = tmp tmp = self.getRating(info, eMovie) if tmp is not None: info = tmp tmp = self.getRuntime(info, eMovie) if tmp is not None: info = tmp tmp = self.getGenre(info, eMovie) if tmp is not None: info = tmp printl ("", self, "C") return info
def getMovieByImdbID(self, info): if info.ImdbId == info.ImdbIdNull: printl(" <- None (info.ImdbId == info.ImdbIdNull)", self) return None url = self.apiImdbLookup url = re.sub("<imdbid>", info.ImdbId, url) url = re.sub("<lang>", u"en", url) xml = WebGrabber.getXml(url) if xml is None: printl(" <- None (xml is None)", self) return None movieList = xml.getElementsByTagName("movie") for eMovie in movieList: tmp = self.getTmdbId(info, eMovie) if tmp is not None: info = tmp #tmp = self.getImdbId(info, eMovie) #if tmp is not None: # info = tmp tmp = self.getName(info, eMovie) if tmp is not None: info = tmp tmp = self.getOverview(info, eMovie) if tmp is not None: info = tmp tmp = self.getReleased(info, eMovie) if tmp is not None: info = tmp tmp = self.getRating(info, eMovie) if tmp is not None: info = tmp tmp = self.getRuntime(info, eMovie) if tmp is not None: info = tmp tmp = self.getGenre(info, eMovie) if tmp is not None: info = tmp return info printl(" <- None (eof)", self) return None
def run(): enrollmentSummaryHTML = WebGrabber.grab() CS = CourseScraper.CourseScraper(enrollmentSummaryHTML) courseList = CS.getCourses() print "The following courses were found:" for course in courseList: print(course) calMaker = iCalMaker.iCalMaker(courseList) ics = calMaker.getICS() # write the .ics file to the disk f = open("Spring2015Courses.ics", "w") f.write(ics) f.close() print ("""\nCalendarization successful! A file called "Spring2015Courses.ics" """ + """has been created for you to import into your Google Calendar.""")
def getEpisodeByImdbID(self, info, lang): if info.Episode == -1 or info.Season == -1: printl(" <- None (info.Episode == -1 or info.Season == -1)", self) return None url = self.apiEpisodeList url = re.sub("<imdbid>", info.ImdbId, url) url = re.sub("<lang>", lang, url) html = WebGrabber.getHtml(url) if html is None: printl(" <- None (html is None)", self) return None results = self.getResults(html, lang) for result in results: if result.Season == info.Season and result.Episode == info.Episode: return self.getMoviesByImdbID(info, lang, result.ImdbId) printl(" <- None (eof)", self) return None
def getMoviesByImdbID(self, info, lang, imdbid=None): url = self.apiPlot if imdbid is not None: url = re.sub("<imdbid>", imdbid, url) else: url = re.sub("<imdbid>", info.ImdbId, url) url = re.sub("<lang>", lang, url) html = WebGrabber.getHtml(url) if html is None: printl(" <- None (html is None)", self) return None; tmp = self.getTitle(info, html) if tmp is not None: info = tmp tmp = self.getPlot(info, html) if tmp is not None: info = tmp return info;
def getMoviesByImdbID(self, info, lang, imdbid=None): url = self.apiPlot if imdbid is not None: url = re.sub("<imdbid>", imdbid, url) else: url = re.sub("<imdbid>", info.ImdbId, url) url = re.sub("<lang>", lang, url) html = WebGrabber.getHtml(url) if html is None: printl(" <- None (html is None)", self) return None tmp = self.getTitle(info, html) if tmp is not None: info = tmp tmp = self.getPlot(info, html) if tmp is not None: info = tmp return info
def getMovieByTitle(self, mediaInfo): if mediaInfo.isTypeSerie(): urlTitle = mediaInfo.SearchString urlTitle = re.sub(" ", "+", urlTitle) pageHtml = WebGrabber.getHtml(re.sub("<title>", urlTitle, self.apiSearchTV)) if not pageHtml: return mediaInfo m = re.search(r'Most Popular TV Series With Title Matching', pageHtml) if m and m.group(): mediaInfo = self.parseAdvancedSearchResultScreen(mediaInfo, pageHtml) mediaInfo = self.getMoviesByImdbId(mediaInfo) if mediaInfo.ImdbId != "tt0000000": return mediaInfo urlTitle = mediaInfo.SearchString urlTitle = re.sub(" ", "+", urlTitle) pageHtml = WebGrabber().grab(self.apiSearch + urlTitle) if not pageHtml: return mediaInfo pageHtml = decode_htmlentities(pageHtml) m = re.search(r'<title>IMDb Title Search</title>', pageHtml) if m and m.group(): mediaInfo = self.parseSearchResultScreen(mediaInfo, pageHtml) mediaInfo = self.getMoviesByImdbId(mediaInfo) else: #m = re.search(r'<title>.+?\(?P<year>\d{4}[\/IVX]*\).*?</title>', pageHtml) #if m and m.group(): mediaInfo = self.parseDetailsScreen(mediaInfo, pageHtml) return mediaInfo
def getArtByImdbId(self, info): if info.ImdbId == info.ImdbIdNull: printl(" <- None (info.ImdbId == info.ImdbIdNull)", self) return None url = self.apiImdbLookup url = re.sub("<imdbid>", info.ImdbId, url) url = re.sub("<lang>", u"en", url) xml = WebGrabber.getXml(url) if xml is None: printl(" <- None (xml is None)", self) return None movieList = xml.getElementsByTagName("movie") # The best picture is always the first, we may need to check addidonal languages for eMovie in movieList: for p in eMovie.getElementsByTagName("image"): if p.getAttribute("type") == "poster" and p.getAttribute("size") == "original": info.Poster = p.getAttribute("url") if len(info.Poster) > 0: break for eMovie in movieList: for p in eMovie.getElementsByTagName("image"): if p.getAttribute("type") == "backdrop" and p.getAttribute("size") == "original": info.Backdrop = p.getAttribute("url") if len(info.Backdrop) > 0: break if len(info.Poster) > 0 or len(info.Backdrop) > 0: return info printl(" <- None (eof)", self) return None
try: printl("Check " + config.plugins.pvmc.mediafolderpath.value, __name__, "I") os.makedirs(config.plugins.pvmc.mediafolderpath.value) except OSError, e: printl("\t- OK", __name__, "I") else: printl("\t- Created", __name__, "I") DEFAULTURL = "http://project-valerie.googlecode.com/svn/trunk/default/" printl("Check " + config.plugins.pvmc.mediafolderpath.value + "*", __name__, "I") if os.access(config.plugins.pvmc.mediafolderpath.value + "defaultbackdrop.m1v", os.F_OK) is False: printl("Check defaultbackdrop.m1v - Missing -> Downloading", __name__, "I") WebGrabber.getFile(DEFAULTURL+"defaultbackdrop.m1v", "defaultbackdrop.m1v") if os.access(config.plugins.pvmc.mediafolderpath.value + "defaultposter.png", os.F_OK) is False: printl("Check defaultposter.png - Missing -> Downloading", __name__, "I") WebGrabber.getFile(DEFAULTURL+"defaultposter.png", "defaultposter.png") if os.access(config.plugins.pvmc.mediafolderpath.value + "defaultposter_110x214.png", os.F_OK) is False: printl("Check defaultposter_110x214.png - Missing -> Downloading", __name__, "I") WebGrabber.getFile(DEFAULTURL+"defaultposter_110x214.png", "defaultposter_110x214.png") if os.access(config.plugins.pvmc.mediafolderpath.value + "defaultposter_156x214.png", os.F_OK) is False: printl("Check defaultposter_156x214.png - Missing -> Downloading", __name__, "I") WebGrabber.getFile(DEFAULTURL+"defaultposter_156x214.png", "defaultposter_156x214.png") if os.access(config.plugins.pvmc.mediafolderpath.value + "defaultposter_195x267.png", os.F_OK) is False: printl("Check defaultposter_195x267.png - Missing -> Downloading", __name__, "I")
def getMoviesByTitle(self, info): if info.ImdbId != info.ImdbIdNull: printl( "IMDb-ID already set to '" + str(info.ImdbId) + "' - get movie by ID instead... ", self, "I") info2 = self.getMoviesByImdbID(info) if info2 is not None: printl("Get movie by ID succeeded. ", self, "I") return info2 url = self.apiSearch url = re.sub("<search>", info.SearchString, url) html = WebGrabber.getHtml(url) if html is None: printl("<- None (html is None)", self) return None if self.testNoResults in html: printl("<- None (self.testNoResults in html)", self) return None #print "MIMDB seraches for ", info.is_Movie, info.is_Episode, info.is_Serie year = info.Year results = self.getResults(html) printl("Results are: ", self) for result in results: printl("\t" + str(result), self) for result in results: if info.isTypeEpisode() or info.isTypeSerie(): if not result.IsTVSeries: printl( "Searched media is a TV-show - but result seems to be a movie => skip...", self, "I") continue else: # is_Movie if result.IsTVSeries: printl( "Searched media is a movie - but result seems to be a TV-show => skip...", self, "I") continue # We check if year +-1, cause sometimes the year is wrong by one year if year is None or year <= 0 or year == result.Year or ( year + 1) == result.Year or (year - 1) == result.Year: info.ImdbId = result.ImdbId info.Title = result.Title info.Year = result.Year printl("Get movie by ID '" + str(info.ImdbId) + "'", self, "I") tmp = self.getMoviesByImdbID(info) if tmp is not None: info = tmp printl( "Get movie by ID succeeded: " + str(info.ImdbId) + "'", self, "I") return info printl("<- None (eof)", self) return None
printl("\t- Created", __name__) try: printl( "Check " + config.plugins.pvmc.configfolderpath.value, __name__) os.makedirs(config.plugins.pvmc.configfolderpath.value) except OSError, e: printl("\t- OK", __name__) else: printl("\t- Created", __name__) printl( "Check sync.xml and valerie.conf - Missing -> Downloading", __name__) WebGrabber.getFile(DEFAULTURL + self._name, self._nameAbs) printl("\t- Created", __name__) return self.load(downloadIfNotFound=False) # Its loaded so lets walk through the dict and fix errors print(self._dict) if save: self.save() def loadOldPathsConf(self): if os.path.isfile(config.plugins.pvmc.configfolderpath.value + "valerie.conf") is False: return None _dict = {}
os.makedirs(config.plugins.pvmc.tmpfolderpath.value + "cache") except OSError, e: printl("\t- OK", __name__) else: printl("\t- Created", __name__) try: printl("Check " + config.plugins.pvmc.configfolderpath.value, __name__) os.makedirs(config.plugins.pvmc.configfolderpath.value) except OSError, e: printl("\t- OK", __name__) else: printl("\t- Created", __name__) printl("Check sync.xml and valerie.conf - Missing -> Downloading", __name__) WebGrabber.getFile(DEFAULTURL+self._name, self._nameAbs) printl("\t- Created", __name__) return self.load(downloadIfNotFound=False) # Its loaded so lets walk through the dict and fix errors print(self._dict) if save: self.save() def loadOldPathsConf(self): if os.path.isfile(config.plugins.pvmc.configfolderpath.value + "valerie.conf") is False: return None _dict = {} _dict["xml"] = {}
def getEpisode(self, info, lang): if info.TheTvDbId == info.TheTvDbIdNull or info.Episode == -1 or info.Season == -1: printl( " <- None (info.TheTvDbId == info.TheTvDbIdNull or info.Episode == -1 or info.Season == -1)", self) return None lang = lang.lower() url = self.apiSearchEpisode # self.apiSearchAllEpisodes url = re.sub("<seriesid>", info.TheTvDbId, url) url = re.sub("<lang>", lang, url) url = re.sub("<season>", unicode(info.Season), url) url = re.sub("<episode>", unicode(info.Episode), url) xml = WebGrabber.getXml(url) if xml is None: WebGrabber.removeFromCache(url) printl(" <- None (xml is None)", self) return None movieList = xml.getElementsByTagName("Episode") for eMovie in movieList: entryLang = self.getLanguage(eMovie).lower() if entryLang != lang: continue episode = info.Episode season = info.Season tmp = self.getEpisodeAndSeasonNumber(info, eMovie) if tmp is None: info.Episode = episode info.Season = season continue else: info = tmp if info.Episode != episode or info.Season != season: info.Episode = episode info.Season = season continue #tmp = self.getTvdbId(info, eMovie) #if tmp is not None: # info = tmp #tmp = self.getImdbId(info, eMovie) #if tmp is not None: # info = tmp tmp = self.getEpisodeName(info, eMovie) if tmp is not None: info = tmp tmp = self.getOverview(info, eMovie) if tmp is not None: info = tmp tmp = self.getFirstAired(info, eMovie) if tmp is not None: info = tmp tmp = self.getDirector(info, eMovie) if tmp is not None: info = tmp tmp = self.getWriter(info, eMovie) if tmp is not None: info = tmp tmp = self.getRuntime(info, eMovie) if tmp is not None: info = tmp tmp = self.getRating(info, eMovie) if tmp is not None: info = tmp tmp = self.getGenre(info, eMovie) if tmp is not None: info = tmp return info WebGrabber.removeFromCache(url) printl(" <- None (eof)", self) return None
def getEpisode(self, info, lang): if info.TheTvDbId == info.TheTvDbIdNull or info.Episode == -1 or info.Season == -1: printl(" <- None (info.TheTvDbId == info.TheTvDbIdNull or info.Episode == -1 or info.Season == -1)", self) return None lang = lang.lower() url = self.apiSearchEpisode # self.apiSearchAllEpisodes url = re.sub("<seriesid>", info.TheTvDbId, url) url = re.sub("<lang>", lang, url) url = re.sub("<season>", unicode(info.Season), url) url = re.sub("<episode>", unicode(info.Episode), url) xml = WebGrabber.getXml(url) if xml is None: WebGrabber.removeFromCache(url) printl(" <- None (xml is None)", self) return None movieList = xml.getElementsByTagName("Episode") for eMovie in movieList: entryLang = self.getLanguage(eMovie).lower() if entryLang != lang: continue episode = info.Episode season = info.Season tmp = self.getEpisodeAndSeasonNumber(info, eMovie) if tmp is None: info.Episode = episode info.Season = season continue else: info = tmp if info.Episode != episode or info.Season != season: info.Episode = episode info.Season = season continue #tmp = self.getTvdbId(info, eMovie) #if tmp is not None: # info = tmp #tmp = self.getImdbId(info, eMovie) #if tmp is not None: # info = tmp tmp = self.getEpisodeName(info, eMovie) if tmp is not None: info = tmp tmp = self.getOverview(info, eMovie) if tmp is not None: info = tmp tmp = self.getFirstAired(info, eMovie) if tmp is not None: info = tmp tmp = self.getDirector(info, eMovie) if tmp is not None: info = tmp tmp = self.getWriter(info, eMovie) if tmp is not None: info = tmp tmp = self.getRuntime(info, eMovie) if tmp is not None: info = tmp tmp = self.getRating(info, eMovie) if tmp is not None: info = tmp tmp = self.getGenre(info, eMovie) if tmp is not None: info = tmp return info WebGrabber.removeFromCache(url) printl(" <- None (eof)", self) return None
except OSError, e: printl("\t- OK", __name__, "I") else: printl("\t- Created", __name__, "I") DEFAULTURL = "http://project-valerie.googlecode.com/svn/trunk/default/" printl("Check " + config.plugins.pvmc.mediafolderpath.value + "*", __name__, "I") if os.access( config.plugins.pvmc.mediafolderpath.value + "defaultbackdrop.m1v", os.F_OK) is False: printl("Check defaultbackdrop.m1v - Missing -> Downloading", __name__, "I") WebGrabber.getFile(DEFAULTURL + "defaultbackdrop.m1v", "defaultbackdrop.m1v") if os.access( config.plugins.pvmc.mediafolderpath.value + "defaultposter.png", os.F_OK) is False: printl("Check defaultposter.png - Missing -> Downloading", __name__, "I") WebGrabber.getFile(DEFAULTURL + "defaultposter.png", "defaultposter.png") if os.access( config.plugins.pvmc.mediafolderpath.value + "defaultposter_110x214.png", os.F_OK) is False: printl("Check defaultposter_110x214.png - Missing -> Downloading", __name__, "I") WebGrabber.getFile(DEFAULTURL + "defaultposter_110x214.png",