教程已更新,新版方法可以动态获取文字内容和头图,旧方法已折叠。
我最开始是通过搜索typecho QQ卡片搜到一个教程,但他的方法只对他自己的主题有效,而我又找不到handsome调用文章的代码,不会魔改他的方法,因此只能将就的利用常见的方法来显示。
最终ucw大佬还是找到了新的、接近完美的方法。
编辑handsome的header.php文件,文件位置在:
/data/basic/sites/www.wnark.com/www/usr/themes/handsome/component/
我是用的appnode,如果用其他的环境比如宝塔或者lnmp一键脚本请自行进入自己的文件夹内
编辑header.php.(网上说不手动添加代码就会抓取其它内容,但根据我的经验QQ压根不会抓取)
在<head>标签下面添加代码:
<!-- QQCard BEGIN -->
<meta itemprop="name" content="标题">
<meta itemprop="image" content="图片">
<meta name="description" itemprop="description" content="描述">
<!-- QQCard END -->
标题为网站标题,可以替换成你网站的名称。
图片即为你想要QQ卡片显示的图片链接,建议使用网站logo,大小合适。
描述就随便写一段话,瞎写都行。
写完后保存文件,接下来就是刷新缓存了。
有两种刷新方式:
第一种是常规的用
https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshareget_urlinfo?url=你的网址
例如我的:
https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshareget_urlinfo?url=https://www.wnark.com
应该显示json代码,也就是你填的内容:
好处是高大上,坏处就是效率低,并且当显示一堆乱码的时候你会感觉是不是自己弄错了。
第二种就是用AE博客的强制刷新工具
这个工具是别人用易语言编写的,卡巴斯基虽然没报毒,但我也没源码,不能保证安全性,所以请在虚拟机内运行。
QQ网址强制变XML卡片.zip
我使用XML地址(也就是网站的网站地图“sitemap”)点击启动,返回关键词即为我设置的关键词。
不太一样的地方是我之前测试的时候QQ缓存,还没更新。
显示效果如下所示:
还有这个卡片貌似只在手机QQ/手机TIM客户端生效,并且发送到的人看不到,只有接收到的人才能看到,建议双开个QQ测试
这种卡片对搜索引擎也有效果:
但我的貌似只能在手机端搜索引擎才会这也显示,我猜是搜索引擎的缓存的原因。
处理的好的话可以让搜索引擎界面很整洁。
首先我们看一下这段声明的格式:
<!-- QQCard BEGIN -->
<meta itemprop="name" content="标题">
<meta itemprop="image" content="图片">
<meta name="description" itemprop="description" content="描述">
<!-- QQCard END -->
meta
标签直接插入component/header.php
的head
标记内即可,对于标题的获取,直接调用libs/Content.php
中的方法Content::echoTitle($this,$this->options->title,$this->_currentPage);
即可;而对于图片和描述,我们分情况讨论:
第一种情况,当前页面为首页,即$this->is('index')==true
,图片我选择了网站logo(但是因为懒就没有动态获取),描述则直接输出博客描述,即:
<?php if($this->is('index')): ?>
<meta itemprop="image" content="https://pic.wnark.com/images/2019/11/08/50x50.png">
<meta name="description" itemprop="description" content="<?php $this->options->description(); ?>">
如果你也需要相同的部署,请替换https://pic.wnark.com/images/2019/11/08/50x50.png
为你希望的首页展现图片地址。
第二种情况,当前页面是文章页,即$this->is('post')==true
,我认为此时应该输出该文章的头图和对应的文章摘要,这部分参考主题写法和libs/Content.php
中的内容很快可以得到。这里我使用Content::returnHeaderImgSrc($this,'post',0,true);
来获取头图的URL;使用Content::excerpt(trim($this->fields->customSummary)!=''?$this->fields->customSummary:$this->excerpt,200);
来获取摘要,我截取了200字,但事实上QQ也会进行一次截取,长度大概更短,所以截取的字数基本上是无关紧要的。这部分的代码如下:
<?php elseif($this->is('post')): ?>
<meta itemprop="image" content="<?php echo Content::returnHeaderImgSrc($this,'post',0,true); ?>">
<meta name="description" itemprop="description" content="<?php echo Content::excerpt(trim($this->fields->customSummary)!=''?$this->fields->customSummary:$this->excerpt,200); ?>">
我没有扩展更多的情况,对于我来说,这两种情况够用了,我设置的其他情况规则与首页规则相同,但是为了方便以后的扩展我还是将两者分开书写。如果你有更多需求,可以自行扩展,扩展时对页面类型的判断方法可以参考神奇的is语法。
<?php else: ?>
<meta itemprop="image" content="https://pic.wnark.com/images/2019/11/08/50x50.png">
<meta name="description" itemprop="description" content="<?php $this->options->description(); ?>">
<?php endif; ?>
那么最终我们的完整代码就是这样:
<!-- QQCard BEGIN -->
<meta itemprop="name" content="<?php Content::echoTitle($this,$this->options->title,$this->_currentPage); ?>">
<?php if($this->is('index')): ?>
<meta itemprop="image" content="https://pic.wnark.com/images/2019/11/08/50x50.png">
<meta name="description" itemprop="description" content="<?php $this->options->description(); ?>">
<?php elseif($this->is('post')): ?>
<meta itemprop="image" content="<?php echo Content::returnHeaderImgSrc($this,'post',0,true); ?>">
<meta name="description" itemprop="description" content="<?php echo Content::excerpt(trim($this->fields->customSummary)!=''?$this->fields->customSummary:$this->excerpt,200); ?>">
<?php else: ?>
<meta itemprop="image" content="https://pic.wnark.com/images/2019/11/08/50x50.png">
<meta name="description" itemprop="description" content="<?php $this->options->description(); ?>">
<?php endif; ?>
<!-- QQCard END -->
请替换https://pic.wnark.com/images/2019/11/08/50x50.png
为你希望的首页展现图片地址。
刷新缓存:
完成插入后,我们还需要验证配置是否有效并刷新QQ的缓存,这一步通常是通过访问https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshareget_urlinfo?url=欲检测的网址
来完成,如果返回的jsonp数据中包括你设置的内容,表示设置有效且缓存已经刷新完毕。视情况可能需要多次刷新。
还有使用易语言编写的脚本,只不过这里使用ucw大佬编写的python3脚本
但前提是你的网站需要有一个sitemap.xml。脚本的内容如下:
#!/usr/bin/python3
import xml.etree.ElementTree as ET
import requests
xmldata=requests.get('https://www.wnark.com/sitemap.xml')
root=ET.fromstring(xmldata.text)
for url in root:
print(requests.get('https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshareget_urlinfo?url=%s'%url[0].text).text)
请将https://www.wnark.com/sitemap.xml
替换成你自己的网站地图
脚本运行情况如下所示:
(由于之前的缓存很难清除,所以大部分内容还是我之前的内容)
QQ的缓存刷新很慢的,所以第一次刷新的时候一个内容都没有属于正常现象
参考:
一个为handsome主题特化的QQ卡片解决方案
themes:is-syntax - Typecho Docs
版权属于:寒夜方舟
本文链接:https://www.wnark.com/archives/17.html
本站所有原创文章采用署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)。 您可以自由地转载和修改,但请注明引用文章来源和不可用于商业目的。声明:本博客完全禁止任何商业类网站转载,包括但不限于CSDN,51CTO,百度文库,360DOC,AcFun,哔哩哔哩等网站。
4 条评论
为什么我做了后发QQ却不显示?已经执行过好几遍那个python脚本,开始的时候什么关于网站的输出都没有,后来多执行几次就有了,但我发QQ还是看不到,请问是有什么时间限制吗?比如过个两三天后才能看到?我是昨晚做的
自己发确实不会显示,但别人看的到。建议开个小号来看。
啊!
感谢分享