当前位置: 首页 > news >正文

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

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

相关文章:

  • 获彼得·泰尔青睐的在线借贷创企Kreditech获PayU 110万欧元投资
  • spring boot 传输数组类型数据
  • hausaufgabe--python 26 -Dict 2
  • 20172303 20172322 2017-2018-2 《程序设计与数据结构》结对编程项目-四则运算 项目总结...
  • telnet: connect to address 192.168.2.140: Connection refused
  • Java8学习笔记之Stream API
  • 国资委监事会主席季晓南:大数据金融发展要加强风险管控
  • 原生js获取、设置、删除属性
  • Linux安装mysql5.6
  • Python学习笔记__16.3章 UDP编程
  • 稳中有降 7月单路塔式服务器价格指导
  • Python入门知识
  • 云市场虽已硝烟弥漫但仍潜力巨大
  • Linux-系统启动和内核管理
  • memcache
  • 深入了解以太坊
  • 【译】JS基础算法脚本:字符串结尾
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • Akka系列(七):Actor持久化之Akka persistence
  • CSS 三角实现
  • export和import的用法总结
  • JavaScript 基本功--面试宝典
  • Javascript基础之Array数组API
  • JavaScript实现分页效果
  • JWT究竟是什么呢?
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Mybatis初体验
  • spring boot下thymeleaf全局静态变量配置
  • Wamp集成环境 添加PHP的新版本
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 初识MongoDB分片
  • 缓存与缓冲
  • 深度解析利用ES6进行Promise封装总结
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 想写好前端,先练好内功
  • 小李飞刀:SQL题目刷起来!
  • 用mpvue开发微信小程序
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #stm32整理(一)flash读写
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (27)4.8 习题课
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转载)虚函数剖析
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net6使用Sejil可视化日志
  • .NET处理HTTP请求
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • @Bean, @Component, @Configuration简析
  • @Mapper作用
  • @media screen 针对不同移动设备