吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2071|回复: 8
收起左侧

[Python 原创] 第二个python程序,利用aligo备份masscode数据到阿里云盘实现多端同步

[复制链接]
xiaomingtt 发表于 2022-12-7 15:26
最近开始使用masscode整理代码片段,但masscode仅支持Google Drive, Dropbox 等网盘实现多端同步,于是做了这个程序,利用阿里云盘同步masscode数据。
[Python] 纯文本查看 复制代码
from aligo import Aligo
import os
from datetime import datetime ,timedelta
import hashlib
import logging
import sys
from logging.handlers import TimedRotatingFileHandler
FORMATTER = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s - %(funcName)s:%(lineno)d: %(message)s')
LOG_FILE = "masscode.log"

def utc_str_to_timestamp(utc: str) -> int:
    return int(datetime.fromisoformat(utc[:-1]).timestamp()) + 28800

def core_sha1(param):
    sha1 = hashlib.sha1()
    with open(param, 'rb') as f:
        while True:
            data = f.read(8192)
            if not data:
                break
            sha1.update(data)
    return sha1.hexdigest()

def get_console_handler():
   console_handler = logging.StreamHandler(sys.stdout)
   console_handler.setFormatter(FORMATTER)
   return console_handler
def get_file_handler():
   file_handler = TimedRotatingFileHandler(LOG_FILE, when='midnight')
   file_handler.setFormatter(FORMATTER)
   return file_handler
def get_logger(logger_name):
   logger = logging.getLogger(logger_name)
   logger.setLevel(logging.DEBUG)
   logger.addHandler(get_console_handler())
   logger.addHandler(get_file_handler())
   logger.propagate = False
   return logger


if __name__ == '__main__':
    ali = Aligo()
      
    my_logger = get_logger("masscodesync")

    local_folder = 'D:/Code'#masscode存储路径
    local_file = local_folder + '/db.json'
    remote_folder = '/Code'#云端备份路径
    remote_file = remote_folder + '/db.json'

    obj_remote_folder = ali.get_folder_by_path(remote_folder)
    if obj_remote_folder is None:   
        my_logger.info('云端文件夹不存在,创建云端文件夹')
        ali.create_folder(remote_folder)
        obj_remote_folder = ali.get_folder_by_path(remote_folder)
        

    if not os.path.exists(local_folder):
        os.mkdir(local_folder)   
        my_logger.info('本地文件夹不存在,创建本地文件夹')

    if os.path.exists(local_file):  
        localfile = True
        local_time = os.path.getmtime(local_file)
        local_time = int(local_time)
        local_sha1 = core_sha1(local_file).lower()
        my_logger.info('本地文件修改时间' + str(datetime.utcfromtimestamp(local_time) + timedelta(hours=8)))
        my_logger.info('本地文件SHA1 ' + local_sha1)
    else:
        localfile = False
        my_logger.info('本地文件不存在')

    obj_remote_file = ali.get_file_by_path(remote_file)  
    if obj_remote_file is None:
        remotefile=False
        my_logger.info('云端文件不存在')
    else:
        remotefile=True
        remote_time = utc_str_to_timestamp(obj_remote_file.updated_at)
        remote_sha1 = obj_remote_file.content_hash.lower()
        my_logger.info('云端文件修改时间' + str(datetime.utcfromtimestamp(remote_time) + timedelta(hours=8)))
        my_logger.info('云端文件SHA1 ' + remote_sha1)

    if localfile and not remotefile:
        my_logger.info('本地有,云端无,上传')
        ali.upload_file(local_file, parent_file_id=obj_remote_folder.file_id)

    if remotefile and not localfile:
        my_logger.info('云端有,本地无 ,下载')
        ali.download_file(file=obj_remote_file, local_folder=local_folder)

    if remotefile and localfile:
        if local_sha1 != remote_sha1:
            my_logger.info('本地和云端文件不同')
            if local_time > remote_time:
                my_logger.info('本地文件比云端新,上传覆盖')
                ali.upload_file(local_file, parent_file_id=obj_remote_folder.file_id,check_name_mode='overwrite')
            elif remote_time > local_time:
                my_logger.info('云端文件比本地新,删除本地,下载云端文件到本地')
                os.remove(local_file)
                ali.download_file(file=obj_remote_file, local_folder=local_folder)
        else:
            my_logger.info('本地与云端文件相同,无需操作')
            

话说做完以后,发现aligo自带文件夹同步功能。
[Python] 纯文本查看 复制代码
from aligo import Aligo
if __name__ == '__main__':
    ali = Aligo()
    obj_remote_folder = ali.get_folder_by_path('/Code')
    ali.sync_folder('D:/Code',obj_remote_folder.file_id)

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
skywalkesd + 1 + 1 过来加个分,强烈要求大神的资产管理软件写个安装说明
wushaominkk + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wkdxz 发表于 2022-12-7 15:56
收藏下来,回头研究下。谢谢分享
advancejar 发表于 2022-12-7 15:34
dailexing 发表于 2022-12-7 15:40
ahehaoyu 发表于 2022-12-7 16:19
有没有能百度云文件转存到阿里云的
ying656 发表于 2022-12-7 16:46
挺好的 ,要是能设置 自动备份哪些文件夹 到指定服务器就好了 哈哈
 楼主| xiaomingtt 发表于 2022-12-8 08:33
advancejar 发表于 2022-12-7 15:34
masscode是啥,感觉是需要的

面向开发人员的免费开源代码片段管理器。它可以帮助您创建和组织自己的个人代码段集合并快速访问它。
官网这么说的。
advancejar 发表于 2022-12-8 09:03
xiaomingtt 发表于 2022-12-8 08:33
面向开发人员的免费开源代码片段管理器。它可以帮助您创建和组织自己的个人代码段集合并快速访问它。
官 ...

同步onedriver的能分享下吗
kevinchenyuan 发表于 2022-12-13 11:27
masscode这玩意,个人觉得还不如自己建了代码仓库,git托管
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表