前言
早前進(jìn)入it
這個(gè)行業(yè)就有寫博客的習(xí)慣帮孔,之前用的一款百度出的【百度空間】的產(chǎn)品祭务,當(dāng)時(shí)一些文章還有不少的瀏覽量中狂,可惜后來【百度空間】這款產(chǎn)品下線了屁柏,就這樣自己的一點(diǎn)小積累付諸東流了啦膜。后來接觸到了git和github。心想不能再被別人牽著鼻子走了淌喻,寫博客本地必須得留個(gè)備份僧家,正好git滿足這一點(diǎn),如是就在github上間了一個(gè)個(gè)人倉(cāng)庫(kù)裸删。把每次寫的博客commit上去八拱。但倉(cāng)庫(kù)的權(quán)限設(shè)置成了private
,畢竟有些文章只是自己純粹的個(gè)人筆記涯塔,不太好公開了肌稻,隨著各大創(chuàng)作平臺(tái)的興起,掘金匕荸、簡(jiǎn)書爹谭、知乎、CSDN榛搔、還有微信公眾號(hào)诺凡,其中微信公眾號(hào)我覺得是一個(gè)非常不錯(cuò)的方式,因?yàn)橹灰脩絷P(guān)注药薯,博主就可以給其推送文章绑洛。在知識(shí)純粹分享的基礎(chǔ)上加了一點(diǎn)強(qiáng)行安利的意思。那么怎么把我github上面的文章導(dǎo)入到微信公眾號(hào)里面呢童本,下面就以我的這篇博文為例介紹下我是怎么操作的真屯。
阻礙的地方和解決思路
- 微信公眾號(hào)不支持markdown格式,這個(gè)markdown-nice這款產(chǎn)品可以解決穷娱,免費(fèi)的親绑蔫!
- github在線圖片鏈接直接粘貼到微信公眾號(hào)里是不能上傳的會(huì)抱這個(gè)錯(cuò):原因估計(jì)是因?yàn)楸粔α?/li>
- 這點(diǎn)可以用
jsdelivr
進(jìn)行CDN加速,比如有一張github圖片地址是:https://github.com/chuliangcai/study/blob/master/src/computer-science-education.jpg?raw=true
study是倉(cāng)庫(kù)名泵额,分支是master配深,文件路徑是/src/computer-science-education.jpg
,加速后的地址是:https://cdn.jsdelivr.net/gh/chuliangcai/study/src/computer-science-education.jpg
- 由于過程中需要解析markdown嫁盲,
flexmark
是個(gè)不錯(cuò)的選擇篓叶。
開搞
選擇一篇寫好的本地文章,比如
markdown寫微信公眾號(hào).md
,需要特別注意的是圖片一定要使用標(biāo)準(zhǔn)的markdown格式缸托,形如[圖片上傳失敗...(image-155a08-1619266052805)]
左敌,否則后面轉(zhuǎn)換的時(shí)候會(huì)不支持。在github新建一個(gè)倉(cāng)庫(kù)俐镐,設(shè)置成
public
矫限,取名freedom
寓意自由。做一個(gè)自由的????
- 使用
git clone https://github.com/chuliangcai/freedom.git
將倉(cāng)庫(kù)下載到本地 - 將本地文章拷貝到目標(biāo)倉(cāng)庫(kù)中佩抹。因?yàn)閱渭兊奈募截悷o法將引用的圖片一起拷走叼风,所以此處寫代碼進(jìn)行自動(dòng)拷貝,代碼如下:
package com.family.flexmark;
import java.io.File;
import java.io.FileReader;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import com.vladsch.flexmark.ast.Image;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.util.ast.Node;
import com.vladsch.flexmark.util.collection.iteration.ReversiblePeekingIterator;
import com.vladsch.flexmark.util.data.MutableDataSet;
public class FlexMarkDemoApplication {
private static String dirPath = "";
public static File destFileDir;
public static void main(String[] args) throws Exception {
MutableDataSet options = new MutableDataSet();
Parser parser = Parser.builder(options).build();
String file = "/Users/chuliangcai/data/projects/blog/app/blog/editor/markdown寫微信公眾號(hào).md";
String descFile = "/Users/chuliangcai/data/projects/freedom/technology/other/markdown寫微信公眾號(hào).md";
dirPath = StringUtils.substringBeforeLast(file, "/");
destFileDir = new File(StringUtils.substringBeforeLast(descFile, "/"));
//noinspection ResultOfMethodCallIgnored
destFileDir.mkdirs();
FileUtils.copyFileToDirectory(new File(file), destFileDir);
Node document = parser.parseReader(new FileReader(file));
extractNode(document);
}
public static void extractNode(Node node) throws Exception {
if (!node.hasChildren()) {
return;
}
ReversiblePeekingIterator<Node> iterator = node.getChildIterator();
while (iterator.hasNext()) {
Node node1 = iterator.next();
if (node1 instanceof Image) {
Image image = (Image) node1;
File imgFile = new File(dirPath + "/" + image.getUrl().toString());
FileUtils.copyFileToDirectory(imgFile, destFileDir);
} else {
extractNode(node1);
}
}
}
}
使用typora
打開freedom
文件夾棍苹,查看效果无宿。
- 提交文章
git push
- 編寫
java
代碼將文章中的圖片全部轉(zhuǎn)換為jsdelivr的路徑,代碼如下
public class RegexDemo {
public static final String OUTPUT_PATH = "/Users/chuliangcai/Desktop/markdown寫微信公眾號(hào).md";
public static final Pattern PATTERN = Pattern.compile("!\\[[0-9a-zA-Z_.-]+]\\([0-9a-zA-Z_.-]+\\)");
public static final String IMAGE_PATH_PREFIX = "https://cdn.jsdelivr.net/gh/chuliangcai/freedom/technology/algorithm/";
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("/Users/chuliangcai/data/projects/freedom/technology/other/markdown寫微信公眾號(hào).md");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(OUTPUT_PATH)));
String str;
while ((str = br.readLine()) != null) {
Matcher matcher = PATTERN.matcher(str);
if (matcher.find()) {
String image = matcher.group();
String fileName = StringUtils.substringBetween(image, "(", ")");
String replaced = str.replace(image, "![" + fileName + "](" + IMAGE_PATH_PREFIX + fileName + ")");
bw.write(replaced + "\n");
} else {
bw.write(str + "\n");
}
}
br.close();
bw.flush();
bw.close();
}
}
- 進(jìn)入
markdown nice
官網(wǎng)注冊(cè)賬戶 - 將剛才的輸出內(nèi)容拷貝到markdown編輯區(qū)域
進(jìn)入微信公眾號(hào)后臺(tái)枢里,新建圖文素材懈贺,找個(gè)漂亮的首圖,粘貼剛才的內(nèi)容坡垫。
最終手機(jī)效果如下,效果滿分画侣!
擴(kuò)展到其他平臺(tái)
讓自己的文章傳播出去吧
-
知乎 markdown-nice就支持哦冰悠!
-
簡(jiǎn)書
、博客園
配乱、csdn博客
均支持markdown編輯器溉卓,直接拷貝進(jìn)去即可
不足之處
整個(gè)過程手動(dòng)的地方有點(diǎn)多,最好集成一下各大平臺(tái)的授權(quán)搬泥。然后做一個(gè)簡(jiǎn)單的桌面應(yīng)用桑寨。實(shí)現(xiàn)一鍵發(fā)布。
附錄
jsdelivr 網(wǎng)站地址:https://www.jsdelivr.com/?docs=gh
markdown-nice官網(wǎng):https://www.mdnice.com/
mark解析器flexmark地址:https://github.com/vsch/flexmark-java