节目表下载地址:XML地址
27 |下载测试m3u文件:测试
28 |EPG文件中提供{{ channel_no }}个频道 {{ crawl_day }}天内节目表共 {{ epg_no }} 条,
现在提供时间为: {{ start_date }} - {{ end_date }}
# | 33 |34 | | 频道 | 35 |tvg-name | 36 |tvg-id | 37 |分类 | 38 |来源 | 39 |最新节目日期 | 40 |
---|---|---|---|---|---|---|---|
45 | | 需要显示:暂未提供节目表 的频道 | 47 |noepg | 48 |9999 | 49 |所有 | 50 |没有 | 51 |七天内 | 52 ||
{{ forloop.counter }} | 56 |{{ channel.name }} | 58 |{{ channel.tvg_name }} | 59 |{{ channel.id }} | 60 |{{ channel.sort }} | 61 |{{ channel.source }} | 62 |{{ channel.last_program_date }} | 63 |
此页面已经正常载入了,GOOD!
9 | 10 | -------------------------------------------------------------------------------- /web/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from . import views 3 | urlpatterns = [ 4 | path('diyp/', views.diyp), 5 | path('web/', views.web_single_channel_epg), 6 | path('test/',views.d), 7 | ] 8 | -------------------------------------------------------------------------------- /web/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.http import HttpResponse,FileResponse 3 | from web.models import Channel,Epg 4 | from utils.general import noepgjson,crawl_info,root_dir 5 | from utils.aboutdb import get_html_info 6 | import datetime,re,json,os 7 | from dateutil import tz 8 | tz_sh = tz.gettz('Asia/Shanghai') 9 | def d(request): 10 | return render(request,'a.html') 11 | def index(request): 12 | crawl_days = crawl_info['gen_xml_days'] 13 | start_date = datetime.datetime.now().strftime(u'%Y{y}%m{m}%d{d}').format(y='年', m='月', d='日') 14 | start_date_no = datetime.datetime.now().strftime(u'%Y%m%d') 15 | end_date_date = datetime.datetime.now() + datetime.timedelta(days=crawl_days - 1) 16 | end_date = (end_date_date).strftime(u'%Y{y}%m{m}%d{d}').format(y='年', m='月', d='日') 17 | info = get_html_info(end_date_date.date()) 18 | channel_no = info['channels'].count() 19 | epg_no = info['epg_no'] 20 | 21 | ret = {'channel_no':channel_no, 22 | 'crawl_day':crawl_days, 23 | 'epg_no':epg_no, 24 | 'start_date':start_date, 25 | 'start_date_no':start_date_no, 26 | 'end_date':end_date, 27 | 'channels':info['channels'], 28 | 'root_dir':root_dir, 29 | 'n':0,} 30 | return render(request,"index.html",context = ret) 31 | def download(requests,title): 32 | file = open(os.path.join(root_dir,title),'rb') 33 | response = FileResponse(file) 34 | response['Content-Type']='application/octet-stream' 35 | return response 36 | def diyp(request): 37 | ret = single_channel_epg(request) 38 | ret_epgs = ret['epgs'] 39 | datas = [] 40 | if len(ret['epgs']) == 0: 41 | ret_epgs = noepgjson('name', 'id', datetime.datetime.now().date()) 42 | 43 | for epg in ret_epgs: 44 | epg1 = { 45 | 'start':epg['starttime'], 46 | 'end':epg['endtime'], 47 | 'title':epg['title'], 48 | 'desc':epg['descr'], 49 | } 50 | datas.append(epg1) 51 | 52 | ret1 = { 53 | "channel_name": ret['channel'], 54 | "date": ret['epg_date'].strftime('%Y-%m-%d'), 55 | "epg_data":datas, 56 | } 57 | try: 58 | j = json.dumps(ret1,ensure_ascii=False) 59 | except Exception as e: 60 | print(e,datas) 61 | j = 'abc' 62 | return HttpResponse(j,content_type='application/json') # 63 | #WEB查询某频道信息接口 64 | def web_single_channel_epg(request): 65 | ret = single_channel_epg(request) 66 | ret_epgs = ret['epgs'] 67 | if len(ret_epgs) == 0: 68 | epg = { 69 | 'start': '', 70 | 'end': '', 71 | 'title': '没有此日期节目信息--%s'%ret['msg'], 72 | 'desc': '', 73 | } 74 | ret_epgs = [epg] 75 | title = '%s -- %s'%(ret['channel'],ret['epg_date'].strftime('%Y-%m-%d')) 76 | 77 | tomorrow_date = (ret['epg_date'] + datetime.timedelta(days = 1)).strftime('%Y-%m-%d') 78 | tomorrow_url = '?ch=%s&date=%s'%(ret['tvg_name'],tomorrow_date) 79 | yesterday_date = (ret['epg_date'] - datetime.timedelta(days = 1)).strftime('%Y-%m-%d') 80 | yesterday_url = '?ch=%s&date=%s'%(ret['tvg_name'],yesterday_date) 81 | source = ret['source'] 82 | ret = { 83 | 'title':title, 84 | 'tomorrow_url':tomorrow_url, 85 | 'yesterday_url':yesterday_url, 86 | 'epgs':ret_epgs, 87 | 'source':source, 88 | } 89 | return render(request,'single_channel_epgs.html',context=ret) 90 | #请求某个频道数据的通用接口 91 | def single_channel_epg(request): 92 | tvg_name = '' 93 | success = 0 94 | epgs = [] 95 | need_date = datetime.datetime.now().date() #没有提供时间,则使用当天 96 | msg = '' 97 | if request.method == "GET" and 'ch' in request.GET and 'date' in request.GET: 98 | tvg_name = request.GET['ch'] 99 | if tvg_name in ["CCTV5 ","IPTV5 ","IPTV6 ","IPTV3 "]: 100 | tvg_name = tvg_name.strip() + '+' 101 | date_re = re.search('(\d{4})\D(\d+)+\D(\d+)', request.GET['date']) 102 | if date_re: 103 | need_date = datetime.date(int(date_re.group(1)), int(date_re.group(2)), int(date_re.group(3))) 104 | channels = Channel.get_spec_channel_strict(Channel,tvg_name) 105 | if channels.count() == 0: 106 | msg = '没有此频道' 107 | channel_name = tvg_name 108 | source = '' 109 | else: 110 | channel = channels.first() 111 | channel_name = channel.name 112 | epgs = Epg.get_single_epg(Epg,channel,need_date) 113 | source = channel.source 114 | 115 | 116 | if len(epgs) > 0: 117 | success = 1 118 | else: 119 | msg = '参数错误' 120 | channel_name = '未提供' 121 | ret = { 122 | 'success':success, 123 | 'msg':msg, 124 | 'epgs':epgs, 125 | 'channel':channel_name, 126 | 'tvg_name':tvg_name, 127 | 'epg_date':need_date, 128 | 'source':source, 129 | } 130 | return ret 131 | 132 | --------------------------------------------------------------------------------