实现基于zoom平台上的oss额外存储

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 具体实现方式是通过变成,先将zoom上的云录制平台中所有视频的地址获取到,如何下载到跟oss绑定的文件目录下,绑定oss后的目录能实现和bucket的同步。 以下是爬虫脚本的代码,基于python实现 # -*- coding=utf8 -*- import requests import bs.

OSS的扩展性和超大的存储空间,使得在一些第三方昂贵的存储成本极大的压缩,譬如ZOOM。但如何实现将ZOOM上的视频转移存储到OSS这个第三方存储介质上呢?其实很简单,具体实现方式是先将ZOOM上的云录制平台中所有视频的地址获取到,然后分批下载到跟OSS绑定的文件目录下,绑定OSS后的目录能实现和bucket的同步。绑定OSS和目录的方法可以通过ossfs工具实现。

以下是ZOOM视频的爬虫脚本的代码,基于python实现 ,这也是基础爬虫的代码实现,观众老爷们也可以当看个爬虫入门

# -*- coding=utf8 -*-
import requests 
import bs4
import urllib
import datetime
import download as ds
import dd


from lxml import html


session_requests = requests.session()
login_url = "https://www.zoom.us/signin"
#登录页面的账号密码
payload = {
    "email": "xxx@qq.com",
    "password": "password"
}
#发送seesion请求
result = session_requests.get(login_url)

tree = html.fromstring(result.text)

result = session_requests.post(
    login_url,
    data = payload,
    headers = dict(referer=login_url)
)

#第一页访问
url = 'https://www.zoom.us/recording/management'
#获取到的页面值
result = session_requests.get(
    url,
    headers = dict(referer = url)
)
#获取第一页整个页面,转成BeautifulSoup
soup = bs4.BeautifulSoup(result.text, 'lxml')
#获取到页数
page=soup.find_all(class_="pagination")
page1=bs4.BeautifulSoup(page.__str__(),'lxml');#将收缩结果转成bs格式在进行筛选,筛选出list集合
pp=page1.select("li");


num=1
# 获取a下的href
hrefs = []
videoHrefs=[]
while(num<=pp.__len__()-2):
    url = 'https://www.zoom.us/recording/management?p='+num.__str__()
    #重新请求页面
    result = session_requests.get(
        url,
        headers=dict(referer=url)
    )
    soup = bs4.BeautifulSoup(result.text, 'lxml')
    # 获取指定class的<div></div>
    dv = soup.find_all(class_="list-col rec-filesize")
    # 将a记录筛选出来
    a = bs4.BeautifulSoup(dv.__str__(), 'lxml')
    ahref = a.find_all("a")

    #获取到所有的href-meeting地址
    for i in ahref:
        hrefs.append(i['href'])
        href=i['href']
        #访问href地址获取视频地址
        resultForVideo = session_requests.get(
            href,
            headers=dict(referer=url)
        )
        #获取class=btn play-id的节点
        play = bs4.BeautifulSoup(resultForVideo.text, 'lxml')

        # t通过新的soup获取指定class的<a></a>
        aPlay = play.find_all(class_="btn play-id")
        # 将a记录筛选出来
        str=aPlay[0]['href'].replace("play", "download");
        videoHrefs.append(str)
        print str
        filename = "D:/url/" + num.__str__() + ".mp4"
        print filename
        nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 现在
        print nowTime
        # ds.do_load_media(str, filename)
        #dd._downloader(str,filename)
        urllib.urlretrieve(str, filename)
        # urllib.request.urlretrieve(url, filename, Schedule)
    #计数值增加
    num=num+1

print videoHrefs
print hrefs.__len__()

以上是基于代码层的爬虫实现,因为存储的地址是filename,而现在的filename为 filename = "D:/url/" + num.__str__() + ".mp4"

但是该文件地址与OSS没有关系,所以需修改为OSS绑定下的目录地址,OSS绑定目录地址的操作方式如下:

1.通过下载ossfs
2.通过安装命令执行安装

  • 对于Ubuntu,安装命令为:

sudo apt-get update
sudo apt-get install gdebi-core
sudo gdebi your_ossfs_package

  • 对于CentOS6.5及以上,安装命令为:

sudo yum localinstall your_ossfs_package

  • 对于CentOS5,安装命令为:

sudo yum localinstall your_ossfs_package --nogpgcheck

3.设置bucket name 和 AccessKeyId/Secret信息,将其存放在/etc/passwd-ossfs 文件中,注意这个文件的权限必须正确设置,建议设为640。

echo my-bucket:my-access-key-id:my-access-key-secret > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs

4.将OSS bucket mount到指定目录。
ossfs my-bucket my-mount-point -ourl=my-oss-endpoint

具体的挂载目录名称有观众老爷们自行决定,挂载完成后只需要将代码中的filename赋值于指定的目录就大功告成了~~

2018/06/04 update 增加了oss上传功能,改成了读取配置文件:


# -*- coding=utf8 -*-
import requests
import bs4
import urllib
import datetime
import os
import time
import oss2
from lxml import html

#创建存放目录地址
filedir="C:/"+time.strftime("%Y-%m-%d")
folder=os.path.exists(filedir)
if not folder:
    os.mkdir(filedir)
else:
    print "---  There is this folder!  ---"
    filedir=filedir+"-bk"
    os.mkdir(filedir)
# 打开a.txt配置文件
with open('C:/Users/Administrator/Desktop/a.txt') as file_object:
    lines = file_object.readlines()
    for line in lines:
        str = line.split(" ");
        username = str[0]
        password = str[1]
        print("当前账号", username)
        session_requests = requests.session()

        login_url = "https://www.zoom.us/signin"
        payload = {
            "email": username,
            "password": password
        }
        result = session_requests.get(login_url)

        tree = html.fromstring(result.text)
        result = session_requests.post(
            login_url,
            data = payload,
            headers = dict(referer=login_url)
        )
        #第一页访问
        url = 'https://www.zoom.us/recording/management'
        print url
        result = session_requests.get(
            url,
            headers = dict(referer = url)
        )
        #获取第一页整个页面
        soup = bs4.BeautifulSoup(result.text, 'lxml')
        #获取到页数
        page=soup.find_all(class_="pagination")
        page1=bs4.BeautifulSoup(page.__str__(),'lxml');#将收缩结果转成bs格式在进行筛选,筛选出list集合
        pp=page1.select("li");
        num=1
        vnum=1
        page=0
        if pp.__len__()==0:
           page=1
        else:
            pa=bs4.BeautifulSoup(pp[-2].__str__(), 'lxml')
            page=int(pa.find('a').text)
        print('page:', page)
        # 获取a下的href
        hrefs = []
        videoHrefs=[]
        while(num<=page):
            url = 'https://www.zoom.us/recording/management?p='+num.__str__()
            #重新请求页面
            result = session_requests.get(
                url,
                headers=dict(referer=url)
            )
            soup = bs4.BeautifulSoup(result.text, 'lxml')
            # 获取指定class的<div></div>
            dv = soup.find_all(class_="list-col rec-filesize")
            # 将a记录筛选出来
            a = bs4.BeautifulSoup(dv.__str__(), 'lxml')
            ahref = a.find_all("a")

            #获取到所有的href-meeting地址
            for i in ahref:
                hrefs.append(i['href'])
                href=i['href']
                #访问href地址获取视频地址
                resultForVideo = session_requests.get(
                    href,
                    headers=dict(referer=url)
                )
                #获取class=btn play-id的节点
                play = bs4.BeautifulSoup(resultForVideo.text, 'lxml')

                # t通过新的soup获取指定class的<a></a>
                aPlay = play.find_all(class_="btn play-id")
                # 将a记录筛选出来
                str=aPlay[0]['href'].replace("play", "download");
                #videoHrefs.append(str)
                print str
                # 获取到会议ID
                metID = play.find_all(class_="control-label meeting-topic")
                st = metID.__str__().index('>') + 1
                en = metID.__str__().index('</')
                metID = metID.__str__()[st:en]
                # 判断是否之前已经有相同文件名有的话就加编号
                echo = ""
                if metID in videoHrefs:
                    # for fnum in range(videoHrefs.__len__()):
                    #     ss = videoHrefs[fnum][0:videoHrefs[i].__len__() - 3]
                    #     if ss == metID:
                    #         echo=videoHrefs[fnum]
                    # metID=echo[0:echo.__len__()-3]+(int(echo[echo.__len__()-3:echo.__len__()])+1).__str__()
                    metID = metID + "-002"
                # 获取到新的metID的命名
                videoHrefs.append(metID)

                filename = filedir + "/" + metID.__str__() + ".mp4"
                print("fileNum", vnum)
                vnum=vnum+1
                print filename
                nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 现在
                print nowTime
                # ds.do_load_media(str, filename)
                #dd._downloader(str,filename)
                urllib.urlretrieve(str, filename)
                # urllib.request.urlretrieve(url, filename, Schedule)
            #页码计数值增加
            num=num+1
            print('page',num)

print videoHrefs
print hrefs.__len__()


#通过oss2 将视频上传到bucket
#用户aky
auth = oss2.Auth('aid', 'keys')
bucket = oss2.Bucket(auth, 'oss-cn-shanghai-internal.aliyuncs.com', 'bucketName')
#获取当前时间命名的目录
nowTimeDir=time.strftime("%Y-%m-%d")
#循环上传视频到oss上
ossNum=1
for videoPath in videoHrefs:
    ossPath=nowTimeDir+'/'+videoPath+".mp4"
    localPath=filedir+"/"+ videoPath.__str__() + ".mp4"
    bucket.put_object_from_file(ossPath, localPath)
    print("ossFile",ossNum)
    ossNum=ossNum+1
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
2月前
|
存储 安全 开发工具
oss加密存储
阿里云OSS为数据安全提供多种加密机制,包括服务器端的SSE-S3(AES-256透明加密)、SSE-C(用户管理密钥)和CSE-KMS(结合KMS进行密钥管理)。此外,OSS支持客户端加密SDK和HTTPS传输加密,确保数据在传输和存储时的安全。通过ACL、Bucket策略和访问密钥身份验证,实现权限控制与身份验证,全方位保障用户数据的安全性和隐私。用户可按需选择适合的加密方式。
49 2
|
6月前
|
存储 监控 文件存储
存储之外,还有什么?云计算对象存储服务OSS深度洞察
存储之外,还有什么?云计算对象存储服务OSS深度洞察
298 0
|
9月前
|
存储 SQL 分布式计算
阿里云全托管flink-vvp平台hudi connector实践(基于emr集群oss-hdfs存储)
阿里云全托管flink-vvp平台hudi sink connector实践,本文数据湖hudi基于阿里云E-MapReduce产品,以云对象存储oss-hdfs作为存储
|
10月前
|
存储 数据管理 数据处理
阿里云对象存储OSS价格_云存储服务_企业数据管理_存储
阿里云对象存储OSS价格_云存储服务_企业数据管理_存储,阿里云对象存储OSS收费有两种计费模式,即包年包月和按量付费,包年包月是指购买存储包、流量包来抵扣OSS产生的存储费核流量费,OSS标准(LRS)存储包100GB优惠价33元、500GB存储包半年162元、OSS存储包40GB一年9元,OSS流量包100G 49元/月
498 0
|
4月前
|
存储 Java 对象存储
springboot配置阿里云OSS存储实现文件上传下载功能
【1月更文挑战第1天】springboot配置阿里云OSS存储实现文件上传下载功能
684 2
|
13天前
|
存储 SQL 关系型数据库
存储系统、数据库和对象存储 | 青训营
存储系统、数据库和对象存储 | 青训营
|
15天前
|
存储 前端开发 API
React&Nest.js全栈社区平台(三)——🐘对象存储是什么?为什么要用它?
React&Nest.js全栈社区平台(三)——🐘对象存储是什么?为什么要用它?
|
26天前
|
存储 安全 API
对象存储OSS产品常见问题之附件上传后存储存在被窃取的风险如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
25 0
|
2月前
|
存储 安全 数据安全/隐私保护
oss数据加密与存储
阿里云OSS提供多种数据加密(SSE-S3, SSE-KMS, SSE-C, CSE-KMS)与存储安全措施,包括服务器和客户端加密、数据在磁盘上加密存储、多重冗余备份、访问控制列表和HTTPS安全传输。KMS支持密钥管理,确保数据静态和传输时的安全。严格的访问策略和身份验证保护资源免受未授权访问,满足高安全性和合规性需求。
54 3
|
4月前
|
存储 对象存储 Python
Python中使用阿里云OSS存储实现文件上传和下载功能
Python中使用阿里云OSS存储实现文件上传和下载功能
514 2