基于python的PC文件自动同步系统

一直有这个需求,想要将电脑上常用的一些文件自动上传到网盘,奈何一些客户端太脑残,只好抽空自己写一个了。

之前听说百度网盘提供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 localtimenettime:       #时间大—>时间晚
            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

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

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

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

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

你可能感兴趣的:(开发日志)