开发短视频资讯平台——基于Python

标题开发短视频资讯平台——基于Python

有video.csv视频库文件,其中有999条短视频数据,格式如下:

项目的核心功能有:

  1. 分页看新闻(每页显示10条),提示用户输入页码,根据页码显示指定页面的数据。
    • 提示用户输入页码,根据页码显示指定页面的数据。
    • 当用户输入的页码不存在时,默认显示第1页
  2. 搜索专区
    • 用户输入关键字,根据关键词筛选出所有匹配成功的短视频资讯。
    • 支持的搜索两种搜索格式:
      id=1715025,筛选出id等于1715025的视频(video.csv的第一列)。
      key=文本,模糊搜索,筛选包含关键字的所有新闻(video.csv的第二列)。
  3. 下载专区
    • 用户输入视频id,根据id找到对应的mp4视频下载地址,然后下载视频到项目的files目录。
      视频的文件名为:视频id-年-月-日-时-分-秒.mp4
'''
项目的核心功能有:
分页看新闻(每页显示10条),提示用户输入页码,根据页码显示指定页面的数据。
搜索专区
- 用户输入关键字,根据关键词筛选出所有匹配成功的短视频资讯。
下载专区
- 用户输入视频id,根据id找到对应的mp4视频下载地址,然后下载视频到项目的files目录。
'''

import os
import math
import re
import requests
from datetime import datetime

DTTE_LIST = list()
ID_LIST = list()
count = 1
DIR_PATH = os.path.dirname(os.path.abspath(__file__))
path = os.path.join(DIR_PATH, 'video.csv')
with open(path, mode='r+', encoding='utf-8') as file_object:
    for line in file_object.readlines():
        line_date = (count, line.strip().split(','))
        DTTE_LIST.append(line_date)
        ID_LIST.append(line_date[1][0])
        count += 1



def news_watch(date_list):
    '''
    实现翻页看新闻功能:
    :param date_list: 传入文件数据
    :return: 无返回值
    '''
    line_count = len(date_list)
    page_count = math.ceil(line_count / 10)
    print('读新闻专区')
    while True:
        # 提示用户输入页码
        page_number = input('\n共{}页,每页10条,请输入页数(Q或q退出):'.format(page_count))
        if page_number.upper() == 'Q':
            break
        elif not page_number.isdecimal():
            print('输入错误,重新输入')

        # 当用户输入的页码不存在时,默认显示第1页
        elif int(page_number) <= 0 or int(page_number) > page_count:
            print('\n第1页')
            for i in range(10):
                date = date_list[i]
                print('{} {}'.format(date[0], date[1][1]))
        # 根据页码显示指定页面的数据
        else:
            print('\n第{}页'.format(page_number))
            for i in range(10):
                if (int(page_number) - 1) * 10 + i + 1 > line_count:
                    continue
                date = date_list[(int(page_number) - 1) * 10 + i]
                print('{} {}'.format(date[0], date[1][1]))


def news_search(date_list):
    '''
    实现搜索功能
    - 支持的搜索两种搜索格式:
    :param date_list: 传入文件数据
    :return: 无返回
    '''
    print('搜索专区')
    while True:
        # 提示用户输入支持的两种搜索格式:
        choose = input('请输入搜索条件,支持[id=1715007 或 key=文本](Q或q退出):')
        if choose.upper() == 'Q':
            break
        # id搜索,例如:`id=1715025`,筛选出id等于1715025的新闻信息并输出。
        elif re.findall('id=\d{7}', choose):
            print('\nid搜索')
            if choose[3:] not in ID_LIST:
                print('此id无效,请重新输入')
                continue
            else:
                for date in date_list:
                    if choose[3:] == date[1][0]:
                        ind = date_list.index(date)
                        break
                print('1 {}'.format(date_list[ind][1][1]))
        # key搜索,例如:key=文本,筛选包含关键字的所有新闻信息并输出。
        elif re.findall('key=\w+', choose):
            count = 0
            for date in date_list:
                if choose[4:] not in date[1][1]:
                    continue
                else:
                    count += 1
                    print('{} {}'.format(count, date[1][1]))
        else:
            print('输入错误,重新输入')


def news_download(date_list):
    '''
    实现下载视频功能
    :param date_list: 传入文件数据
    :return: 无返回
    '''
    print('下载专区')
    while True:
        download_id = input('请输入下载id(Q或q退出):')
        if download_id.upper() == 'Q':
            break
        elif not download_id.isdecimal():
            print('输入有误,重新输入')
        else:
            if download_id not in ID_LIST:
                print('id错误,请重新输入')
            # 根据用户输入的视频id找到对应的mp4视频下载地址,然后下载视频到项目的files目录。
            else:
                dex = ID_LIST.index(download_id)
                url = date_list[dex][1][-1]
                res = requests.get(
                    url,
                    headers={
                        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
                    }
                )
                file_size = int(res.headers['Content-Length'])
                download_size = 0
                download_dir = os.path.join(DIR_PATH, 'files')
                if not os.path.isdir(download_dir):
                    os.makedirs(download_dir)
                # 视频的文件名为:`视频id-年-月-日-时-分-秒.mp4`
                time = datetime.now()
                time_text = time.strftime("%Y-%m-%d-%H-%M-%S")
                file = open(os.path.join(download_dir, '{}-{}.mp4'.format(download_id, time_text)), mode='wb')
                for chunk in res.iter_content(int(file_size / 500)):
                    download_size += len(chunk)
                    file.write(res.content)
                    file.flush()
                    message = '\r已下载{}%'.format(round(download_size / file_size * 100, 2))
                    print(message, end='')
                print('下载完成')
                file.close()


def run():
    '''
    实现提示页面,根据用户输入对应需要返回相应函数并执行
    :return: 无返回
    '''
    kind_dict = {'1': news_watch, '2': news_search, '3': news_download}
    while True:
        text = '\n请输入需求(1——3),Q/q退出:\n\t1——看新闻\t2——搜索专区\t3——下载专区\n'
        ans = input(text)
        if ans.upper() == 'Q':
            break
        elif int(ans) > 3 or int(ans) < 0:
            print('输入错误,请按提示输入')
            continue
        kind_dict.get(ans)(DTTE_LIST)


if __name__ == '__main__':
    run()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值