自制微信公众号一键排版工具_javascript技巧

近日,几个码农因「写脚本」被开除了。要我说,不写点脚本那还叫码农吗。我最近也给自己写了一点小脚本,用于在微信公众号中生成个性排版。现在我把整个过程分享给大家。本文就是用这个小工具完成的哦。

操作过公众号后台的朋友肯定知道,微信的编辑器是很简易的,这也不叫缺陷吧,毕竟微信团队的主张一直就是简洁。但是这个编辑器是可以粘贴带格式的html的,所以就给我们留下了发挥的空间,我们可以自己写点css代码,从而定制一个个性的排版样式。对于一个前端工程师,写点样式还不是分分钟的事情~

用markdown写作

程序员最喜爱的写作语言当然是markdown了,它是一种比html更简洁的标记语言,通过工具可以编译为html以及pdf等各种格式。由于足够简洁,所以兼容性也是杠杠的,特别适合在移动端展示文章。

这里我选择用gulp进行任务控制,用gulp-remarkable来进markdown文件的编译。

编写html片段

首先我们要准备好自己写的html片段,css代码内联,用于替换编译生成的html。比如,我会将<h2>标签替换为以下的html

<p style="font-family: 微软雅黑, 宋体, tahoma, arial; margin: 8px 0px 8px; padding: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(227, 227, 227); height: 32px; line-height: 18px;"><span style="font-family: 微软雅黑, sans-serif !important; font-size: 16px; color: #00BBEC; display: block; float: left; padding: 0px 2px 3px; line-height: 28px; border-bottom-width: 2px; border-bottom-style: solid; border-bottom-color: #00BBEC; font-weight: bold;" class="wxqq-color wxqq-borderBottomColor">标题</span></q>

除标题外,你也可以制作任意需要的代码片段,比如引用、表格、列表等等,md文件编译后统统进行替换就行。

代码高亮处理

码农写的文章,难免会嵌点代码来说明问题,但是在微信中排版代码是件头疼的事。要么是代码太长了排版错乱,要么就直接用图片展示代码,但是也有清晰度不够、无法复制等问题。

所以我选择用highlight.js来进行代码的格式化,在用remarkable编译md文件的时候,可以把highlight配置进去,这样一并完成了代码高亮工作。

需要注意的一个地方是,用highlight格式化后的代码在复制到微信编辑器的时候会丢失换行,需要我们额外处理一下,用正则把\n替换成<br>就可以了。

<pre>标签滚动处理

所谓滚动处理就是,在单行代码太长(超过屏幕宽度)的时候,会产生换行,代码就乱了,这是我们不愿意看到的。所以在进行替换的时候要给<pre>标签加上overflow-x:auto; white-space: nowrap;样式,这样能让代码框产生横向滚动条,读者可以滚动来查看未错乱的代码。

这样比较长的代码看起来就是这个效果:

alert(12);
var test = "这是一段很长的文字这是一段很长的文字这是一段很长的文字这是一段很长的文字这是一段很长的文字";
function abc(){
alert("sdfsdf");
}

css内联处理

使用hightlight.js的时候,需要引入一个主题的css文件,比如我用的是monokai-submile.css。但是我们没法把这个css文件粘贴到微信编辑器中,所以需要想办法把这个css文件给内联到html代码中才行。

也就是说,要把css中定义的规则转化为标签的style属性,我在网上搜罗了半天,找到一个名为juice的nodejs模块,帮助我完成了这个工作。用法也相当简单,最终的nodejs代码如下

var htmlFile = './articles/'+file+'.html';
var cssFile = './articles/monokai-sublime.css';
var result = juice.juiceFile(htmlFile, {extraCss: fs.readFileSync(cssFile)}, function(err, html){
if(err){
console.log(err);
}
else{
var meta = '<meta charset="utf8" />';
fs.writeFileSync('./articles/'+file+'_html.html', meta+html);
}
});

快速敲出装逼引号「」

常写文章的同学肯定很喜欢这个引号「」,它让你的文章品质瞬间升华了有木有。但是由于这个引号无法用键盘直接打出,只能通过输入法的特殊符号来输入,特别麻烦。

既然我们可以随意对内容进行替换,那么只需自己定义一个标签就行,比如我定义了q标签,后续用脚本把这个标签替换为「」即可。配合编辑器的emmet插件,输入这个装逼引号只需敲p+tab,相当快捷,「你说呢」。

开始编译吧

我目前进行的处理就以上这些了,当然如果你发挥脑洞的话,可以再做更多的工作哦。

万事俱备,那我们就开始编译吧。大致说一下我用到的东西,首先脚本是用nodejs写的,谁让我是前端工程师呢呢~任务控制当然首选gulp,其次用到了gulp-replace、gulp-remarkable、gulp-rename、juice、highlight.js,就这些了。

把我们预先写好的html片段定义成字符串,然后就可以开始处理工作啦,我的parse任务定义如下

gulp.task('parse', function(){
gulp.src('articles/'+file+'.md')
.pipe(md({
preset: 'full',
disable: ['replacements'],
remarkableOptions: {
typographer: true,
breaks: true,
highlight: function (str, lang) {
if(lang && hljs.getLanguage(lang)) {
try {
return hljs.highlight(lang, str).value.replace(/\n/g, '<br>');
} catch (err) {}
}
try {
return hljs.highlightAuto(str).value.replace(/\n/g, '<br>');
} catch (err) {}
return '';
}
}
}))
.pipe(name(function(path){
path.extname = '.html';
}))
.pipe(replace(/<h2>(.*)<\/h2>/g, h2start+'$1'+h2end))
.pipe(replace(/<q>([^</p>]*)<\/q>/g, '「$1」'))
.pipe(replace(/<pre>/g, '<pre class="hljs" style="overflow-x: auto;">'))
.pipe(replace(/<mark>/g, '<mark style="background-color: #EEE; padding: 0 5px;">'))
.pipe(gulp.dest('./articles'));
});

然后别忘了还有内联css的任务,代码参见上面juice的使用。

为了能够精准编译某一个md文件,我在运行gulp的时候给传递了一个file参数,运行命令为:gulp --file write-wx-article-tool。值就是我这篇文章的名称啦。这个参数可以通过gulp.env.file拿到,就是你当前要处理的文件。

命令执行完后,就会生成一个html文件,你只需双击打开,复制内容,然后在微信编辑器中ctrl+v即可。

结束

这就结束啦?当然,如果你有更多的想法,完全可以自己再去折腾。比如,编译完成后,自动把内容放到系统剪贴板中,自动打开微信文章发布页,自动聚焦编辑器,自动执行ctrl+v指令。这下就真正变成「一键」了,爽乎?

以上就是自制微信公众号一键排版工具的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索微信公众号排版
公众号排版工具
javascript排版、javascript 自动排版、一键排版、在线一键排版、一键排版工具,以便于您获取更多的相关知识。

时间: 2024-09-14 06:40:25

自制微信公众号一键排版工具_javascript技巧的相关文章

微信公众号刷量工具崩溃原来是接口变了

这两天微信公众号刷点击阅读量的工具崩溃了的消息漫天遍布,原来是腾讯在9月27号晚上将接口key改为了"cookie",公号刷量工具就不能通过post的方式进行模拟阅读.这意味着什么呢?意味着我们平时所看到的"点击率超高大号",就要"被迫裸奔"露出"本来面目"了. 为此,不少运营者还特意查看了,9月27和28这两天的阅读数据,将之前觉得有嫌疑的营销号.情感号和娱乐号,从新查看了一遍,发现平时阅读达好几万的,今天就变成了几千.几百

.NET C#使用微信公众号登录网站_实用技巧

适用于:本文适用于有一定微信开发基础的用户 引言:花了300大洋申请了微信公众平台后,发现不能使用微信公众号登录网站(非微信打开)获得微信帐号.仔细研究后才发现还要再花300大洋申请微信开放平台才能接入网站的登录.于是做为屌丝程序员的我想到了自己做一个登录接口. 工具和环境:1. VS2013 .net4.0 C# MVC4.0 Razor 2.插件 A. Microsoft.AspNet.SignalR;时时获取后台数据 B.Gma.QrCodeNet.Encoding;文本生成二维码  实现

“微信云”低调上线:整合第三方微信公众号开发商

前不久微信公众平台重新调整了认证体系,经过认证之后订阅号也可以获得"http://www.aliyun.com/zixun/aggregation/12553.html">自定义菜单"接口,而服务号则可以获得所有的高级接口权限(不包括支付接口).这对微信公众账号的运营者来说无疑是个大好消息,但随着更多功能接口的开放,开发运营公众账号的难度也越来越大.在这样的背景下,催生了一大批第三方微信后台开发商,如网上之前报道过的微库.微信加等. 目前市场上充斥着大量第三方微信公众号

【微信公众号发红包转账】微信公众号上手机网页接收请求,通过公众号给用户发红包 开发流程

有了微信支付 的开发做铺垫,相关的微信其他业务处理起来逻辑就能清晰很多.   准备好这两个架包   ---------------------------------------------------------------------------------------------------1.微信公众号发红包 开发流程图-------------------------------------------------------------------------------------

微信公众平台-做微信公众号开发要学哪些技术?会使用哪些工具?

问题描述 做微信公众号开发要学哪些技术?会使用哪些工具? 我在网上看了一些帖子,可是依然有些糊涂!想请教专业人士:假如我想做一个有业务处理逻辑的公众服务号,我有sae云服务器,会一点简单的web语言,然后怎么做? 解决方案 现在微信公共平台开发多少是基于PHP与java的,想要学好微信开发必须熟悉微信公共平台各类API的调用.建议你先看看微信公共平台的API文档,然后按照Demo做几个.

android开发如何实现一键关注微信公众号功能? 微信有提供api吗

问题描述 android开发如何实现一键关注微信公众号功能? 微信有提供api吗 android开发如何实现一键关注微信公众号功能,微信有提供api吗? 求大神指导..谢谢 解决方案 有的,你百度一下就知道了 简单问题简单解决!!!!!!!!!!!!!!!!!!!!11 解决方案二: 现在已经没有一键关注的功能了.接口被封了. 解决方案三: 遍历一遍,一个个关注咯

开发工具-微信公众号无法获取用户信息

问题描述 微信公众号无法获取用户信息 https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxd282bcf94dc3e773&redirect_uri=https%3A%2F%2Ftx.hxyou.cn%2Fssl%2Fgetinfo&response_type=code&scope=snsapi_base&state=123#wechat_redirect 大家看下者请求有什么问题,为什么在微信开发工具里可

微信公众号里菜单里的这种实时聊天客服,是web版的聊天工具吗?如果是,现在哪个聊天工具比较好?

问题描述 下图是关注了某微信商城后,从微信公众号菜单打开的实时聊天客服界面,想请问下,这种是不是web版的聊天工具?现在哪些web版的聊天工具比较主流比较好用?谢谢先! 解决方案 解决方案二:微信本来就有web版

微信公众号开发之如何一键导出微信所有用户信息到Excel

微信开发交流群:148540125 系列文章参考地址 极速开发微信公众号 欢迎留言.转发 项目源码参考地址 点我点我–欢迎Start 极速开发微信公众号系列文章之如何一键导出微信所有用户信息到Excel 前方高能警告️:用户信息导出我们需要使用以下权限以及接口 权限:必须微信认证(测试号也是可以的) 接口:1.获取用户列表 2.获取用户基本信息 以上链接点击可以查看相关文档 本文中用户导入到excel使用的是jxl,当然大家可以使用poi.如果不会使用jxl可以参考我之前写的 Java实现Exc