吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2198|回复: 7
收起左侧

[Python 转载] 写了一个博客管理器,支持同步管理博客园、简书

[复制链接]
thepoy 发表于 2021-4-10 09:48
本帖最后由 thepoy 于 2021-4-10 09:54 编辑

尚未完成全部功能

发出代码来共同学习。
计划完成 python 版后,再写一个 golang 版。

class AllBlogsManager:
    jianshu = Jianshu(JIANSHU_COOKIES)
    cnblogs = CnblogsMetaWeblog()
    db = DataBase()

    def __init__(self):
        self.sync_categories()

    def new_category(self, category_name: str):
        # 简书能创建重名的分类,所以需要先在数据库中做本地判断
        if self.db.category_exists(category_name):
            logger.fatal("分类名 %s 已经存在了,不可重复创建相同分类名" % category_name)
            sys.exit(1)
        jianshu_category_id = self.jianshu.new_category(category_name)
        cnblogs_category_id = self.cnblogs.new_category(category_name)

        self.db.insert_category(category_name, jianshu_category_id,
                                cnblogs_category_id)
        logger.info(f"已创建新的分类:{category_name}")

    def update_category(self, category_id: Union[str, int],
                        category_name: str):
        pass

    def delete_category(self, ategory_name: str):
        # 博客园没有提供删除分类的 api
        # self.jianshu.delete_category()
        pass

    def new_post(self, category: str, title: str, content: str, md5: str):
        ids = self.db.select_category(category)
        if not ids:
            logger.fatal("没有此分类:%s" % category)
            sys.exit(1)

        logger.info("正在上传 “%s” ..." % title)

        jianshu_id = self.jianshu.new_post(ids[1], title, content)

        post = create_post(title, content, category)
        cnblogs_id = self.cnblogs.new_post(post)

        self.db.insert_post(title, md5, int(jianshu_id), int(cnblogs_id),
                            ids[0])
        logger.info("已上传 “%s.md” 到所有博客:[]" % title)

    def update_post(self):
        pass

    def delete_post(self):
        pass

    def sync_categories(self):
        # TODO: 改为异步或多线程
        while True:
            jcs = self.jianshu.get_categories()
            ccs = self.cnblogs.get_categories()

            jcs_set = {i["name"] for i in jcs}
            ccs_set = {i["name"] for i in ccs}

            if jcs_set - ccs_set:
                for c in (jcs_set - ccs_set):
                    self.cnblogs.new_category(c)
                logger.info(f"已向博客园添加缺失的分类:{jcs_set - ccs_set}")
            elif ccs_set - jcs_set:
                for c in (ccs_set - jcs_set):
                    self.jianshu.new_category(c)
                logger.info(f"已向简书添加缺失的分类:{ccs_set - jcs_set}")
            else:
                logger.info("已同步所有分类")
                break

        jcs = {i["name"]: i["id"] for i in jcs}
        ccs = {i["name"]: i["id"] for i in ccs}
        for k, v in jcs.items():
            self.db.insert_category(k, v, ccs[k])

def _build_parser():
    parser = argparse.ArgumentParser(description=('博园管理器'))
    parser.add_argument("-n",
                        "--new-post",
                        nargs=2,
                        metavar=("CATEGORY", "MARKDOWN_FILE_PATH"),
                        help="要上传的 markdown 文件的分类和路径")
    parser.add_argument("-d",
                        "--delete",
                        metavar="POST_ID",
                        help="要删除的文章 id",
                        type=int)
    return parser

def main():
    parser = _build_parser()
    args = parser.parse_args()

    manager = AllBlogsManager()

    if args.new_post:
        category, file_path = args.new_post
        title, content = read_post_from_file(file_path)
        md5 = get_md5_of_file(file_path)
        manager.new_post(category, title, content, md5)
        return

    if args.delete:
        print(args.delete)
        return

使用:

python main.py -n Go 测试上传新博文.md 
2021-04-10 09:33:31,489 - root - INFO - 已同步所有分类
2021-04-10 09:33:31,489 - root - WARNING - 重复的分类:系统
2021-04-10 09:33:31,489 - root - WARNING - 重复的分类:爬虫
2021-04-10 09:33:31,489 - root - WARNING - 重复的分类:博客园个性化
2021-04-10 09:33:31,490 - root - WARNING - 重复的分类:通用
2021-04-10 09:33:31,490 - root - WARNING - 重复的分类:windows
2021-04-10 09:33:31,490 - root - WARNING - 重复的分类:Go
2021-04-10 09:33:31,490 - root - WARNING - 重复的分类:黑苹果
2021-04-10 09:33:31,490 - root - WARNING - 重复的分类:数据库
2021-04-10 09:33:31,490 - root - WARNING - 重复的分类:Python
2021-04-10 09:33:31,490 - root - WARNING - 重复的分类:Flask
2021-04-10 09:33:31,490 - root - WARNING - 重复的分类:Django
2021-04-10 09:33:31,490 - root - WARNING - 重复的分类:Scrapy
2021-04-10 09:33:31,490 - root - WARNING - 重复的分类:Linux/Mac
2021-04-10 09:33:35,039 - root - INFO - 已上传 “测试上传新博文.md” 到所有博客

所有博文以标题做为主键保存在sqlite数据库中,以 md5 作为更新的标识,所有 md5 变化的 markdown 文件将自动更新到所有博客(虽然现在只写了博客园和简书)。
数据库保存的数据形式:
截屏2021-04-10 09.52.02.png

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

wo20ljj 发表于 2021-4-10 10:53
只能膜拜一下大佬!
quzhenguo 发表于 2021-4-10 09:58
 楼主| thepoy 发表于 2021-4-10 09:58
小智xyz 发表于 2021-4-10 09:53
求内存卡数据修复
https://www.52pojie.cn/thread-1408889-1-1.html
(出处: 吾爱破解论坛)

爱莫能助,我觉得手机软件不太可能实现存储介质的数据恢复,还是需要连接 PC 恢复数据。
余水读书 发表于 2021-4-10 10:20
感谢分享,最近正在学习,看到以后深受启发!望大神早日成功!
987fw 发表于 2021-4-10 10:27
为什么自己写呢?
 楼主| thepoy 发表于 2021-4-10 10:37
987fw 发表于 2021-4-10 10:27
为什么自己写呢?

只有自己写,才能完成自己想要的功能,而且只有自己想要的功能。
快乐的鸡蛋黄 发表于 2021-4-10 10:41
又是仰望大哥的一天
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 18:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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