mulit-article-publisher
Version:
Multi-platform article publisher
143 lines (125 loc) • 3.57 kB
JavaScript
const axios = require("axios");
const qs = require("qs");
const fs = require("fs");
const marked = require("marked");
const utils = require("../utils");
module.exports = {
zhihuPublisher: async (articlePath) => {
console.log(11);
if (!articlePath) {
return;
}
const readFile = utils.readFile;
const getCookie = utils.getCookie;
const protocol = "https://";
const base_host = "zhuanlan.zhihu.com/";
const base_api = "/api";
const cookie = await getCookie("https://zhihu.com/");
const path = {
getDraftsPath() {
return `${protocol}${base_host}${base_api}/articles/drafts`;
},
getDraftPath(id) {
return `${protocol}${base_host}${base_api}/articles/${id}/draft`;
},
getPublishPath(id) {
return `${protocol}${base_host}${base_api}/articles/${id}/publish`;
},
getUserInfoPath() {
return "https://www.zhihu.com/api/v4/me";
},
getColumnInfoPath(url_token) {
return `https://www.zhihu.com/api/v4/members/${url_token}/column-contributions`;
},
getWritePath() {
return `${protocol}${base_host}/write`;
},
getEditPath(id) {
return `${protocol}${base_host}/p/${id}/edit`;
}
};
const request = axios.create({
headers: {
"user-agent":
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
cookie: cookie
}
});
request.interceptors.response.use(
(data) => {
if (data && data.status === 200) {
return data.data;
}
},
(err) => {
return Promise.resolve(err);
}
);
const getUserInfo = () => {
return request.get(path.getUserInfoPath());
};
const getColumnInfo = (url_token) => {
return request.get(path.getColumnInfoPath(url_token));
};
const sendDrafts = () => {
return request.post(path.getDraftsPath(), {
headers: {
referer: path.getWritePath()
}
});
};
const sendDraft = (id, formData) => {
return request.patch(
path.getDraftPath(id),
{
...formData
},
{
headers: {
referer: path.getEditPath(id)
}
}
);
};
const publish = (id, formData) => {
return request.put(
path.getPublishPath(id),
{
column: formData.column,
commentPermission: "anyone"
},
{
headers: {
referer: path.getEditPath(id)
}
}
);
};
const formData = {
id: "", // article id
url_token: "",
column: {},
title: "",
content: ""
};
const userInfo = await getUserInfo();
formData.url_token = userInfo.url_token || "";
const columnInfo = await getColumnInfo(formData.url_token);
if (columnInfo && columnInfo.data && columnInfo.data.length) {
//暂时用第一个专栏
formData.column = columnInfo.data[0].column;
}
const data = await sendDrafts();
if (data) {
const id = data.id;
//todo:save md
const md = await readFile(articlePath);
const result = /^---\s*title:\s?(.*)\s*(.*:\s?.*\s)*---\s*/.exec(md);
formData.content = md.replace(result[0], "");
formData.content = marked(formData.content).replace(/\n*/g, "");
formData.title = result[1];
await sendDraft(id, formData);
await publish(id, formData);
}
}
};