开发环境
- python3.7
引用的包
import json
import math
import urllib.request
实现思路
通过浏览器开发模式发现,CSDN的进入编辑器之后会通过链接
https://mp.csdn.net/mdeditor/getArticle?id=xxxx 请求到文章的markdown格式,从这里入手就可以直接得到想要的markdown文本。
而访问这个链接则需要登录CSDN之后获取的cookie,可以直接在链接的header查看得到。通过控制变量的方法可以发现,实际上只需要三个cookie就可以得到所需要操作的url的权限,这三个cookie分别是UserName,UserToken和UserInfo
关于文章列表的获取,通过观察网络请求发现一个可以返回文章的id,创建日期等信息的json格式数据的链接
https://blog.csdn.net/madonghyu/phoenix/article/list/1
转换为Hexo格式实现
# 装载cookie
opener = urllib.request.build_opener()
opener.addheaders = [('Cookie', '')]
urllib.request.install_opener(opener)
html = urllib.request.urlopen('https://mp.csdn.net/mdeditor/getArticle?id=xxxx')).read()
j = json.loads(html)
if not j['status']:
print('cookie过期')
print(j)
return
title = j['data']['title']
markdowncontent = j['data']['markdowncontent']
categories = j['data']['categories']
c_list = categories.split(',')
c_str = ""
# 添加分类
for i in c_list:
c_str += " - [{0}]\n".format(i)
tags = j['data']['tags']
# 得到Hexo的所需的markdown格式
string = "---\ntitle: {0}\nid: {4}\ndate: {3}\ntags: [{1}]\ncategories:\n{2}\n\n---\n\n<!--more-->\n\n\n\n".format(title, tags, c_str, dic[ 'data'],dic['id'])
result = string + markdowncontent
file = open(self.output + '{0}.md'.format(title), 'w')
file.write(result)
file.close()
print(self.output + '{0}.md'.format(title) + '添加成功!')
博主用的hexo-next主题由于不支持特殊字符URL转码,所以标题如果带特殊字符会无法访问,这里建议可以在title字段后面添加一个id字段,存放文章的id,并且修改hexo的_config.yml里面的permalink为
permalink: :year/:month/:day/:id/
新版的CSDN博客编辑器的markdown语法为CommonMark spec,暂时没发现使用CSDN的格式之后hexo显示异常的问题
获得文章列表的实现
i = 1
page_num = -1
# 获得的数据列表
lists = []
# 循环遍历
while True:
response = json.loads(urllib.request.urlopen(self.article_list_url + str(i)).read())
if response['status'] is 1:
if page_num == -1:
# 得到遍历的次数
page_num = math.ceil(response['data']['total'] / 20)
# 得到文章列表
article_list = response['data']['article_list']
for data in article_list:
# 得到文章的id和创建日期
lists.append({'id': data['ArticleId'], 'data': data['PostTime']})
if i > page_num:
break
i = i + 1
具体代码的GitHub地址