基于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

下面开始着手解决文件夹上传的问题了

大致流程如下:先获取本地指定文件夹中全部文件的信息(可以滤除大于指定大小的文件),然后获取网盘指定文件夹中的全部文件信息,将两者进行对比(以名称为标准),若网盘中不存在该文件,则上传;若网盘中存在该文件,则对比最后修改时间,然后决定是否上传。

——————————————————————————————————————————

到现在为止,终于实现了预期的功能了,版本暂定如此吧!

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 轩辕传奇单机版忘记哪个区了怎么办 登腾讯游戏动态密码啥意思怎么办 说了不该说的话别人不原谅怎么办 轩辕传奇手游金币用错了怎么办 神秘时代4法杖按键冲突怎么办 孕2个月发烧38度怎么办 不知道怀孕喝了止咳糖浆怎么办? 小孩刮头发的备皮刀割住手怎么办? 天梭手表里面的刻度掉了怎么办 国战天下手游帐号丢失怎么办 肺力咳合剂一次喝了50多了怎么办 头孢和藿香正气水一起吃了怎么办 小儿胃蛋自酶合剂吃多了怎么办 刚出生的婴儿很容易被惊醒怎么办 1个多月的宝宝小腿不直怎么办 20个月宝宝腿不直小腿外八怎么办 小孩手青枝骨骨折拆石膏还弯怎么办 宝宝喝柴胡注射剂有不良反应怎么办 九个月宝宝便秘拉不出来怎么办 一岁四个月的宝宝便秘怎么办 热血三国3要塞打不过去怎么办 清香木夏天有黄叶和掉叶怎么办 生完宝宝妊娠纹还在继续疯长怎么办 陌陌不能最小化观看直播视频怎么办 苏州园区公积金密码忘记了怎么办 房产企业申请破产买的房子怎么办 被业务员骗了买了保险怎么办 孩子特别害怕老师严厉的批评怎么办 4k电视看有线电视不清晰怎么办 移动9.9流量4g网用完了怎么办 东方头条验证码已经被注册了怎么办 打王者两个人吵架被夹在中间怎么办 顾客拿过期的食品过来投诉怎么办 老婆总是埋怨我父母我该怎么办? 代款公司如果使用暴力追债怎么办 法院拍卖款分配有疑意怎么办 法院拍卖买到的房子里有户口怎么办 新注册手机邮箱不和电脑同步怎么办 移动4g盒当月流量封顶怎么办 昆仑加油卡密码忘记了怎么办 昆仑银行e盾密码忘记了怎么办