锤了一个 OneDrive 的双向同步客户端,大概花了 10 个回合

2018-06-02 21:11:47 +08:00
 gzxu

前情提要: https://www.v2ex.com/t/453864 感谢大家指点,尤其是 @geelaw 指出可以使用 Extended Attributes 这样的黑科技,大大减少了算法的复杂度

锤这个奇迹的目的主要还是跟原来说的一样,解决自己 Linux 上面访问 OneDrive 不方便的问题。程序是用人生苦短写的,所以安装也很简单 pip install --user onedrive-sync-client,安装完之后执行 onedrive --set-location ~/OneDrive 配置同步目录之后每次运行 onedrive 即可同步,同步是手动的,没有后台进程,算法的状态依前文所述是通过 xattr 存储的,外加一个默认在 $XDG_DATA_HOME/onedrive.sqlite 的数据库存储比如登录状态等等的其它必要信息

城市建在了 https://github.com/gzxu/onedrive-sync-client 这个地块,欢迎大家来和本城的所有者进行交谈~偷懒了没有写中文说明文件麻烦大家凑合着看吧

数据无价,虽然欢迎大家测试吐槽,但还是要建议大家不要用重要的网盘数据来测试

最后,祝自己生日快乐吧

5432 次点击
所在节点    程序员
17 条回复
safeoy
2018-06-02 22:04:09 +08:00
酷,已 star
coreos
2018-06-02 22:09:56 +08:00
生日快乐
elvisyao
2018-06-02 22:11:00 +08:00
生日快乐
UnknownR
2018-06-02 22:14:06 +08:00
cool, 生日快乐,最近刚遇到 onedrive 的问题,organization 的账户无法登陆 mac 版 onedrive,网页版每次都要登陆而且同步时也很麻烦
0915240
2018-06-02 23:30:48 +08:00
生日快乐
yaerda
2018-06-03 01:18:32 +08:00
快乐快乐哦
msg7086
2018-06-03 02:13:40 +08:00
生快。
我随便扫了一眼你的源码,sdk 里上传文件只写了简易上传,而不支持大文件(>10M )的上传。
大文件上传需要用 UploadSession。

https://github.com/msg7086/rb1drv/blob/master/lib/rb1drv/onedrive_dir.rb#L104
https://github.com/cnbeining/onedrivecmd/blob/master/onedrivecmd/utils/uploader.py#L69
https://github.com/OneDrive/onedrive-api-docs/blob/live/docs/rest-api/api/driveitem_createuploadsession.md

还有,商业版教育版的 OneDrive 用的是 QuickXorHash 而不是 SHA1,我看你代码里没有相应的处理逻辑。
https://rclone.org/onedrive/#modified-time-and-hashes
https://docs.microsoft.com/en-us/onedrive/developer/code-snippets/quickxorhash
DearTanker
2018-06-03 02:23:58 +08:00
生日快乐
cnbeining
2018-06-03 05:37:52 +08:00
@msg7086 这个坑跳过。。。
huyinjie
2018-06-03 06:41:48 +08:00
生日快乐
zclHIT
2018-06-03 11:36:49 +08:00
生日快乐
masir
2018-06-03 17:39:52 +08:00
生日快乐~你昨天 我今天~哈哈~
gzxu
2018-06-03 21:15:36 +08:00
@UnknownR #4 啊哈,只可惜我现在既没有加 macOS 的支持也没有加 organization 的支持(里面登录那块代码我记得我设置的是用组织账户登录会失败),虽然说里面依赖 Linux 的地方只有 local.py 前头几行默认的配置文件路径和 xattr 扩展属性两个

@msg7086 #7 谢谢提醒,这块我偷懒没写,在 README 最后的 Future Works 里面写了说之后加上专门负责上传下载的模块,sdk.py 里面那块留了一个函数虽然现在里面只有几行代码完成最基础的功能。目前我的逻辑是用 SHA1 检测文件是否有修改,要是改成用修改时间判断的话估计可以加上 QuickXor 的支持,因为这玩意不知道碰撞风险多大,代码里面也是留了之后加这块功能的地方的 2333 毕竟这些都不是锤太空船的核心零部件

最后,谢谢大家啦~
msg7086
2018-06-04 02:08:05 +08:00
@gzxu OAuth API 2.0 配上 Graph API 是可以登录 Business 版的。
旧版 OAuth 1.0 配旧版 API 才需要分开登录。
gzxu
2018-06-04 10:00:06 +08:00
@msg7086 #14 https://github.com/gzxu/onedrive-sync-client/blob/0.1.2/onedrive/sdk.py#L87 这里我故意写的是 `/consumers/` 而不是 `/common/` 为的就是组织用户登录会失败 😂😂😂
msg7086
2018-06-04 13:02:42 +08:00
@gzxu →_→ 会玩。
gzxu
2018-06-04 13:36:10 +08:00
@msg7086 #16 因为这个功能还没完成(没有摆脱对 SHA1 的依赖),这样可以把不可控的东西尽量限制在自己已知的范围里面[/乖巧]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/459891

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX