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 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 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 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 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 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 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