def phoenix_Search(query='', nexturl=''): PLog("phoenix_Search:") if query == '': query = ardundzdf.get_query(channel='phoenix') PLog(query) if query == None or query == '': return "" query = py2_encode(query) if nexturl == '': path = 'https://www.phoenix.de/response/template/suche_select_json/term/%s/sort/online' % quote( query) else: path = nexturl PLog('Mark1') PLog(path) page, msg = get_page(path=path) if page == '': msg1 = 'Fehler in Suche: %s' % title msg2 = msg MyDialog(msg1, msg2, '') return li PLog(len(page)) if page.find('hits":0,') >= 0: msg1 = 'Leider kein Treffer.' MyDialog(msg1, '', '') return jsonObject = json.loads(page) search_cnt = jsonObject["content"]['hits'] li = xbmcgui.ListItem() li = home(li, ID='phoenix') # Home-Button items = jsonObject["content"]['items'] PLog(len(items)) li = GetContent(li, items) nexturl = jsonObject["content"]["next"] # letzte Seite: "" if nexturl: nexturl = BASE_PHOENIX + nexturl PLog("nexturl: " + nexturl) img = R(ICON_MEHR) title = u"Weitere Beiträge" tag = u"Beiträge gezeigt: %s, gesamt: %s" % (len(items), search_cnt) nexturl = py2_encode(nexturl) query = py2_encode(query) fparams="&fparams={'nexturl': '%s', 'query': '%s'}" %\ (quote(nexturl), quote(query)) addDir(li=li, label=title, action="dirList", dirID="resources.lib.phoenix.phoenix_Search", fanart=img, thumb=img, fparams=fparams, tagline=tag) xbmcplugin.endOfDirectory(HANDLE, cacheToDisc=True)
def arte_Search(query='', nextpage=''): PLog("arte_Search:") if query == '': query = ardundzdf.get_query(channel='phoenix') # unbehandelt PLog(query) if query == None or query == '': return "" query = py2_encode(query) if nextpage == '': nextpage = '1' path = 'https://www.arte.tv/guide/api/emac/v3/de/web/data/SEARCH_LISTING/?imageFormats=landscape&mainZonePage=1&query=%s&page=%s&limit=20' %\ (quote(query), nextpage) page, msg = get_page(path=path) if page == '': msg1 = 'Fehler in Suche: %s' % query msg2 = msg MyDialog(msg1, msg2, '') return li PLog(len(page)) li = xbmcgui.ListItem() li = home(li, ID='arte') # Home-Button PLog(len(page)) # page = page.replace('\\u002F', '/') # hier nicht erf. page = page.replace('\\"', '*') # Bsp. "\"Brisant\"" nexturl = stringextract('nextPage":', ',', page) # letzte Seite: "", auch "null," möglich nextpage = stringextract('page=', '&', nexturl) PLog("nextpage: " + nextpage) li = GetContent(li, page, ID='SEARCH') if nextpage: img = R(ICON_MEHR) title = u"Weitere Beiträge" tag = u"weiter zu Seite %s" % nextpage query = py2_encode(query) fparams = "&fparams={'query': '%s', 'nextpage': '%s'}" % (quote(query), nextpage) addDir(li=li, label=title, action="dirList", dirID="resources.lib.arte.arte_Search", fanart=img, thumb=img, fparams=fparams, tagline=tag) xbmcplugin.endOfDirectory(HANDLE, cacheToDisc=True)
def phoenix_Search(query='', nexturl=''): PLog("phoenix_Search:") if query == '': query = ardundzdf.get_query(channel='phoenix') PLog(query) if query == None or query == '': return "" query=py2_encode(query); if nexturl == '': # path = 'https://www.phoenix.de/suche.html?vt=%s' % quote(query) path = "https://www.phoenix.de/response/template/suche_select_json/term/%s/sort/online" % quote(query) else: path = nexturl PLog(path) page, msg = get_page(path=path) if page == '': msg1 = 'Fehler in Suche: %s' % query msg2 = msg MyDialog(msg1, msg2, '') return li PLog(len(page)) if page.find('hits":0,') >= 0: msg1 = 'Leider kein Treffer.' MyDialog(msg1, '', '') return page = page.replace('\\/', '/') # json-raw Links page = page.replace('\\"', '*') # "-Zeichen ersetzen search_cnt = stringextract('hits":', ',', page) li = xbmcgui.ListItem() li = home(li, ID='phoenix') # Home-Button li = GetContent(li, page) if '"next":' in page: # Mehr-Seiten, hier "next" statt "next_url" next_url = stringextract('next":"', '"', page) if next_url: next_url = BASE_PHOENIX + next_url skipcnt = stringextract('skip/', '/', next_url) PLog("next_url: %s, skipcnt: %s" % (next_url, skipcnt)) img = R(ICON_MEHR) title = u"Weitere Beiträge" tag = u"Beiträge gezeigt: %s, gesamt: %s" % (skipcnt, search_cnt) next_url=py2_encode(next_url); query=py2_encode(query); fparams="&fparams={'nexturl': '%s', 'query': '%s'}" %\ (quote(next_url), quote(query)) addDir(li=li, label=title, action="dirList", dirID="resources.lib.phoenix.phoenix_Search", fanart=img, thumb=img, fparams=fparams, tagline=tag) xbmcplugin.endOfDirectory(HANDLE, cacheToDisc=True)
def Kika_Search(query=None, title='Search', pagenr=''): PLog("Kika_Search:") if query == '': query = ardundzdf.get_query(channel='ARD') PLog(query) if query == None or query.strip() == '': return "" # Home-Button in Kika_VideosBuendelAZ li, HrefList = Kika_VideosBuendelAZ(getHrefList=True) PLog("HrefList: " + str(len(HrefList))) found_hrefs=[] for path in HrefList: fname = stringextract('allevideos-buendelgruppen100_', '.htm', path) page = Dict("load", fname, CacheTime=KikaCacheTime) if page == False: page, msg = get_page(path=path) if page == '': # hier kein Dialog PLog("Fehler in Kika_Search: " + msg) else: Dict("store", fname, page) # im Addon-Cache speichern pos = page.find("The bottom navigation") # begrenzen, es folgen A-Z + meist geklickt page = page[:pos] pageItems = blockextract('class="media mediaA">', page) PLog(len(pageItems)) for s in pageItems: stitle = stringextract('class="linkAll" title="', '"', s) stitle = cleanhtml(stitle); stitle = unescape(stitle); if up_low(query) in up_low(stitle): href = BASE_KIKA + stringextract('href="', '\"', s) if href in found_hrefs: # Doppler vermeiden continue found_hrefs.append(href) img = stringextract('<noscript>', '</noscript>', s).strip() # Bildinfo separieren img_alt = stringextract('alt="', '"', img) img_src = stringextract('src="', '"', img) if img_src.startswith('http') == False: img_src = BASE_KIKA + img_src stitle = repl_json_chars(stitle) img_alt = unescape(img_alt); PLog('Satz:') PLog(query);PLog(href);PLog(stitle);PLog(img_alt);PLog(img_src) href=py2_encode(href); stitle=py2_encode(stitle); img_src=py2_encode(img_src); fparams="&fparams={'path': '%s', 'title': '%s', 'thumb': '%s'}" %\ (quote(href), quote(stitle), quote(img_src)) addDir(li=li, label=stitle, action="dirList", dirID="resources.lib.childs.Kika_Videos", fanart=img_src, thumb=img_src, fparams=fparams, tagline=img_alt) xbmcplugin.endOfDirectory(HANDLE, cacheToDisc=True)
def Search(first, path, query=''): PLog('Search:'); PLog(first); if query == '': query = ardundzdf.get_query(channel='ZDF') PLog(query) if query == None or query.strip() == '': return "" name = 'Suchergebnis zu: ' + urllib2.unquote(query) if first == 'True': # query nur beim 1. Aufruf injizieren, nicht bei 'mehr' path = DreiSat_Suche % urllib2.quote(query) path = path + "&page=1" PLog(path); # Bsp. https://www.3sat.de/suche?q=brexit&synth=true&attrs=&page=2 page, msg = get_page(path=path) if page == '': msg1 = "Fehler in Search" msg2 = msg PLog(msg1) xbmcgui.Dialog().ok(ADDON_NAME, msg1, msg2, '') return li rubriken = blockextract('<picture class="">', page) cnt = stringextract('class="search-number">', '<', page) # Anzahl Treffer li = xbmcgui.ListItem() li = home(li, ID='3Sat') # Home-Button query_unqoute = (query.replace('%252B', ' ').replace('+', ' ')) # quotiertes ersetzen if len(rubriken) == 0 or cnt == '': # kein Treffer msg1 = 'Leider kein Treffer (mehr) zu %s' % urllib2.unquote(query) PLog(msg1) xbmcgui.Dialog().ok(ADDON_NAME, msg1, '', '') return li new_title = "%s Treffer zu >%s<" % (cnt, query) li = Sendereihe_Sendungen(li, path=path, title=new_title) # auf mehr prüfen: if test_More(page=page): # Test auf weitere Seiten (class="loader) plist = path.split('&page=') pagenr = int(plist[-1]) new_path = plist[0] + '&page=' + str(pagenr + 1) title = "Mehr zu: %s" % urllib2.unquote(query) PLog(new_path) new_path = UtfToStr(new_path); query = UtfToStr(query) fparams="&fparams={'first': 'False', 'path': '%s', 'query': '%s'}" % (urllib.quote_plus(new_path), urllib.quote_plus(query)) addDir(li=li, label=title, action="dirList", dirID="resources.lib.my3Sat.Search", fanart=R('3sat.png'), thumb=R(ICON_MEHR), summary='Mehr...', fparams=fparams) xbmcplugin.endOfDirectory(HANDLE)
def Tivi_Search(query=None, title='Search', pagenr=''): PLog("Tivi_Search:") if query == '': query = ardundzdf.get_query(channel='ZDF') PLog(query) if query == None or query.strip() == '': return "" query_org = query query=py2_decode(query) # decode, falls erf. (1. Aufruf) PLog('Tivi_Search:'); PLog(query); PLog(pagenr); ID='Search' Tivi_Search_PATH = 'https://www.zdf.de/suche?q=%s&from=&to=&sender=ZDFtivi&attrs=&contentTypes=episode&sortBy=date&page=%s' if pagenr == '': # erster Aufruf muss '' sein pagenr = 1 path = Tivi_Search_PATH % (query, pagenr) PLog(path) page, msg = get_page(path=path) searchResult = stringextract('data-loadmore-result-count="', '"', page) # Anzahl Ergebnisse PLog("searchResult: " + searchResult) li = xbmcgui.ListItem() li = home(li, ID='Kinderprogramme') # Home-Button # Der Loader in ZDF-Suche liefert weitere hrefs, auch wenn weitere Ergebnisse fehlen - # dto ZDFtivi if searchResult == '0' or 'class="artdirect"' not in page: query = (query.replace('%252B', ' ').replace('+', ' ')) # quotiertes ersetzen msg1 = 'Keine Ergebnisse (mehr) zu: %s' % query MyDialog(msg1, '', '') return li # anders als bei den übrigen ZDF-'Mehr'-Optionen gibt der Sender Suchergebnisse bereits # seitenweise aus, hier umgesetzt mit pagenr - offset entfällt li, page_cnt = ardundzdf.ZDF_get_content(li=li, page=page, ref_path=path, ID=ID) PLog('li, page_cnt: %s, %s' % (li, page_cnt)) if page_cnt == 'next': # mehr Seiten (Loader erreicht) pagenr = int(pagenr) + 1 query = query_org.replace('+', ' ') path = Tivi_Search_PATH % (query, pagenr) # Debug PLog(pagenr); PLog(path) title = "Mehr Ergebnisse in ZDFtivi suchen zu: >%s<" % query query_org=py2_encode(query_org); fparams="&fparams={'query': '%s', 'pagenr': '%s'}" %\ (quote(query_org), pagenr) addDir(li=li, label=title, action="dirList", dirID="resources.lib.childs.Tivi_Search", fanart=R(ICON_MEHR), thumb=R(ICON_MEHR), fparams=fparams) xbmcplugin.endOfDirectory(HANDLE, cacheToDisc=True)