存储魔法

odm的Python项目详细描述


< ODM >

ODM是一组用于从OneDrive管理性下载内容的工具 不需要最终用户参与的本地目录树。它也 包括一个工具,用于管理性地将本地目录树上载到google 驱动器.< /P>

设置您的环境

这个工具主要是在linux上使用python 2.7编写和测试的。部分 这些代码也在python>;=3.4的不同版本下进行了测试。

对于开发,我们建议使用virtualenv安装odm的python 依赖关系。

  • 运行init.sh设置virtualenv
  • 当您想使用odm时,source env-setup.sh()。env set up.sh)设置 必要的环境变量。

凭证

odm命令需要授权的azure ad 2.0客户端的凭据。 gdm命令需要授权的google服务帐户的凭据。

azure广告2.0

  • 在https://apps.dev.microsoft.com/" rel="nofollow">https://apps.dev.microsoft.com/注册你的客户端(azure ad 2.0客户端 也被称为"聚合应用程序")。
    • application secrets下,选择generate new password;将其用作 ODM配置中的客户机密钥。
    • platforms下,添加一个重定向url为 https://localhost(我们使用的认证流是 在任何方面都没有用处,但不能省略)
    • 在Microsoft Graph Permissions下添加必要的应用程序权限:
      • user.read.all
      • files.read.all
      • 注释.阅读.全部
  • 通过访问授予租户权限 https://login.microsoftonline.com/common/adminconcept?客户端id=foo&;重定向uri=https://localhost 以管理员身份登录时。

谷歌服务账户

  • 在创建项目 https://console.developers.google.com/cloud resource manager
  • 在项目内部,创建一个服务帐户。
    • 给帐户起个有意义的名字。
    • 帐户不需要任何角色。
    • 选择提供新的私钥和json密钥类型。
    • 启用g套件全域委派
    • 创建帐户将下载一个json文件;将其用作 凭证在ODM配置中。
  • 在项目内部,启用google drive api。
    • 单击左上角的三个条形图标打开导航菜单。
    • 单击API&Services
    • 单击"启用API和服务"
    • 查找Google Drive API
    • 单击"启用"
  • 作为超级管理员,在https://admin.google.com/" rel="nofollow">https://admin.google.com/授权作用域
    • 单击安全性
    • 单击高级设置
    • 单击"管理API客户端访问"
    • 输入客户端ID并为其授权 https://www.googleapis.com/auth/drive

从OneDrive下载

单个操作的设计是等幂的和干净的 可恢复的因为获取大型驱动器的元数据 完成了代价高昂的操作(无论是在api调用量还是时间上) 作为一个单独的步骤,下载操作使用此缓存 元数据文件而不是实时API。

获取元数据

odm user ezekielh show
odm user ezekielh list-drives
odm user ezekielh list-items > ezekielh.json

下载项目

下载的文件在保存时会被验证,但您也可以重新检查 以前下载的文件作为单独操作的状态,或清除 通过删除无关文件来删除现有的目标文件夹。

odm list ezekielh.json list-filenames
odm list ezekielh.json download-estimate
odm list ezekielh.json download --dest /var/tmp/ezekielh
odm list ezekielh.json verify --dest /var/tmp/ezekielh
odm list ezekielh.json clean-filetree --dest /var/tmp/ezekielh

转换OneNote笔记本

OneNote有一个基本的API,它允许一些但不是所有的笔记数据 提取并转换为HTML文档。

odm user ezekielh list-notebooks > ezekielh-onenote.json
odm list ezekielh-onenote.json convert-notebooks --dest '/var/tmp/ezekielh/Exported from OneNote'

上传到Google Drive

gdm filetree /var/tmp/ezekielh upload ezekielh --dest "Magically Delicious"
gdm filetree /var/tmp/ezekielh verify ezekielh --dest "Magically Delicious"

已知限制

  • 保留单个文件的修改时间,但不尝试 保留文件夹的时间。

  • OneDrive文件名最长可达400个字符,而大多数Unix 文件系统只允许255个字节(可能只有63个utf-8 如果odm遇到的文件名或路径组件超过 255字节它将多余的字符分块到主目录组件中。

  • OneNote文件可以通过OneDrive API下载,但它们没有 关联的哈希值,无法通过 因此无法进行验证。

  • OneDrive在列出文件时有时会返回不正确的文件哈希。 下载文件后,api将返回正确的 哈希。< /P>

  • OneDrive扫描检测到的恶意软件文件无法通过下载 API.

  • Microsoft对OneDrive中的文件使用非标准指纹方法 生意。odm包含一个非常慢的纯python实现 算法使文件验证可以开箱即用,但是如果 处理任何大量的数据指纹计算可以 通过安装 libqxh

迁移工具

ODM在这一点上经过了很好的测试,已经在 密歇根州将一次性迁移约6000个用户,总容量为5tib 数据。可以在contrib目录中找到迁移脚本示例。

有关OneNote导出的详细信息

  • 奥德姆的大部分魔法就像纳尼亚的衣橱。OneNote导出更多 类似于哀伤的配置。

  • OneNote API不返回某些类型页面的任何内容 元素,所以数学表达式(可能还有其他一些节点类型) 将在转换过程中丢失。

  • OneNote API受到严重限制。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Spring安全编程授权   java Android库AAR取决于另一个库   Java/Groovy双精度语句问题   爪哇。查看安卓监视器图形时,release()不会减少我的内存   java无法在子类中使用EventFiringWebDriver对象   java第一个if语句始终为true,但第二个if语句不为true   java如何从作为字符串提供的XML源代码创建可绘制(或XmlResourceParser对象)?   多线程Java并发问题锁和同步方法   java Android Studio注册链接   java ArrayList of ArrayList of String   使用Shadow重新定位的包中的java Kotlin属性不起作用   java在接口org上找不到方法。阿帕奇。伊巴蒂斯。遗嘱执行人。陈述名为prepare的语句处理程序   如何在Java中放大2倍?   java当参数作为RequestBody和RequestParam发送时,sprig控制器无法识别发送的请求