基于python的PC文件自动同步系统
来源:互联网 发布:java配置上传文件路径 编辑:程序博客网 时间:2024/06/07 16:42
一直有这个需求,想要将电脑上常用的一些文件自动上传到网盘,奈何一些客户端太脑残,只好抽空自己写一个了。
之前听说百度网盘提供api,不过目前好像收费了,看来要基于快盘api同步了,不清楚能不能成功,先写篇日志,记录整个过程。
一、获得快盘api权限
1. 注册快盘
2. 创建应用获得consumer_key 和consumer_secret
二、巧得快盘SDK
本来想在网上找些基于python的快盘api的,结果发现了这个基于python的快盘的SDK,这下方便了。点击打开链接
仔细研读其中的 kuaipan.py 后,通过上面的consumer_key和consumer_secret ,打开网页并授权后,通过accessToken函数,得到了oauth_token 和 oauth_token_secret,记下之后,从此一年以内就再也不用重新授权了。
然后直接调用这个SDK里的函数就可以进行开发了。
三、流程构思
由于要做文件同步,就要对比网盘文件与本地文件文件的最后修改时间了。网盘文件可以通过 kp.metadata 获得。
首先要维护一个要同步的文件的列表,列表的元素可以设为字典格式,其中包含文件的本地名称、网盘名称、大小、修改时间,其中本地名称、网盘名称是固定在程序中的,大小、修改时间是通过调用函数读取本地文件信息得到的。
然后根据网盘名称获取网盘文件的修改时间(若无此文件,则上传),网盘修改时间早于本地修改时间,则上传。
目前终于实现了前面所述的内容了,局部代码如下:
for tfile in filels: try: kp.metadata(tfile['name']) except urllib2.HTTPError,err: if err.code==404: #只抓取404错误,表示文件不存在 kp.upload(tfile['name'],tfile['pname']) print u"已上传",tfile['pname'] else: raise else: fileif=kp.metadata(tfile['name']) time_epoch=os.path.getmtime(tfile['pname']) localtime = time.localtime(time_epoch) #将epoch转换为时元组 nettime=time.strptime(fileif['modify_time'],'%Y-%m-%d %H:%M:%S') #print localtime,'\n',nettime #print localtime<nettime if localtime>nettime: #时间大—>时间晚 kp.delete(tfile['name']) kp.upload(tfile['name'],tfile['pname']) print u"已更新",tfile['pname']代码虽短,但也基本实现了,可以作为版本1.0了。下一步决定继续开发版本2.0了。
四、2.0版本构思
功能:
1. 可以上传中文文件至网盘中文目录
2. 指定本地文件夹至网盘文件夹,对比文件,若网盘不存在或网盘文件落后,则上传
目前遇到的问题描述:
调用metadata获取网盘文件信息时,如使用下面代码
kp.metadata('文件测试')则提示:urllib2.HTTPError: HTTP Error 500: Internal Server Error
如使用下面代码
kp.metadata(u'文件测试')则提示:
尝试半天没解决这个问题,现在决定曲线救国。
具体办法:
因为可以获得某文件夹包括中文文件在内的所有文件的信息,所以可以先得到所有文件信息,然后作个筛选,得出想要的中文文件的信息
终于通过曲线救国解决了中文名称文件上传为中文名称网盘文件的问题,定为版本1.1
下面开始着手解决文件夹上传的问题了
大致流程如下:先获取本地指定文件夹中全部文件的信息(可以滤除大于指定大小的文件),然后获取网盘指定文件夹中的全部文件信息,将两者进行对比(以名称为标准),若网盘中不存在该文件,则上传;若网盘中存在该文件,则对比最后修改时间,然后决定是否上传。
——————————————————————————————————————————
到现在为止,终于实现了预期的功能了,版本暂定如此吧!
- 基于python的PC文件自动同步系统
- 基于AWS的文件同步服务系统架构
- 基于PC的机器视觉系统设计
- 基于rsync同步算法的文件同步系统JAVA实现(一)——项目介绍
- 基于rsync同步算法的文件同步系统JAVA实现(一)——项目介绍
- Sersync 是一款基于inotify + rsync 的大量文件的多服务器自动同步程序
- 文件同步程序,自动的文件复制
- 基于rsync同步算法的文件同步系统JAVA实现(二)——校验码的生成
- 基于rsync同步算法的文件同步系统JAVA实现(三)——校验码哈希表的建立
- 【Bootstrap】自动适应PC、平板、手机的Bootstrap栅格系统
- 基于ARM嵌入式系统的PC/104总线设计
- 基于rsync同步算法的文件同步系统JAVA实现(五)—— 重组数据块
- 基于Xmodem协议的PC与单片机文件传递
- ubuntu下基于rsync的文件同步
- 基于文件的离线数据同步方案
- 基于文件的离线数据同步方案
- 基于Linux的文件同步工具
- SugarSync 优秀的中文版免费网络同步工具 (PC、Mac与手机文件同步/备份/分享)
- [HDU3359]Kind of a Blur && 高斯消元 陨石巨坑
- 《Java7程序设计》第11章 集合
- C++ Virtual详解
- JS匿名函数
- 《Java7程序设计》第7章 异常处理
- 基于python的PC文件自动同步系统
- js中的变量提升
- 《Java7程序设计》第12章 泛型
- 《Java7程序设计》第15章 Swing基础知识
- 自绘CListCtrl(II)
- 《Java7程序设计》第23章 Java线程
- 《Java7程序设计》第24章 并发工具
- 学习Golang语言(3)
- GXPT环境搭建——私服Nexus(二)