我有個基于github pages的博客,又在很多其他網(wǎng)站上發(fā)博客. 比如csdn . 為了避免重復(fù)操作,想用程序?qū)崿F(xiàn)自動發(fā)博客.
今天上午就試了一下csdn這個網(wǎng)站
方法一-- 用api來發(fā)送博客
進入開發(fā)者文檔可以看到
注冊開發(fā)者, 使用文檔中的方式獲得access_token來獲取授權(quán)
然后就可以post了,比如這篇文章,
方法二 -- 模擬登陸
用python來模擬登陸, 為了簡單,可以使用cookies來利用瀏覽器的會話cookie登陸
保存cookie
用chrome, 點擊進入發(fā)文章的頁面,可以看到
保存下來,等會在python腳本中使用
抓包
尋找post, 提交內(nèi)容的網(wǎng)址, 我最開始一直以為是https://mp.csdn.net/mdeditor/
, 返回的頁面是成功的
但是刷新博客頁面, 并沒有發(fā)表文章,
后來用fiddler抓包才找到正確的網(wǎng)址
元數(shù)據(jù)
然后構(gòu)造發(fā)表的文章的元數(shù)據(jù), 在fiddler中可以發(fā)現(xiàn)
就是這樣的一個字典,
data = {"title":"do you know my name?",
"markdowncontent":'# emm',
"content": '''<h1>hello, world~</h1>''',
"categories":"默認分類",
"channel":33,
"tags":"python",
'type':'original',
"artideedittype":1,
"private":0,
"status":0
#"id": 修改已有文章
}
那個channel就是要發(fā)表到的欄目, 可以在網(wǎng)頁右鍵審查元素發(fā)現(xiàn)各個值的含義
發(fā)表
最后就可以發(fā)送了, 第一次失敗
顯示的是unicode,, 應(yīng)該打印json就行, 然后知道是標題不能為空,添加標題就可以了
嘗試了多次,都成功了, 這是返回的json
由于不支持markdown, 我又下載安裝了python markdown模塊,可以轉(zhuǎn)成html,
這樣使用
def md2html(s):
exts = ['markdown.extensions.extra', 'markdown.extensions.codehilite','markdown.extensions.tables','markdown.extensions.toc']
html = '''
<html lang="zh-cn">
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<link rel="stylesheet">
</head>
<body>
{mdstr}
</body>
</html>
'''
mdstr = markdown.markdown(s,extensions=exts)
return html.format(mdstr = mdstr)
這是html結(jié)果
當我沉浸在成功的喜悅中時,準備發(fā)一系列文章時, 才知道csdn有限制
QAQ
本來還想發(fā)表這些文章的
那以后發(fā)吧
以下配置文件,最新完整的代碼見github, 歡迎star, 如果想添加其他功能, 歡迎fork & PR
#coding: utf-8
'''************************************************************************
> File Name: config.py
> Author: mbinary
> Mail: zhuheqin1@gmail.com
> Created Time: Fri 06 Apr 2018 11:06:16 AM DST
************************************************************************'''
# python變量 配置參數(shù)
# 兩者二選一
# CSDN_AUTH_DATA 在 使用api 需要在http://open.csdn.net/wiki/api/注冊開發(fā)者,得到cliet_id 和 client_secret
# CSDN_COOKIE 在發(fā)博客頁面獲取cookie,
CSDN_AUTH_DATA = {'client_id' :'1100668',
'client_secret': '********************************',
'grant_type': 'password',
'username': 'marvellousbinary',
'password': 'R**********'
}
CSDN_COOKIE = '''
'''
# markdown 語法, 需pip install markdown
MDON = True
# xdefault configuration
DEFAULT_DATA = {
"title":"do you know my name?",
"content": '''<h1>hello, world~</h1>''',
"categories":"默認分類",
"channel":33,
"tags":"python,tag2",
}
'''
channel 各個值的含義
1:移動開發(fā)
2:云計算大數(shù)據(jù)
3:研發(fā)管理
6:數(shù)據(jù)庫
12:運維
14:前端
15:架構(gòu)
16:編程語言
28:人工智能
29:物聯(lián)網(wǎng)
30:游戲開發(fā)
31:后端
32:安全
33:程序人生
34:區(qū)塊鏈
35:音視頻開發(fā)
36:資訊
37:計算機理論與基礎(chǔ)
'''