def displayMovies(request_obj, response_obj): url = request_obj.get_data()['movieCategoryUrl'] print "indisplay" + url if request_obj.get_data().has_key('page'): url_parts = url.split('?') url_part_A = '' url_part_B = '' if len(url_parts) == 2: url_part_A = url_parts[0] url_part_B = '?' + url_parts[1] else: url_part_A = url if url_part_A[len(url_part_A) - 1] != '/': url_part_A = url_part_A + '/' url = url_part_A + 'page/' + request_obj.get_data()['page'] + url_part_B contentDiv = BeautifulSoup.SoupStrainer('div', {'id':'content'}) soup = HttpClient().getBeautifulSoup(url=url, parseOnlyThese=contentDiv) movieTags = soup.findChildren('div', {'class':'post'}) print "intags" + str(movieTags) if len(movieTags) == 0: movieTags = soup.findChildren('div', {'class':'videopost'}) for movieTag in movieTags: item = __retrieveAndCreateMovieItem__(movieTag) response_obj.addListItem(item) response_obj.set_xbmc_content_type('movies') try: pagesInfoTag = soup.findChild('div', {'class':'navigation'}) current_page = int(pagesInfoTag.find('span', {'class':'page current'}).getText()) #print current_page pages = pagesInfoTag.findChildren('a', {'class':'page'}) #print pages last_page = int(pages[len(pages) - 1].getText()) if current_page < last_page: for page in range(current_page + 1, last_page + 1): createItem = False if page == last_page: pageName = AddonUtils.getBoldString(' -> Last Page #' + str(page)) createItem = True elif page <= current_page + 4: pageName = AddonUtils.getBoldString(' -> Page #' + str(page)) createItem = True if createItem: item = ListItem() item.add_request_data('movieCategoryUrl', request_obj.get_data()['movieCategoryUrl']) item.add_request_data('page', str(page)) item.set_next_action_name('Movies_List_Next_Page') xbmcListItem = xbmcgui.ListItem(label=pageName) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item) except: pass
def displayMovies(request_obj, response_obj): url = request_obj.get_data()["movieCategoryUrl"] if request_obj.get_data().has_key("page"): url_parts = url.split("?") url_part_A = "" url_part_B = "" if len(url_parts) == 2: url_part_A = url_parts[0] url_part_B = "?" + url_parts[1] else: url_part_A = url if url_part_A[len(url_part_A) - 1] != "/": url_part_A = url_part_A + "/" url = url_part_A + "page/" + request_obj.get_data()["page"] + url_part_B contentDiv = BeautifulSoup.SoupStrainer("div", {"id": "content"}) soup = HttpClient().getBeautifulSoup(url=url, parseOnlyThese=contentDiv) movieTags = soup.findChildren("div", {"class": "post"}) for movieTag in movieTags: item = __retrieveAndCreateMovieItem__(movieTag) response_obj.addListItem(item) response_obj.set_xbmc_content_type("movies") pagesInfoTag = soup.findChild("div", {"class": "navigation"}) print pagesInfoTag current_page = int(pagesInfoTag.find("span", {"class": "page current"}).getText()) print current_page pages = pagesInfoTag.findChildren("a", {"class": "page"}) print pages last_page = int(pages[len(pages) - 1].getText()) if current_page < last_page: for page in range(current_page + 1, last_page + 1): createItem = False if page == last_page: pageName = AddonUtils.getBoldString(" -> Last Page #" + str(page)) createItem = True elif page <= current_page + 4: pageName = AddonUtils.getBoldString(" -> Page #" + str(page)) createItem = True if createItem: item = ListItem() item.add_request_data("movieCategoryUrl", request_obj.get_data()["movieCategoryUrl"]) item.add_request_data("page", str(page)) item.set_next_action_name("Movies_List_Next_Page") xbmcListItem = xbmcgui.ListItem(label=pageName) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item)
def __preparePlayListItem__(video_items, source): video_playlist_items = [] video_source_img = None video_source_name = None for item in video_items: video_item = {} video_item['videoLink'] = item.get_request_data()['videoLink'] video_item['videoTitle'] = item.get_request_data()['videoTitle'] video_playlist_items.append(video_item) video_source_img = item.get_moving_data()['videoSourceImg'] video_source_name = item.get_moving_data()['videoSourceName'] Logger.logDebug('IMAGE :: ') Logger.logDebug(video_source_img) Logger.logDebug(type(video_source_img)) item = ListItem() item.add_request_data('videoPlayListItems', video_playlist_items) item.add_moving_data('isContinuousPlayItem', True) item.add_moving_data('videoSourceName', video_source_name) item.set_next_action_name('Play_AllStreams') xbmcListItem = xbmcgui.ListItem( label='[COLOR blue]' + AddonUtils.getBoldString('Continuous Play') + '[/COLOR]' + ' | ' + 'Source #' + source + ' | ' + 'Parts = ' + str(len(video_playlist_items)), iconImage=video_source_img, thumbnailImage=video_source_img) item.set_xbmc_list_item_obj(xbmcListItem) return item
def __preparePlayListItem__(video_source_id, video_source_img, video_playlist_items): item = ListItem() item.add_request_data('videoPlayListItems', video_playlist_items) item.set_next_action_name('SnapAndDirectPlayList') xbmcListItem = xbmcgui.ListItem(label=AddonUtils.getBoldString('DirectPlay') + ' | ' + 'Source #' + str(video_source_id) + ' | ' + 'Parts = ' + str(len(video_playlist_items)) , iconImage=video_source_img, thumbnailImage=video_source_img) item.set_xbmc_list_item_obj(xbmcListItem) return item
def displayTVShowEpisodes(request_obj, response_obj): url = request_obj.get_data()['tvChannelUrl'] contentDiv = GetContent(url) newcontent = ''.join(contentDiv.encode("utf-8").splitlines()).replace('\t','') contentDiv = BeautifulSoup.SoupStrainer('div', {'id':'content'}) soup = HttpClient().getBeautifulSoup(url=url, parseOnlyThese=contentDiv) videoBoxes =re.compile("<div id='videobox'>(.+?)</h3><div style='clear: both;'>").findall(newcontent) for videoBox in videoBoxes: #imgTag = videoBox.findChild('img') imageUrl = re.compile('<img [^>]*src=["\']?([^>^"^\']+)["\']?[^>]*>').findall(str(videoBox))[0] match=re.compile('createSummaryThumb\("(.+?)","(.+?)","(.+?)",').findall(str(videoBox)) if(len(match)>0): episodeName = match[0][1] episodeUrl = str(match[0][2]) item = ListItem() item.add_request_data('episodeName', episodeName) item.add_request_data('episodeUrl', episodeUrl) item.set_next_action_name('Show_Episode_VLinks') xbmcListItem = xbmcgui.ListItem(label=episodeName, iconImage=imageUrl, thumbnailImage=imageUrl) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item) pageTag = soup.findChild('div', {'class':'postnav'}) if(pageTag !=None): olderPageTag = pageTag.findChild('a', {'class':'blog-pager-older-link'}) else: olderPageTag = None if olderPageTag is not None: item = ListItem() item.add_request_data('tvChannelUrl', str(olderPageTag['href'])) pageName = AddonUtils.getBoldString(' -> Next Page') item.set_next_action_name('Show_Episodes_Next_Page') xbmcListItem = xbmcgui.ListItem(label=pageName) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item)
def __preparePlayListItem__(video_source_id, video_source_img, video_playlist_items): item = ListItem() item.add_request_data('videoPlayListItems', video_playlist_items) item.set_next_action_name('SnapAndDirectPlayList') xbmcListItem = xbmcgui.ListItem(label=AddonUtils.getBoldString('DirectPlay') + ' | ' + 'Source #' + str(video_source_id) + ' | ' + 'Parts = ' + str(len(video_playlist_items)) , iconImage=video_source_img, thumbnailImage=video_source_img) item.set_xbmc_list_item_obj(xbmcListItem) return item
def displayTVShowEpisodes(request_obj, response_obj): url = request_obj.get_data()['tvChannelUrl'] contentDiv = BeautifulSoup.SoupStrainer('div', {'id':'content'}) soup = HttpClient().getBeautifulSoup(url=url, parseOnlyThese=contentDiv) videoBoxes = soup.findChildren('div', {'id':'videobox'}) for videoBox in videoBoxes: imgTag = videoBox.findChild('img') imageUrl = str(imgTag['src']) metaTag = videoBox.findChild('div', {'class':'meta'}) aTag = metaTag.findChild('a') episodeName = aTag.getText() episodeUrl = str(aTag['href']) item = ListItem() item.add_request_data('episodeName', episodeName) item.add_request_data('episodeUrl', episodeUrl) item.set_next_action_name('Show_Episode_VLinks') xbmcListItem = xbmcgui.ListItem(label=episodeName, iconImage=imageUrl, thumbnailImage=imageUrl) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item) pageTag = soup.findChild('div', {'class':'postnav'}) olderPageTag = pageTag.findChild('a', {'class':'blog-pager-older-link'}) if olderPageTag is not None: item = ListItem() item.add_request_data('tvChannelUrl', str(olderPageTag['href'])) pageName = AddonUtils.getBoldString(' -> Next Page') item.set_next_action_name('Show_Episodes_Next_Page') xbmcListItem = xbmcgui.ListItem(label=pageName) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item)
def __preparePlayListItem__(video_source_id, video_source_img, video_source_name, video_playlist_items): item = ListItem() item.add_request_data('videoPlayListItems', video_playlist_items) item.set_next_action_name('SnapAndDirectPlayList') item.add_moving_data('isContinuousPlayItem', True) item.add_moving_data('videoSourceName', video_source_name) xbmcListItem = xbmcgui.ListItem(label='[COLOR blue]' + AddonUtils.getBoldString('Continuous Play') + '[/COLOR]' + ' | ' + 'Source #' + str(video_source_id) + ' | ' + 'Parts = ' + str(len(video_playlist_items)) , iconImage=video_source_img, thumbnailImage=video_source_img) item.set_xbmc_list_item_obj(xbmcListItem) return item
def retrieveTVShowEpisodes(request_obj, response_obj): Container().ga_client.reportContentUsage('dr_tvshow', request_obj.get_data()['tvShowName']) url = request_obj.get_data()['tvShowUrl'] if request_obj.get_data().has_key('page'): url = url + '&page=' + request_obj.get_data()['page'] contentDiv = BeautifulSoup.SoupStrainer('div', {'id':'contentBody'}) soup = HttpClient().getBeautifulSoup(url=url, parseOnlyThese=contentDiv) if not request_obj.get_data().has_key('page'): threads = soup.find('ol', {'class':'stickies', 'id':'stickies'}) __retrieveTVShowEpisodes__(threads, response_obj) threads = soup.find('ol', {'class':'threads', 'id':'threads'}) __retrieveTVShowEpisodes__(threads, response_obj) pagesDiv = soup.find('div', {'class':'threadpagenav'}) if pagesDiv is not None: pagesInfoTag = pagesDiv.find('a', {'class':re.compile(r'\bpopupctrl\b')}) if pagesInfoTag is not None: pageInfo = re.compile('Page (.+?) of (.+?) ').findall(pagesInfoTag.getText() + ' ') currentPage = int(pageInfo[0][0]) totalPages = int(pageInfo[0][1]) for page in range(1, totalPages + 1): if page != currentPage: item = ListItem() item.add_request_data('tvShowName', request_obj.get_data()['tvShowName']) item.add_request_data('tvShowUrl', request_obj.get_data()['tvShowUrl']) if page != 1: item.add_request_data('page', str(page)) pageName = '' if page < currentPage: pageName = AddonUtils.getBoldString(' <- Page #' + str(page)) else: pageName = AddonUtils.getBoldString(' -> Page #' + str(page)) item.set_next_action_name('Show_Episodes_Next_Page') xbmcListItem = xbmcgui.ListItem(label=pageName) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item)
def __displayTVShows__(tvShowsList, channelType, finished=False): items = [] for tvShow in tvShowsList: tvShowName = tvShow['name'] if finished: tvShowName = tvShowName + ' [' + AddonUtils.getBoldString('finished') + '] ' item = ListItem() item.add_request_data('channelType', channelType) item.add_request_data('tvShowName', tvShowName) item.add_request_data('tvShowUrl', tvShow['url']) item.set_next_action_name('Show_Episodes') xbmcListItem = xbmcgui.ListItem(label=tvShowName) item.set_xbmc_list_item_obj(xbmcListItem) items.append(item) return items
def retrieveTVShowEpisodes(request_obj, response_obj): contentDiv = BeautifulSoup.SoupStrainer('div', {'id':'content'}) url = request_obj.get_data()['tvShowUrl'] channelType = request_obj.get_data()['channelType'] if request_obj.get_data().has_key('page'): url = url + 'page/' + request_obj.get_data()['page'] soup = HttpClient().getBeautifulSoup(url=url, parseOnlyThese=contentDiv) for aTag in soup.findAll('a', {'rel':'bookmark'}): episodeName = aTag.getText() try: time.strptime(episodeName, '%B %d, %Y') continue except: if re.search('Written Episode', episodeName): pass else: item = ListItem() item.add_request_data('episodeName', episodeName) item.add_request_data('episodeUrl', str(aTag['href'])) item.set_next_action_name(channelType + '_Episode_VLinks') xbmcListItem = xbmcgui.ListItem(label=episodeName) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item) pagesDiv = soup.find('div', {'class':'wp-pagenavi'}) if pagesDiv is not None: pagesInfoTag = pagesDiv.find('span', {'class':'pages'}, recursive=False) if pagesInfoTag is not None: pageInfo = re.compile('Page (.+?) of (.+?) ').findall(pagesInfoTag.getText() + ' ') currentPage = int(pageInfo[0][0].replace(',','')) totalPages = int(pageInfo[0][1].replace(',','')) for page in range(1, totalPages + 1): if page == 1 or page == totalPages or page == currentPage - 1 or page == currentPage + 1: if page != currentPage: item = ListItem() item.add_request_data('channelType', channelType) item.add_request_data('tvShowName', request_obj.get_data()['tvShowName']) item.add_request_data('tvShowUrl', request_obj.get_data()['tvShowUrl']) if page != 1: item.add_request_data('page', str(page)) pageName = AddonUtils.getBoldString(' -> Page #' + str(page)) item.set_next_action_name('Show_Episodes_Next_Page') xbmcListItem = xbmcgui.ListItem(label=pageName) item.set_xbmc_list_item_obj(xbmcListItem) response_obj.addListItem(item)
def __preparePlayListItem__(video_source_id, video_source_img, video_playlist_items): item = ListItem() item.add_request_data("videoPlayListItems", video_playlist_items) item.set_next_action_name("SnapAndDirectPlayList") xbmcListItem = xbmcgui.ListItem( label=AddonUtils.getBoldString("DirectPlay") + " | " + "Source #" + str(video_source_id) + " | " + "Parts = " + str(len(video_playlist_items)), iconImage=video_source_img, thumbnailImage=video_source_img, ) item.set_xbmc_list_item_obj(xbmcListItem) return item
def __displayTVShows__(tvShowsList, channelType, finished=False): items = [] for tvShow in tvShowsList: tvShowName = tvShow['name'] if finished: tvShowName = tvShowName + ' [' + AddonUtils.getBoldString('finished') + '] ' item = ListItem() item.add_request_data('channelType', channelType) item.add_request_data('tvShowName', tvShowName) item.add_request_data('tvShowUrl', tvShow['url']) item.set_next_action_name('Show_Episodes') xbmcListItem = xbmcgui.ListItem(label=tvShowName) contextMenuItems = [] data = '?actionId=' + urllib.quote_plus("add_Fav_TVShow") + '&data=' + urllib.quote_plus(AddonUtils.encodeData({"channelType":channelType, "tvShowName":tvShowName, "tvShowUrl":tvShow['url']})) contextMenuItems.append(('Add to favourite shows', 'XBMC.RunPlugin(%s?%s)' % (sys.argv[0], data))) xbmcListItem.addContextMenuItems(contextMenuItems, replaceItems=True) item.set_xbmc_list_item_obj(xbmcListItem) items.append(item) return items
def __preparePlayListItem__(video_items, source): video_playlist_items = [] video_source_img = None video_source_name = None for item in video_items: video_item = {} video_item['videoLink'] = item.get_request_data()['videoLink'] video_item['videoTitle'] = item.get_request_data()['videoTitle'] video_playlist_items.append(video_item) video_source_img = item.get_moving_data()['videoSourceImg'] video_source_name = item.get_moving_data()['videoSourceName'] Logger.logDebug('IMAGE :: ') Logger.logDebug(video_source_img) Logger.logDebug(type(video_source_img)) item = ListItem() item.add_request_data('videoPlayListItems', video_playlist_items) item.add_moving_data('isContinuousPlayItem', True) item.add_moving_data('videoSourceName', video_source_name) item.set_next_action_name('Play_AllStreams') xbmcListItem = xbmcgui.ListItem(label='[COLOR blue]' + AddonUtils.getBoldString('Continuous Play') + '[/COLOR]' + ' | ' + 'Source #' + source + ' | ' + 'Parts = ' + str(len(video_playlist_items)) , iconImage=video_source_img, thumbnailImage=video_source_img) item.set_xbmc_list_item_obj(xbmcListItem) return item