Files
pages/2021/03/23/wxpush.html
2025-12-31 16:00:29 +00:00

393 lines
26 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>亲自体验微信推送的制作感受 | Mayx的博客</title>
<meta name="generator" content="Jekyll v3.9.5" />
<meta property="og:title" content="亲自体验微信推送的制作感受" />
<meta name="author" content="mayx" />
<meta property="og:locale" content="zh_CN" />
<meta name="description" content="感谢大佬完成了最复杂的部分😂" />
<meta property="og:description" content="感谢大佬完成了最复杂的部分😂" />
<meta property="og:site_name" content="Mayx的博客" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2021-03-23T00:00:00+08:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="亲自体验微信推送的制作感受" />
<meta name="google-site-verification" content="huTYdEesm8NaFymixMNqflyCp6Jfvd615j5Wq1i2PHc" />
<meta name="msvalidate.01" content="0ADFCE64B3557DC4DC5F2DC224C5FDDD" />
<meta name="yandex-verification" content="fc0e535abed800be" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"mayx"},"dateModified":"2021-03-23T00:00:00+08:00","datePublished":"2021-03-23T00:00:00+08:00","description":"感谢大佬完成了最复杂的部分😂","headline":"亲自体验微信推送的制作感受","mainEntityOfPage":{"@type":"WebPage","@id":"/2021/03/23/wxpush.html"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://avatars0.githubusercontent.com/u/17966333"},"name":"mayx"},"url":"/2021/03/23/wxpush.html"}</script>
<!-- End Jekyll SEO tag -->
<link rel="canonical" href="https://mabbs.github.io/2021/03/23/wxpush.html" />
<link type="application/atom+xml" rel="alternate" href="/atom.xml" title="Mayx的博客" />
<link rel="alternate" type="application/rss+xml" title="Mayx的博客(RSS)" href="/rss.xml" />
<link rel="alternate" type="application/json" title="Mayx的博客(JSON Feed)" href="/feed.json" />
<link rel="stylesheet" href="/assets/css/style.css?v=1767196818" />
<!--[if !IE]> -->
<link rel="stylesheet" href="/Live2dHistoire/live2d/css/live2d.css" />
<!-- <![endif]-->
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Mayx的博客" />
<link rel="webmention" href="https://webmention.io/mabbs.github.io/webmention" />
<link rel="pingback" href="https://webmention.io/mabbs.github.io/xmlrpc" />
<link rel="preconnect" href="https://summary.mayx.eu.org" crossorigin="anonymous" />
<link rel="prefetch" href="https://www.blogsclub.org/badge/mabbs.github.io" as="image" />
<link rel="blogroll" type="text/xml" href="/blogroll.opml" />
<link rel="me" href="https://github.com/Mabbs" />
<script src="/assets/js/jquery.min.js"></script>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<script>
var lastUpdated = new Date("Thu, 01 Jan 2026 00:00:18 +0800");
var BlogAPI = "https://summary.mayx.eu.org";
</script>
<script src="/assets/js/main.js"></script>
<!--[if !IE]> -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="async" src="https://www.googletagmanager.com/gtag/js?id=UA-137710294-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-137710294-1');
</script>
<script src="/assets/js/instant.page.js" type="module"></script>
<!-- <![endif]-->
</head>
<body>
<!--[if !IE]> --><noscript><marquee style="top: -15px; position: relative;"><small>发现当前浏览器没有启用JavaScript这不影响你的浏览但可能会有一些功能无法使用……</small></marquee></noscript><!-- <![endif]-->
<!--[if IE]><marquee style="top: -15px; position: relative;"><small>发现当前浏览器为Internet Explorer这不影响你的浏览但可能会有一些功能无法使用……</small></marquee><![endif]-->
<div class="wrapper">
<header class="h-card">
<h1><a class="u-url u-uid p-name" rel="me" href="/">Mayx的博客</a></h1>
<img src="https://avatars0.githubusercontent.com/u/17966333" fetchpriority="high" class="u-photo" alt="Logo" style="width: 90%; max-width: 300px; max-height: 300px;" />
<p class="p-note">Mayx's Home Page</p>
<form action="/search.html">
<input type="text" name="keyword" id="search-input-all" placeholder="Search blog posts.." />&#160;<input type="submit" value="搜索" />
</form>
<br />
<p class="view"><a class="u-url" href="/Mabbs/">About me</a></p>
<ul class="downloads">
<li style="width: 270px; border-right: none;"><a href="/MayxBlog.tgz">Download <strong>TGZ File</strong></a></li>
</ul>
</header>
<section class="h-entry">
<small><time class="date dt-published" datetime="2021-03-23T00:00:00+08:00">23 March 2021</time> - 字数统计2981 - 阅读大约需要10分钟 - Hits: <span id="/2021/03/23/wxpush.html" class="visitors">Loading...</span></small>
<h1 class="p-name">亲自体验微信推送的制作感受</h1>
<p class="view">by <a class="p-author h-card" href="//github.com/Mabbs">mayx</a></p>
<div id="outdate" style="display:none;">
<hr /><p>
这是一篇创建于 <span id="outime"></span> 天前的文章,其中的信息可能已经有所发展或是发生改变。
</p>
</div>
<script>
daysold = Math.floor((new Date().getTime() - new Date("Tue, 23 Mar 2021 00:00:00 +0800").getTime()) / (24 * 60 * 60 * 1000));
if (daysold > 90) {
document.getElementById("outdate").style.display = "block";
document.getElementById("outime").innerHTML = daysold;
}
</script>
<hr />
<b>AI摘要</b>
<p id="ai-output">这篇文章讲述了作者通过实际体验从Server酱Mini测试号升级到微信认证的服务号对比了两者在功能、监管和使用过程中的差异。作者提到服务号的监察更严格功能如订阅通知需要用户同意且只能发送一次而模板消息则更加便捷。此外作者还分享了自己对WxPusher平台的评价认为其接口和模板选择有局限性。最后作者表示计划尝试自己建立一个更好的微信推送平台因为现有的选择不尽人意。</p>
<hr />
<ul><li><a href="#起因">起因</a></li><li><a href="#实际体验">实际体验</a></li><li><a href="#使用文档">使用文档</a></li><li><a href="#后续的改进">后续的改进</a></li></ul>
<hr />
<main class="post-content e-content" role="main"><p>感谢大佬完成了最复杂的部分😂<!--more--></p>
<h1 id="起因">
<a href="#起因"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 起因
</h1>
<p>我在上个月写了一个<a href="/2021/02/02/serverchan.html">Server酱Mini测试号版</a>,在此之后有位叫做<a href="https://github.com/guanzi008">guanzi008</a>大佬看到了我的文章并愿意给我提供一个有微信认证的公众号让我体验一下Server酱的实际制作过程对此我表示非常感谢把最复杂的事情做完了。像那个Server酱那个平台说过Ta唯一做的事情就是注册了一个有微信认证的公众号而已毕竟微信开放文档傻子都能看懂没什么技术难度。 </p><p>
正好这次有了这个机会,我就可以真正体验一下测试号和通过了微信认证的服务号之间到底有什么样的区别。</p>
<h1 id="实际体验">
<a href="#实际体验"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 实际体验
</h1>
<p>我以前虽然没有微信认证的公众号,不过曾经有用过同学注册的一个个人的公众号,那个是真的废物,接口几乎全都不能用……现在有了微信认证的公众号之后发现虽然这个非常不错,功能基本上该有的都有了,不过有一些地方还是和测试号各有千秋。比如说测试号的监察要松的多,像模板消息根本没有限制,而且无论发什么东西都不用担心封号。而这个认证公众号的监察就要严的多,直接发违法消息肯定是别想了,就说模板消息还必须要用已有的模板,用没有的必须要通过审核。另外我感觉那个所谓的模板消息下线应该是烟雾弹,人家官方文档说的很清楚,<strong>服务号订阅通知功能开启灰度测试,模板消息能力可正常使用</strong>,所以不用太担心。 </p><p>
那个所谓的订阅通知的功能我已经试过了很烂要想推送必须要让用户同意而且是每一次也就是说用户同意一次才有一次的通知权所以说就很废物。倒是有一个长期订阅就是搞起来非常麻烦。还好模板消息目前来看是只要申请就可以使用。所以接下来我就完善了一下我之前在测试号上用的代码增加了Access Token缓存支持POST请求并且增加了摘要、HTML、Markdown等功能代码如下</p>
<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">&lt;?php</span>
<span class="nv">$appid</span><span class="o">=</span><span class="s1">'公众号APPID'</span><span class="p">;</span>
<span class="nv">$secret</span><span class="o">=</span><span class="s1">'公众号Secret'</span><span class="p">;</span>
<span class="nv">$userid</span><span class="o">=</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">'userid'</span><span class="p">];</span>
<span class="nv">$template_id</span><span class="o">=</span><span class="s1">'模板ID'</span><span class="p">;</span>
<span class="nv">$title</span><span class="o">=</span><span class="nb">addslashes</span><span class="p">(</span><span class="nv">$_REQUEST</span><span class="p">[</span><span class="s1">'title'</span><span class="p">]);</span>
<span class="nv">$summary</span><span class="o">=</span><span class="nb">addslashes</span><span class="p">(</span><span class="nv">$_REQUEST</span><span class="p">[</span><span class="s1">'summary'</span><span class="p">]);</span>
<span class="nv">$content</span><span class="o">=</span><span class="nb">addslashes</span><span class="p">(</span><span class="nv">$_REQUEST</span><span class="p">[</span><span class="s1">'content'</span><span class="p">]);</span>
<span class="nv">$addHTML</span><span class="o">=</span><span class="s2">""</span><span class="p">;</span>
<span class="nb">session_id</span><span class="p">(</span><span class="s1">'Storagepush'</span><span class="p">);</span>
<span class="nb">session_start</span><span class="p">();</span>
<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nv">$summary</span><span class="p">){</span>
<span class="nv">$summary</span><span class="o">=</span><span class="nv">$content</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nb">json_decode</span><span class="p">(</span><span class="nb">file_get_contents</span><span class="p">(</span><span class="s1">'https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token='</span><span class="mf">.</span><span class="nv">$_SESSION</span><span class="p">[</span><span class="s1">'access_token'</span><span class="p">]),</span><span class="kc">true</span><span class="p">)[</span><span class="s1">'ip_list'</span><span class="p">]){</span>
<span class="nv">$_SESSION</span><span class="p">[</span><span class="s1">'access_token'</span><span class="p">]</span><span class="o">=</span><span class="nb">json_decode</span><span class="p">(</span><span class="nb">file_get_contents</span><span class="p">(</span><span class="s1">'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;appid='</span><span class="mf">.</span><span class="nv">$appid</span><span class="mf">.</span><span class="s1">'&amp;secret='</span><span class="mf">.</span><span class="nv">$secret</span><span class="p">),</span><span class="kc">true</span><span class="p">)[</span><span class="s1">'access_token'</span><span class="p">];</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"md"</span><span class="p">){</span>
<span class="k">include_once</span><span class="p">(</span><span class="s2">"Parsedown.php"</span><span class="p">);</span>
<span class="nv">$Parsedown</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Parsedown</span><span class="p">();</span>
<span class="c1">//$Parsedown-&gt;setSafeMode(true);</span>
<span class="nv">$content</span> <span class="o">=</span> <span class="nv">$Parsedown</span><span class="o">-&gt;</span><span class="nf">text</span><span class="p">(</span><span class="nv">$content</span><span class="p">);</span>
<span class="nv">$_GET</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"html"</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"html"</span><span class="p">){</span>
<span class="nv">$filename</span><span class="o">=</span><span class="s1">'html/'</span><span class="mf">.</span><span class="nb">md5</span><span class="p">(</span><span class="nb">uniqid</span><span class="p">(</span><span class="nb">mt_rand</span><span class="p">(),</span> <span class="kc">true</span><span class="p">))</span><span class="mf">.</span><span class="s1">'.html'</span><span class="p">;</span>
<span class="nb">file_put_contents</span><span class="p">(</span><span class="nv">$filename</span><span class="p">,</span> <span class="s1">'&lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;&lt;title&gt;'</span><span class="mf">.</span><span class="nv">$title</span><span class="mf">.</span><span class="s1">'&lt;/title&gt;&lt;h1&gt;'</span><span class="mf">.</span><span class="nv">$title</span><span class="mf">.</span><span class="s1">'&lt;/h1&gt;&lt;hr&gt;'</span><span class="mf">.</span><span class="nv">$content</span><span class="mf">.</span><span class="s1">'&lt;hr&gt;&lt;center&gt;Powered By &lt;a href="https://mabbs.github.io/"&gt;Mayx&lt;/a&gt;&lt;/center&gt;'</span><span class="p">);</span>
<span class="nv">$addHTML</span><span class="o">=</span><span class="s1">'"url":"https://'</span><span class="mf">.</span><span class="nv">$_SERVER</span><span class="p">[</span><span class="s1">'HTTP_HOST'</span><span class="p">]</span><span class="mf">.</span><span class="s1">'/'</span><span class="mf">.</span><span class="nv">$filename</span><span class="mf">.</span><span class="s1">'", '</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">echo</span> <span class="nb">file_get_contents</span><span class="p">(</span><span class="s1">'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='</span><span class="mf">.</span><span class="nv">$_SESSION</span><span class="p">[</span><span class="s1">'access_token'</span><span class="p">],</span> <span class="kc">false</span><span class="p">,</span> <span class="nb">stream_context_create</span><span class="p">(</span><span class="k">array</span><span class="p">(</span><span class="s1">'http'</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span><span class="s1">'method'</span><span class="o">=&gt;</span><span class="s1">'post'</span><span class="p">,</span><span class="s1">'header'</span><span class="o">=&gt;</span><span class="s2">"Content-Type: application/json;charset=utf-8"</span><span class="p">,</span><span class="s1">'content'</span><span class="o">=&gt;</span><span class="s1">'{"touser":"'</span><span class="mf">.</span><span class="nv">$userid</span><span class="mf">.</span><span class="s1">'","template_id":"'</span><span class="mf">.</span><span class="nv">$template_id</span><span class="mf">.</span><span class="s1">'", '</span><span class="mf">.</span><span class="nv">$addHTML</span><span class="mf">.</span><span class="s1">'"data":{"first": {"value":"'</span><span class="mf">.</span><span class="nv">$title</span><span class="mf">.</span><span class="s1">'"}, "keyword1": {"value":"'</span><span class="mf">.</span><span class="nv">$summary</span><span class="mf">.</span><span class="s1">'"}, "keyword2": {"value":"'</span><span class="mf">.</span><span class="nb">date</span><span class="p">(</span><span class="s1">'Y-m-d H:i:s'</span><span class="p">)</span><span class="mf">.</span><span class="s1">'"}}}'</span><span class="p">))));</span>
</code></pre></div></div>
<p>要想使用这个代码的话需要用到<a href="https://github.com/erusev/parsedown">Parsedown</a>的库另外模板消息我用的是ID为<code class="language-plaintext highlighter-rouge">OPENTM207965242</code>的模板,如果有人想要用的话也建议用同一个模板。 </p><p>
另外对于用户的OPENID的获取……想用的话就自己想办法吧获取OPENID这种事情很简单。 </p><p>
从体验上来说应该是吊打Server酱那种垃圾而且还没有广告。理论上最大每日推送量是10w次当账号粉丝数超过10W/100W/1000W时模板消息的日调用上限会相应提升。不过这个不防滥用所以还是需要注意一点的。</p>
<h1 id="使用文档">
<a href="#使用文档"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 使用文档
</h1>
<table>
<thead>
<tr>
<th>参数</th>
<th>是否必填</th>
<th>请求方法</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>userid</td>
<td></td>
<td>GET</td>
<td>用户的OPENID</td>
</tr>
<tr>
<td>type</td>
<td></td>
<td>GET</td>
<td>html/md/空</td>
</tr>
<tr>
<td>title</td>
<td></td>
<td>GET/POST</td>
<td>标题</td>
</tr>
<tr>
<td>summary</td>
<td></td>
<td>GET/POST</td>
<td>摘要(不填默认为内容)</td>
</tr>
<tr>
<td>content</td>
<td></td>
<td>GET/POST</td>
<td>内容</td>
</tr>
</tbody>
</table>
<h1 id="后续的改进">
<a href="#后续的改进"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 后续的改进
</h1>
<p>我目前用的公众号的所有人希望整一个像WxPusher的平台我大概看了一下那个东西果然还是个垃圾要推送必须用那个平台特有的API包括开源的那些乱七八糟的SDK也全部都是为那个所谓推送平台设计的另外模板的选择也是真的没什么品味体验实在是一般。所以目前似乎还没有一个像样的开源的微信推送平台那接下来就让我试试看吧我看看到底是为什么没有人愿意制作一个开源的微信推送平台吧</p></main>
<small style="display: block">tags: <a rel="category tag" class="p-category" href="/search.html?keyword=%E5%BE%AE%E4%BF%A1"><em>微信</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=%E6%8E%A8%E9%80%81"><em>推送</em></a> <span style="float: right;"><a href="https://gitlab.com/mayx/mayx.gitlab.io/tree/master/_posts/2021-03-23-wxpush.md">查看原始文件</a></span></small>
<h4 style="border-bottom: 1px solid #e5e5e5;margin: 2em 0 5px;">推荐文章</h4>
<p id="suggest-container">Loading...</p>
<script>
var suggest = $("#suggest-container");
$.get(BlogAPI + "/suggest?id=/2021/03/23/wxpush.html&update=" + lastUpdated.valueOf(), function (data) {
if (data.length) {
getSearchJSON(function (search) {
suggest.empty();
var searchMap = {};
for (var i = 0; i < search.length; i++) {
searchMap[search[i].url] = search[i];
}
var tooltip = $('<div class="content-tooltip"></div>').appendTo('body').hide();
for (var j = 0; j < data.length; j++) {
var item = searchMap[data[j].id];
if (item) {
var link = $('<a href="' + item.url + '">' + item.title + '</a>');
var contentPreview = item.content.substring(0, 100);
if (item.content.length > 100) {
contentPreview += "……";
}
link.hover(
function(e) {
tooltip.text($(this).data('content'))
.css({
top: e.pageY + 10,
left: e.pageX + 10
})
.show();
},
function() {
tooltip.hide();
}
).mousemove(function(e) {
tooltip.css({
top: e.pageY + 10,
left: e.pageX + 10
});
}).data('content', contentPreview);
suggest.append(link);
suggest.append(' - ' + item.date + '<br />');
}
}
});
} else {
suggest.html("暂无推荐文章……");
}
});
</script>
<br />
<div class="pagination">
<span class="prev">
<a href="/2021/03/02/workers.html">
上一篇使用CloudFlare Workers做一些有趣的功能
</a>
</span>
<br />
<span class="next">
<a href="/2021/04/05/try3.html">
下一篇Mayx的产品测评
</a>
</span>
</div>
<!--[if !IE]> -->
<link rel="stylesheet" href="/assets/css/gitalk.css">
<script src="/assets/js/gitalk.min.js"></script>
<div id="gitalk-container"></div>
<script>
var gitalk = new Gitalk({
clientID: '36557aec4c3cb04f7ac6',
clientSecret: 'ac32993299751cb5a9ba81cf2b171cca65879cdb',
repo: 'mabbs.github.io',
owner: 'Mabbs',
admin: ['Mabbs'],
id: '/2021/03/23/wxpush', // Ensure uniqueness and length less than 50
distractionFreeMode: false, // Facebook-like distraction free mode
proxy: "https://cors-anywhere.mayx.eu.org/?https://github.com/login/oauth/access_token"
})
gitalk.render('gitalk-container')
</script>
<!-- <![endif]-->
</section>
<!--[if !IE]> -->
<div id="landlord" style="left:5px;bottom:0px;">
<div class="message" style="opacity:0"></div>
<canvas id="live2d" width="500" height="560" class="live2d"></canvas>
<div class="live_talk_input_body">
<form id="live_talk_input_form">
<div class="live_talk_input_name_body" >
<input type="checkbox" id="load_this" />
<input type="hidden" id="post_id" value="/2021/03/23/wxpush.html" />
<label for="load_this">
<span style="font-size: 11px; color: #fff;">&#160;想问这篇文章</span>
</label>
</div>
<div class="live_talk_input_text_body">
<input name="talk" type="text" class="live_talk_talk white_input" id="AIuserText" autocomplete="off" placeholder="要和我聊什么呀?" />
<button type="submit" class="live_talk_send_btn" id="talk_send">发送</button>
</div>
</form>
</div>
<input name="live_talk" id="live_talk" value="1" type="hidden" />
<div class="live_ico_box" style="display:none;">
<div class="live_ico_item type_info" id="showInfoBtn"></div>
<div class="live_ico_item type_talk" id="showTalkBtn"></div>
<div class="live_ico_item type_music" id="musicButton"></div>
<div class="live_ico_item type_youdu" id="youduButton"></div>
<div class="live_ico_item type_quit" id="hideButton"></div>
<input name="live_statu_val" id="live_statu_val" value="0" type="hidden" />
<audio src="" style="display:none;" id="live2d_bgm" data-bgm="0" preload="none"></audio>
<input id="duType" value="douqilai" type="hidden" />
</div>
</div>
<div id="open_live2d">召唤伊斯特瓦尔</div>
<!-- <![endif]-->
<footer>
<p>
<small>Made with ❤ by Mayx<br />Last updated at 2026-01-01 00:00:18<br /> 总字数614622 - 文章数178 - <a href="/atom.xml" >Atom</a> - <a href="/README.html" >About</a></small>
</p>
</footer>
</div>
<script src="/assets/js/scale.fix.js"></script>
<!--[if !IE]> -->
<script src="/assets/js/main_new.js"></script>
<script src="/Live2dHistoire/live2d/js/live2d.js"></script>
<script src="/Live2dHistoire/live2d/js/message.js"></script>
<!-- <![endif]-->
</body>
</html>