专栏首页happyJaredPython + Selenium 自动发布文章(四):加入 bat 脚本

Python + Selenium 自动发布文章(四):加入 bat 脚本

写在前面

  这是本系列的第四篇文章,同时也是最后一篇。有关于Bat脚本和自动发布博客的内容,不太了解的可以先看看之前写的文章。这篇文章是介绍如何整合Bat脚本来一键自动发博客,包括我的Hexo博客简书开源中国CSDN。好了,在那之前我们先稍微调整一下代码。

代码改造

  这里只需要调整一下main.py即可,引入sys这个moudle,到时我们通过Bat命令占位符的形式进行传参,参数是Markdown文件名称(含文件后缀.md),参考代码如下:

import re
import sys
import csdn
import jianshu
import oschina


class Main(object):
    # init
    def __init__(self, file):
        self.title = ''
        self.content = ''
        self.category = ''
        self.tags = ''
        # OsChina的系统分类, 设个默认值
        self.osChina_sys_category = '编程语言'
        # CSDN的文章分类, 设个默认值
        self.csdn_article_category = '原创'
        # CSDN的博客分类, 设个默认值
        self.csdn_blog_category = '后端'
        self.read_file(file)

    # 读取MD中的title, content, self_category, self_tags, osChina_sys_category, csdn_article_category, csdn_blog_category
    def read_file(self, markdown_file):
        with open(markdown_file, 'r', encoding='UTF-8') as f:
            self.content = f.read().split('-->\n')[1]
            # 重置文件指针偏移量
            f.seek(0)
            for line in f.readlines():
                if self.judge('title: ', line):
                    self.title = line.split('title: ')[1].strip('\n')
                elif self.judge('self_category: ', line):
                    self.category = line.split('self_category: ')[1].strip('\n')
                elif self.judge('self_tags: ', line):
                    self.tags = line.split('self_tags: ')[1].strip('\n')
                elif self.judge('osChina_sys_category: ', line):
                    self.osChina_sys_category = line.split('osChina_sys_category: ')[1].strip('\n')
                elif self.judge('csdn_article_category: ', line):
                    self.csdn_article_category = line.split('csdn_article_category: ')[1].strip('\n')
                elif self.judge('csdn_blog_category: ', line):
                    self.csdn_blog_category = line.split('csdn_blog_category: ')[1].strip('\n')

    # 正则匹配判断, 获取的信息需保证其标志的唯一性
    @staticmethod
    def judge(rule, line):
        if re.search(rule, line) is None:
            return False
        if 'self.' in line:
            return False
        return True


if __name__ == '__main__':
    # sys.argv[0] = 当前文件名,这里是main.py
    md_file = sys.argv[1]
    # md_file = 'auto.md'
    print("Markdown File is ", md_file)

    timeout = 10
    main = Main(md_file)

    # 开源中国
    osChina = oschina.OsChina()
    osChina.post(main, timeout)

    # 简书
    jian_shu = jianshu.JianShu()
    jian_shu.post(main, timeout)

    # CSDN
    csdn = csdn.CSDN()
    csdn.post(main, timeout)

Bat 脚本

  和以往一样,Bat脚本还是放在hexo的安装目录下,命名deploy.batPython + Selenium系列的所有代码已经上传到了我的GitHub仓库,同时为了代码的同步和方便,这里也直接在source\_posts目录下克隆了该仓库。Okay,关于这个一键部署的脚本参考如下:

:: 拉取最新的部署代码
cd source/_posts/auto-post
git pull origin master
:: 拉取最新的Markdown文章
cd ../
git pull origin master
:: 输入文件名(最好用双引号括起来)才执行一键部署
set /p fileName=
if defined fileName (start python auto-post/main.py %fileName%)
:: 这里是部署hexo
cd ../../
hexo g -d

运行效果

auto-post-bat

可优化点

  单从上面的效果图来看,代码就有很大的优化空间了。下面列出去的几点是目前发现已知的可优化点,计划等有时间再来慢慢改进:

  • 部分页面加载等待时间过长:在大多数情况下,其实需要处理元素已经完全加载显示出来了,但实际页面还在等待css、js等资源的完全加载;(可以设置最长加载等待时间)
  • 录入内容可能会很慢:当正文内容很长的时候,用selenium的send_keys方法其实是比较慢的,毕竟这种方式还是一个个字符的输入;(可以利用剪贴板的复制粘贴功能)
  • 可选第三方授权登录方式有限:如代码所示,目前仅有QQ授权的方式;(可以扩展新浪微博GitHub微信等渠道进行授权登录)
  • 发布文章的操作是串行的:目前deploy.bat脚本只是整合了这几个平台的发布文章操作,执行顺序是按代码顺序来的;(可以使用多线程技术同步完成多平台的发布操作)
  • 自定义分类的局限:目前只能输入已经自定义好的,其实应该先判断,当分类不存在时,就新增分类,然后再进行选择。

系列小结

  小结作个简单说明,本系列所演示的代码目前仅支持发布(单篇)文章,不支持文章的更新和多篇文章同时发布,只能说代码是死的,人才是活的,有时间有兴趣的可以自己捣腾一下。最后,结合这几个平台,附上Markdown中注释部分参数的说明和可选参数值,本系列的所有代码在GitHub仓库中。

参数名

说明/可选参数值

self_category

自定义的分类名称。在OSChina和CSDN叫个人分类,简书里叫文集

self_tags

文章的标签。OSChina和CSDN里用到,多个标签以,(中文逗号)分隔

osChina_sys_category

OSChina的系统分类。可选参数值有:移动开发、前端开发、人工智能、服务端开发/管理、游戏开发、编程语言(默认值)、数据库、企业开发、图像/多媒体、系统运维、软件工程、大数据、云计算、开源硬件、区块链、其他类型

csdn_article_category

CSDN的文章类型。可选参数值有:原创(默认值)、转载、翻译

csdn_blog_category

CSDN的博客分类。可选参数值有:人工智能、移动开发、物联网、架构、云计算/大数据、游戏开发、运维、数据库、前端、后端、编程语言(默认值)、研发管理、安全、程序人生、区块链、音视频开发、资讯、计算机理论与基础

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 什么样的人生才是有意义的人生——没有标准的标准答案

    【导读】其实我们可以跳出这个小圈圈去更加科客观地看一下这个世界。在夜晚的时候我们仰望天空,浩瀚的宇宙中整个地球只是一粒浮尘,何况地球上一个小小的人类?在漫长的历...

    一石匠人
  • 一张图理清《梅花易数》梗概

    学《易经》的目的不一定是为了卜卦,但是了解卜卦绝对能够让你更好地了解易学。今天用一张思维导图对《梅花易数》的主要内容进行概括,希望能够给学友们提供帮助。

    一石匠人
  • 【系统设置】CentOS 修改机器名

    ken.io
  • 《动物魔法学校》儿童学编程Scratch之“外观”部分

    导读:本文通过一个案例《动物魔法学校》来学习Scratch语言的“外观”部分。之后通过一系列其他功能的综合运用对作品功能进行了扩展。

    一石匠人
  • 儿童编程Scratch之“画笔”基础功能学习总结

    Scratch中“画笔”功能能够让使用者模拟画笔在舞台上创作,合理运用能够给作品带来极大的趣味性。

    一石匠人
  • 天干地支五行八卦的对应关系

    一石匠人
  • 我不是算命先生,却对占卜有了疑惑——如何论证“占卜前提”的正确与否

    事出有因,我对《周易》感兴趣了很多年。只是觉得特别有趣,断断续续学习了一些皮毛。这几天又偶然接触到了《梅花易数》,觉得很是精彩,将五行八卦天干地支都串联了起来。...

    一石匠人
  • 一张导图梳理欧洲简史梗概

    一石匠人
  • 声音功能让儿童编程更有创造性

    导读:Scratch中声音功能非常强大,除了常规的音效,你甚至可以模拟各种乐器的各个发音、设置节拍、休止……如果你愿意,甚至可以用它创作一个交响乐。我们可以引导...

    一石匠人
  • 儿童创造力教育与编程教育的碰撞——MIT雷斯尼克教授最新理论梗概

    儿童编程教育已经在我国各一线二线城市疯狂出现,颇有“烂大街”的趋势。我们不禁要问很多很多问题:

    一石匠人

扫码关注云+社区

领取腾讯云代金券