def get_schedule(channel, tz): if channel != 'Ностальгия': return [] sched = schedule.Schedule(tz, _source_tz) today = dateutil.tv_date_now(_source_tz) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) rex = re.compile('([0-9]+\+ )?([^\.«»]*(?:«.+»)?[^\.«»]*\.?)(.*)') d = today for i in range(weekday_now, 7): sched.set_date(d) resp = requests.get(_URL, {'day': d.strftime('%Y-%m-%d')}) doc = lxml.etree.fromstring(resp.content, _parser) table = doc[1][2][0][0][11][6] for row in table: sched.set_time(row[0][0][0].text) m = rex.match(row[1].text) age, title, descr = m.groups() sched.set_title(title) sched.set_descr((age or '') + descr) d += _daydelta return sched.pop()
def get_schedule(channel, tz): ch_code = channel_code.get(channel) if ch_code is None: return [] url = 'schedule_channel_' + ch_code + '_week.html' sched = schedule.Schedule(tz, _source_tz) event_info = _EventInfo() doc = _fetch(url) for div in main(doc)[6:]: if div.get('class') == 'sometitle': date = dateutil.parse_date(div[0][0][0].text, '%A, %d %B') sched.set_date(date) else: for subd in div: subd_class = subd.get('class') if subd_class == 'time': now = datetime.datetime.now(tz) elapsed = now - sched.set_time(subd.text) elif subd_class == 'prname2': a = subd.find('a') if a is None: title = (subd.text if len(subd) == 0 else subd[-1].tail[1:]) sched.set_title(title) else: title, foreign_title, descr = (event_info.get( a, elapsed > _elapsed_limit)) sched.set_title(title) if foreign_title: sched.set_foreign_title() if descr: sched.set_descr(descr) return sched.pop()
def get_schedule(channel, tz): if channel != 'НТВ': return [] today = dateutil.tv_date_now(_source_tz) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) descriptions = _Descriptions() d = today for i in range(weekday_now, 7): sched.set_date(d) tbs = _fetch(_SCHED_URL, {'d': d.strftime('%Y%m%d')}) for dt in tbs[1][::2]: dd = dt.getnext() if len(dt) > 0: dt = dt[0] if dd[0].tag == 's': dd = dd[0] sched.set_time(dt.text) a = dd[0] sched.set_title(a.text) sched.set_descr(descriptions.get(a)) d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != 'Авто плюс': return [] sched = schedule.Schedule(tz, _source_tz) descriptions = _Descriptions() for tab in _fetch(_URL)[0][2][4:-1]: d = datetime.datetime.strptime(tab.get('data-day'), 'tv_%Y%m%d').date() sched.set_date(d) for period in tab[0]: for event in period[1:]: sched.set_time(event[0][0].text) dd = event[1] it = dd.iterdescendants() next(it) a = next(it) if a.tag == 'a': sched.set_title(a.text) sched.set_descr(descriptions.get(a)) else: sched.set_title(next(it).text) sched.set_descr(next(it).text) return sched.pop()
def get_schedule(channel, tz): if channel != 'Ля-минор': return [] descriptions = _Descriptions() sched = schedule.Schedule(tz, _source_tz) for tab in _fetch(_URL)[0][1][4:11]: dt = datetime.datetime.strptime(tab.get('data-day'), 'tv_%Y%m%d') sched.set_date(dt.date()) for event in tab[0]: it = event.iterchildren() sched.set_time(next(it).text) span = next(it) if len(span) < 2: title = span.text.lstrip() descr = span[0].text else: a = next(span.iterchildren('a')) title = (a.text or span[2].text if span[1].tag != 'span' else span[1][1].text) descr = descriptions.get(a) sched.set_title(title) sched.set_descr(descr) return sched.pop()
def get_schedule(channel, tz): if channel != 'Интер': return [] today = dateutil.tv_date_now(_source_tz) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) descriptions = _Descriptions() d = today for i in range(weekday_now, 7): sched.set_date(d) dl = _fetch(d.strftime(_SCHED_URL))[1][0][4] for dt in (x for x in dl[1:] if x.tag == 'dt'): sched.set_time(dt.text) dd = dt.getnext() if len(dd) == 0: sched.set_title(dd.text) else: a = dd[-1] if a.tag == 'a': sched.set_title(a.text) sched.set_descr(descriptions.get(a)) else: sched.set_title(a.tail) d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != 'Карусель': return [] today = dateutil.tv_date_now(_source_tz) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) descriptions = _Descriptions() d = today for i in range(weekday_now, 7): sched.set_date(d) url = d.strftime(_SCHED_URL) grid = _fetch(url)[0][0][1][6] for li in (x for x in grid[1:] if len(x) > 0): span = li[0][0][0][0] sched.set_time(span.text) a = span.getnext() if a.tag != 'a': sched.set_title(a.text) sched.set_descr(a.getnext().text) elif len(a) < 2: sched.set_title(a[-1].text) else: sched.set_title(a[-2].text) descr = (a[-1].text or '') + '\n' + descriptions.get(a) sched.set_descr(descr) d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != 'Русский иллюзион': return [] descriptions = _Descriptions() today = dateutil.tv_date_now(_source_tz) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) url = urllib.parse.urljoin(_URL, _SCHED_URL) d = today for i in range(weekday_now, 7): sched.set_date(d) data = {'d': d.strftime("%Y%m%d")} resp = requests.post(url, data) doc = lxml.etree.fromstring(resp.content, _parser) for row in doc[0][1]: sched.set_time(row[0].text) sched.set_title(row[1][0].text) descr = descriptions.get(row[2][0][0][0][0]) sched.set_descr(descr) d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != 'Шансон ТВ': return [] sched = schedule.Schedule(tz, _source_tz) tree = lxml.etree.parse(_URL, _parser) doc = tree.getroot() table = doc[1][0][0][0][0][3] for tr in table[1:3]: for day in tr[_SAT][::3]: date_str = _nominative_month(day[0].text) dt = datetime.datetime.strptime(date_str, _FORMAT) sched.set_date(dt.date()) for row in day.getnext(): it = row.iterchildren() sched.set_time(next(it)[0].text) next(it) info = next(it) title = info.text title = title[:-1].rstrip() + title[-1] sched.set_title(title) if len(info) > 1: descr = info[1].text if descr: sched.set_descr(descr) return sched.pop()
def get_schedule(channel, tz): if channel != '365 дней ТВ': return [] sched = schedule.Schedule(tz, _source_tz) descriptions = _Descriptions() for tab in _fetch(_URL)[4][4:11]: dt = datetime.datetime.strptime(tab.get('data-day'), 'tv_%Y%m%d') sched.set_date(dt.date()) for period in tab[0]: for event in period[1:]: it = event.iterdescendants() next(it) sched.set_time(next(it).text) next(it) next(it) a = next(it) if a.tag == 'a': sched.set_title(a.text) sched.set_descr(descriptions.get(a)) else: sched.set_title(next(it).text) sched.set_descr(next(it).text) return sched.pop()
def get_schedule(channel, tz): if channel != 'Піксель': return [] today = dateutil.tv_date_now(_source_tz) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) event_info = _EventInfo() d = today for i in range(weekday_now, 7): sched.set_date(d) url = _URL.format(_weekday[i]) for li in _fetch(url)[3][0][1:]: sched.set_time(li[0].text) t = li[1] if len(t) == 0: title = t.text.strip() descr = None else: title, descr = event_info.get(t[0]) sched.set_title(title) if descr: sched.set_descr(descr) d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != 'Universal Channel': return [] today = dateutil.tv_date_now(_source_tz) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) d = today for i in range(weekday_now, 7): sched.set_date(d) url = d.strftime(_URL) resp = requests.get(url) doc = lxml.etree.fromstring(resp.content, _parser) inner = doc[2][7][0][0][2][0][0][0][0][0][1][0] for event in (x for x in inner[2:] if len(x) > 1): sched.set_time(event[0].text) info = event[1] title = info[0] sched.set_title(title.text or title[0].text) descr = ' '.join(info[1].text.split()) descr = descr + '\n' if descr else '' sched.set_descr(descr + info[2][0].text.strip()) d += _daydelta return sched.pop()
def get_schedule(channel, tz): global _URL _URL = _url_map.get(channel) if _URL is None: return [] today = dateutil.tv_date_now(_source_tz, 5) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) descriptions = _Descriptions() d = today for i in range(weekday_now, 7): sched.set_date(d) chan = _fetch(d.strftime(_PROG_URL)) ul = chan[2][0][0][0][0][0][1][1] for li in (x for x in ul if len(x) > 0): div = li[0] sched.set_time(div[0].text) title = div[1] if len(title) == 0: sched.set_title(title.text.lstrip()) else: a = title[0] sched.set_title(a.text) descr = descriptions.get(a) sched.set_descr(descr) d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != 'Много ТВ': return [] sched = schedule.Schedule(tz, _source_tz) descriptions = _Descriptions() teleprog = _fetch(_URL)[0][1][0][1] for tab in teleprog[4: 11]: dt = datetime.datetime.strptime(tab.get('data-day'), 'tv_%Y%m%d') sched.set_date(dt.date()) for event in tab[0]: it = event.iterchildren() sched.set_time(next(it).text) span = next(it) if len(span) < 2: title = span.text.lstrip() descr = span[0].text else: a = span[0] if span[1].tag == 'span': title = span[1][1].text else: title = a.text or span[2].text descr = descriptions.get(a) sched.set_title(title) sched.set_descr(descr) return sched.pop()
def get_schedule(channel, tz): if channel != 'Ю': return [] today = dateutil.tv_date_now(_source_tz, 5) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) d = today for i in range(weekday_now, 7): sched.set_date(d) param = {'date': d.strftime('%Y-%m-%d')} resp = requests.get(_URL, param) doc = lxml.etree.fromstring(resp.content, _parser) wrapper = doc[1][5][0][0][0][13] if wrapper.tag != 'div': wrapper = wrapper.getnext() for event in wrapper[0][0][0][0][1][1]: it = event.iterchildren() sched.set_time(next(it).text) next(it) it = next(it).iterdescendants() next(it) sched.set_title(next(it).text) try: descr = next(it).text + ' ' + next(it).text sched.set_descr(descr) except StopIteration: pass d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != 'ТВ Центр': return [] today = dateutil.tv_date_now(_source_tz) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) descriptions = _Descriptions() d = today for i in range(weekday_now, 7): sched.set_date(d) for li in _fetch(d.strftime(_SCHED_URL))[0][12]: a = li[0] t = next(x for x in a.iterchildren('div') if x.get('class') == 'b-schedule__item__title') i = a.index(t) sched.set_time(a[i + 2].text) sched.set_title(t[0].text) ds = a[i + 1].text descr = (ds + '\n' if ds else '') + (descriptions.get(a) or '') if descr: sched.set_descr(descr) d += _daydelta return sched.pop()
def get_schedule(channel, tz): ch_code = channel_code.get(channel) if ch_code is None: return [] url = _URL + ch_code + '/' today = dateutil.tv_date_now(_source_tz, 0) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) d = today for i in range(0, 7 - weekday_now): sched.set_date(d) resp = requests.get(url + str(i) + '/') doc = lxml.html.fromstring(resp.content) page_channel = doc[1][7][2][0][0][2][0][0][0][0][1][0] row = page_channel[0][0][0][1][0][0][2] if len(row) > 0: for event in (x for x in row[0] if x.get('id') == 'programrow'): it = event.iterchildren() sched.set_time(next(it).text) div = next(it) title = next(div.iterchildren('a')).text_content() sched.set_title(title.split(' (')[0]) sched.set_descr(div[0].get('value').split(';;')[1]) d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != 'ТВ3': return [] sched = schedule.Schedule(tz, _source_tz) today = dateutil.tv_date_now(_source_tz) data = {'action': 'get_shedule_list', 'dey': today.strftime('%Y-%m-%d')} resp = requests.post(_URL, data) days = resp.json() for day in days: for ev in days[day]: dt_str = ev['broadcast_time'] dt = datetime.datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S') sched.set_datetime(dt) sched.set_title(ev['long_name']) descr = '' for name in _fields: field = ev[name] if field: descr += _fields[name] + field + '\n' if descr: sched.set_descr(descr) return sched.pop()
def get_schedule(channel, tz): ch_code = channel_code.get(channel) if ch_code is None: return [] today = dateutil.tv_date_now(_source_tz, 5) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) d = today for i in range(weekday_now, 7): sched.set_date(d) param = {'date': d.strftime('%Y-%m-%d')} tv_common = _fetch(ch_code + '.html', param) if tv_common is None: break program = tv_common[1] for row in program.find('table'): # tv-channel-full sched.set_time(row[0][0].text) cell = row[1] sched.set_title(cell[0].text) descr = cell[1].text if descr is not None: sched.set_descr(descr) d += _daydelta return sched.pop()
def get_schedule(channel, tz): ch_code = channel_code.get(channel) if ch_code is None: return [] today = dateutil.tv_date_now(tz) weekday_now = today.weekday() sched = schedule.Schedule(tz, tz) event_info = _EventInfo() _chan_params['sch:channel'] = ch_code d = today for i in range(weekday_now, 7): _chan_params['sch.date'] = d.strftime('%Y-%m-%d') chan_type = _fetch(_URL, _chan_params)['channel_type'] sch = next(iter((chan_type.values())))[0]['schedule'] for event in sch: fmt = '%Y-%m-%d %H:%M:%S' dt = datetime.datetime.strptime(event['start'], fmt) sched.set_datetime(dt) title, descr = event_info.get(event) sched.set_title(title) sched.set_descr(descr) d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != 'Совершенно секретно': return [] descriptions = _Descriptions() sched = schedule.Schedule(tz, _source_tz) tabs = _fetch(_URL)[3] for day, tab in zip(tabs[0], tabs[2:]): a = day[0] date = a.text.strip() + ' ' + a[0].text.strip() sched.set_date(dateutil.parse_date(date, '%A %d %B')) for tv in itertools.chain(*(x[1:] for x in tab)): event = tv[0] sched.set_time(event[0].text) info = event[1] p = info[0] title = info[1].text descr = p.text.rstrip() if title: sched.set_title(title.lstrip()) else: sched.set_title(descr) descr = '' descr += ('\n' + p[0].text.strip() + '\n' + descriptions.get(tv[1])) sched.set_descr(descr) return sched.pop()
def get_schedule(channel, tz): if channel != 'Перший Національний / Ера': return [] today = dateutil.tv_date_now(_source_tz) weekday_now = today.isoweekday() sched = schedule.Schedule(tz, _source_tz) descriptions = _Descriptions() d = today for i in range(weekday_now, 8): sched.set_date(d) doc = _fetch(_SCHED_URL.format(i)) divs = doc[0][0][2][0].iterchildren('div') for time in itertools.islice(divs, 0, None, 3): sched.set_time(time.text) span = next(x for x in time.getnext() if x.get('class') is None) if len(span) < 1: sched.set_title(span.text) else: a = span[0] sched.set_title(a.text) descr = descriptions.get(a) if descr: sched.set_descr(descr) d += _daydelta return sched.pop()
def get_schedule(channel, tz): chan = _channels.get(channel) if chan is None: return [] descriptions = _Descriptions() params = {'channel': chan, 'type': 'week'} today = dateutil.tv_date_now(_source_tz) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) d = today for i in range(weekday_now, 7): sched.set_date(d) params['year'], params['week'], params['dayOfWeek'] = d.isocalendar() list = _fetch(_sched_url, params)['list'] doc = lxml.etree.fromstring(list, _parser) for li in doc[0][0][0]: sched.set_time(li[0].text) a = li[1] sched.set_title(a.text) sched.set_descr(descriptions.get(a)) d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != '2x2': return [] sched = schedule.Schedule(tz, _source_tz) event_info = _EventInfo() body = _fetch(_SCHED_URL) tab_list = body[1][0] days = (x[0] for x in tab_list) tabs = (x[0] for x in tab_list.getnext().getnext()) for day, tab in zip(days, tabs): d = dateutil.parse_date(day[-2].text + day[-1].text, '%a%d %B') sched.set_date(d) for row in tab: it = row.iterchildren() time = next(it)[0][0].text title, descr = event_info.get(row) if title is None: next(it) title = next(it)[0].text if title is not None: sched.set_time(time) sched.set_title(title) sched.set_descr(descr) return sched.pop()
def get_schedule(channel, tz): if channel != 'Бокс ТВ': return [] today = dateutil.tv_date_now(_source_tz, 0) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) d = today for i in range(weekday_now, 7): sched.set_date(d) url = d.strftime(_URL) resp = requests.get(url) doc = lxml.etree.fromstring(resp.content, _parser) rasp = doc[1][1][2][0][4] for event in rasp: it = event.iterchildren() time = next(it)[0].text sched.set_time(time) it = next(it)[0].iterchildren() title = next(it).text sched.set_title(title) descr = next(it).text sched.set_descr(descr) d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != 'Disney Channel': return [] today = dateutil.tv_date_now(_source_tz) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) d = today for i in range(weekday_now, 7): sched.set_date(d) param = {'date': d.strftime('%d-%m-%Y')} sch = requests.get(_URL, param).json() programs = sch['programs'] for event in sch['seances']: sched.set_time(event['time']) try: program = programs[str(event['programId'])] except KeyError: sched.set_title(event['title']) else: sched.set_title(program['title']) descr = lxml.html.fromstring(program['description']) sched.set_descr(descr.text_content()) d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != '1+1': return [] descriptions = _Descriptions() sched = schedule.Schedule(tz, _source_tz) today = dateutil.tv_date_now(_source_tz) weekday_now = today.weekday() d = today for i in range(weekday_now, 7): sched.set_date(d) for li in _fetch(d.strftime(_SCHED_URL))[0][3]: short = li[0] sched.set_time(short[0].text) title = short[1] if len(title) == 0: sched.set_title(title.text) else: a = title[0] sched.set_title(a.text) descr = descriptions.get(a) or li[1][1][0].tail sched.set_descr(descr) d += _daydelta return sched.pop()
def get_schedule(channel, tz): if channel != 'Bloomberg TV': return [] sched = schedule.Schedule(tz, _source_tz) tree = lxml.etree.parse(_URL, _parser) doc = tree.getroot() container = next(doc[1].iterchildren('div')) for tab in container[6][0][0][3:]: it = tab.iterchildren() date = _to_month_number(next(it).text) d = datetime.datetime.strptime(date, '%m %d, %Y') sched.set_date(d) try: row = next(it) except StopIteration: pass else: for row in row[0][1:]: it = row.iterdescendants() sched.set_time(next(it).text) next(it) sched.set_title(next(it).text.strip()) sched.set_descr(next(it).text.strip()) return sched.pop()
def get_schedule(channel, tz): if channel != 'ЖИВИ!': return [] sched = schedule.Schedule(tz, _source_tz) tree = lxml.etree.parse(_URL, _parser) doc = tree.getroot() tabs = doc[2][32][0][0][6][3] for tab in tabs: for event in (x for x in tab if len(x) > 0): name = event[1] dt = datetime.datetime.utcfromtimestamp(int(name.get('data-time'))) sched.set_datetime(dt) it = name.iterchildren(reversed=True) descr = next(it).text try: title = next(it).text except StopIteration: sched.set_title(descr) else: sched.set_title(title) sched.set_descr(descr) return sched.pop()
def get_schedule(channel, tz): if channel != 'Пятый канал': return [] today = dateutil.tv_date_now(_source_tz) weekday_now = today.weekday() sched = schedule.Schedule(tz, _source_tz) descriptions = _Descriptions() d = today for i in range(weekday_now, 7): sched.set_date(d) param = {'date': d.strftime('%Y-%m-%d')} for li in _fetch(_URL, param)[3][0]: sched.set_time(li[0].text) a = li[1] if a.tag == 'a': sched.set_title(a.text) descr = descriptions.get(a) if descr: sched.set_descr(descr) elif len(a) == 0: sched.set_title(a.text) else: sched.set_title(a[0].text) d += _daydelta return sched.pop()