csdn博客备份脚本

版权声明:本文为 DouMiaoO_Oo 原创文章,未经允许不得转载!

利用csdn给开发者提供的api,我们可以以此来备份我们的博客。api介绍的页面为 http://open.csdn.net/。 要使用api,需要分为两个步骤:
1. 申请成为csdn的开发者,注册流程的介绍页面链接
2. 创建应用,这里推荐使用客户端的应用,如果只是备份你个人的博客那么客户端应用完全足够了。在导航栏的 管理中心-创建应用链接

CsdnOAuthV2类介绍:
方法 get_csdn_access_token(): 你的账号、密码以及access key 需要填写在环境变量中,这样比较安全,当然你也可以直接明文写在脚本中。通过api文档实现了两个方法get_article_list, get_article,分别是获取博客列表和下载博客。

# !/usr/bin/env python3
# -*- coding: utf-8 -*-
import pickle
import urllib
import urllib.request
import urllib.parse
import json
import os

__author__ = 'DouMiaoO_Oo'
__date__ = 2017 / 7 / 2


def save_obj(obj, name):
    """
    将 obj 序列化存入本地文件
    :param obj:
    :param name:
    :return:
    """
    with open(name + '.pkl', 'wb') as f:
        pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)


def load_obj(name ):
    """
    将序列化存储的内容从本地文件中读出来
    :param name:
    :return:
    """
    with open(name + '.pkl', 'rb') as f:
        return pickle.load(f)


def save_json_to_file(json_dict):
    """
    把 json 存入文件,用缩进分隔
    :param json_dict:
    :return:
    """
    with open('csdn.html', 'w', encoding='utf-8') as file:
        # ensure_ascii 为 False
        file.write(json.dumps(json_dict, indent=4, ensure_ascii=False, separators=(',', ': ')))


class CsdnOAuthV2:
    """
    csdn 客户端版本的类,用来进行一些需要的操作
    """
    def __init__(self):
        self.access_token = self.get_csdn_access_token()

    @staticmethod
    def get_csdn_access_token():
        """
        利用客户端的方式登录,解析 response 中的json格式数据
        :return: 解析好的 json,保存为 dict
        """
        url = 'http://api.csdn.net/oauth2/access_token?client_id=%s' \
              '&client_secret=%s' \
              '&grant_type=password' \
              '&username=%s' \
              '&password=%s'

        ACCESS_KEY = os.getenv("CSDN_ACCESS_KEY")  # client_id
        SECRET_KEY = os.getenv("CSDN_SECRET_KEY")  # client_secret
        USER_NAME = os.getenv("CSDN_USER_NAME")
        PASSWORD = os.getenv("CSDN_PASSWORD")

        # print(url % (ACCESS_KEY, SECRET_KEY, USER_NAME, PASSWORD))
        response = urllib.request.urlopen(url % (ACCESS_KEY, SECRET_KEY, USER_NAME, PASSWORD))
        res = response.read().decode()
        response.close()
        return json.loads(res, encoding="utf-8")['access_token']

    def get_article_list(self, status="enabled", page=1, size=15):
        """
        api doc: http://open.csdn.net/wiki/api/blog/getarticlelist
        :param status: enabled|draft
        :param page:
        :param size:
        :return:
        """
        query_para = urllib.parse.urlencode({'access_token': self.access_token, 'status': status,
                                             'page': page, 'size':size})
        url = 'http://api.csdn.net/blog/getarticlelist?'+query_para
        response = urllib.request.urlopen(url)
        res = response.read().decode()
        response.close()
        return json.loads(res, encoding="utf-8")

    def save_article(self, title, content, type="original", **kw):
        """
        这一页的 csdn api 有错误,应该是repost 而不是 report
        api doc: http://open.csdn.net/wiki/api/blog/savearticle
        这里应该用 post 方法吧,毕竟要传输那么多博客内容
        :param title:
        :param type: original|repost|translated
        :param content:
        :param kw:
                   id, modify article need to specify id.
                   description
                   categories
                   tags
                   ip
        :return:
        """
        req = urllib.request.Request('')  # http post method
        para_dict = {'access_token': self.access_token}

        if type not in ('original', 'report', 'translated'):
            print("type 参数只有三个合法值 original | repost | translated")
            # 这里应该抛出一个异常比较好
            return None
        if kw.__contains__('id'):
            para_dict[id] = kw['id']
        if kw.__contains__('description'):
            para_dict[id] = kw['id']

    def get_article(self, article_id):
        """
        api doc: http://open.csdn.net/wiki/api/blog/getarticle
        :param article_id: article id
        :return: title
        """
        query_para = urllib.parse.urlencode({'access_token': self.access_token, 'id': article_id})
        url = 'http://api.csdn.net/blog/getarticle?' + query_para
        print(url)
        response = urllib.request.urlopen(url)
        res = response.read().decode()  # decode from bytes to utf-8
        return json.loads(res, encoding='utf8')

if __name__ == '__main__':
    csdnOAuthV2 = CsdnOAuthV2()
    article_list = csdnOAuthV2.get_article_list(page=1)
    save_json_to_file(article_list)

我在测试的时候发现有部分博客通过 api 获取的内容很奇怪,json中只有”status”这一个键,出问题的博客有“欢迎使用csdn-markdown编辑器”,可能还存在其他的博客会有这样的问题。

最后附上 github地址:https://github.com/DouMiaoO-Oo/CSDN-SDK

华三交换机的配置文件备份脚本是一种用于自动备份交换机配置文件的工具。该脚本可以通过CSDN官网进行下载和使用。 华三交换机的配置文件是存储在交换机内部的重要文件,包含了交换机的各种配置信息,例如VLAN配置、端口配置、路由配置等。配置文件的备份对于交换机的可靠性和维护非常重要,当交换机发生故障或需要更换设备时,备份的配置文件可以快速恢复交换机的工作状态。 CSDN是一个IT技术社区平台,上面有很多关于网络设备的技术文章和资源。可以在CSDN中搜索华三交换机配置文件备份脚本,找到相关的介绍和下载链接。 在下载并使用华三交换机配置文件备份脚本之前,需要先了解该脚本的使用方法。一般来说,可以通过登录到交换机的管理界面或通过SSH远程登录交换机来运行该脚本脚本的使用方式可能会因不同的交换机型号而有所不同,因此在使用之前需要参考脚本的说明文档或相关教程。 配置文件备份脚本一般具有以下功能: 1. 自动化备份:可以设定定时任务或触发事件,自动备份交换机的配置文件。 2. 备份文件管理:可以设定备份文件的命名规则、存储位置以及保留时间,方便管理和查找。 3. 安全性与可靠性:可以设定备份文件的加密、完整性校验等功能,确保备份文件的安全性和可靠性。 4. 备份日志记录:可以记录备份操作的日志信息,便于后续排查问题或跟踪操作记录。 综上所述,华三交换机配置文件备份脚本是一种方便、高效的工具,可以帮助网络管理员快速、自动地备份交换机的配置文件,提高交换机的可靠性和维护效率。在使用该脚本之前,需要先在CSDN上找到相关的介绍和下载链接,并按照脚本的说明文档或教程进行配置和使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值