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;
예제 #2
0
    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
예제 #3
0
	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)
예제 #4
0
	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
예제 #6
0
	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
예제 #7
0
    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
예제 #8
0
    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
예제 #9
0
	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
예제 #11
0
    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	
예제 #13
0
    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
예제 #14
0
    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;
예제 #16
0
    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
예제 #17
0
	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
예제 #18
0
    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