WordPress集成一言(Hitokoto)API经典语句功能

投稿   龙笑天下  2018-01-04 07:30:56  495 人阅读  18 条评论

很早前就在很多博客网站看到了这个每日一句、随机语录等经典语句功能,其实我是非常想要加上这个功能的(功能控~~),但出于以下的考虑,就一直没开启集成工作:

  • 增加这个功能,就意味着要一直请求一言,这个就可能会影响网站的加载速度及性能了;另外,大家也都能感觉到很多网站都由于各种原因,要么不稳定,要么就干脆弃站了...
  • 在我这主题,找不到满意的位置放置这这句话~(毕竟拙于设计...)

WordPress集成一言(Hitokoto)API经典语句功能 WordPress 第1张

现在发现,第一点完全是想多了,这个耗不了多少性能,一言 API 的速度还是非常棒的,对加载速度的影响基本可以忽略;另外,一言应该不会这么轻易放弃吧;再退一步讲,就算她放弃了,也还是有很多其他备用 API 的,或者启用张戈给的本地解决方案,实在不行,就去掉这个功能咯,也没啥大不了~

对于第二点,我也是比较纠结的,放在滚动公告栏里或者放在文章末尾,我都觉得不是很得力。直到前阵子偶然在 devoted2 那看到了一个我非常喜欢的方式:评论框里。

WordPress集成一言(Hitokoto)API经典语句功能 WordPress 第2张

一、LWL12 的一言纯净版

在这里,先介绍一下 LWL12 的这个非常纯净的第三方 API 版本,仅显示一句话内容...,速度给力,使用方法也真的是简单粗暴~直接将下面的代码放在自己主题想加载的位置就可以完事了...

  1. <script type="text/javascript" src="https://api.lwl12.com/hitokoto/main/get?encode=js&charset=utf-8"></script>
  2. <div id="lwlhitokoto"><script>lwlhitokoto()</script></div>

二、自建 API 版本

自建版的好处就是,api 及经典语句内容完全由自己管控;当然,缺点也很明显了,木有一言的语句多~~

1、创建 API

好了,直接开动了,首先,新建一个 index.php 文件,文件内容如下:

  1. <?php
  2. /**
  3.  * Wordpress集成一言(Hitokoto)API经典语句功能 - 龙笑天下
  4.  * https://www.ilxtx.com/integrating-yiyan-hitokoto-to-wordpress.html
  5.  */
  6. // 获取句子文件的绝对路径
  7. // 如果你介意别人可能会拖走这个文本,可以把文件名自定义一下,或者通过Nginx禁止拉取也行。
  8. $path = dirname(__FILE__);
  9. $file = file($path."/hitokoto.txt");
  10. # 随机读取一行
  11. $arr  = mt_rand( 0, count$file ) - 1 );
  12. $content  = trim($file[$arr]);
  13. # 编码判断,用于输出相应的响应头部编码
  14. if (isset($_GET['charset']) && !emptyempty($_GET['charset'])) {
  15.     $charset = $_GET['charset'];
  16.     if (strcasecmp($charset,"gbk") == 0 ) {
  17.         $content = mb_convert_encoding($content,'gbk', 'utf-8');
  18.     }
  19. else {
  20.     $charset = 'utf-8';
  21. }
  22. header("Content-Type: text/html; charset=$charset");
  23. # 格式化判断,输出js或纯文本
  24. if ($_GET['format'] === 'js') {
  25.     echo "function hitokoto(){document.write('" . $content ."');}";
  26. else {
  27.     echo $content;
  28. }

然后新建一个名为 hitokoto.txt 的文本文档(在里面每行存入一句经典语句哦~),将 hitokoto.txt 文本文档与上面的 index.php 文件同时放入网站根目录下名为 hitokoto 的文件夹中,当然这里文本文档及文件夹的名称可以更改为其他任意名字,但是要将代码中对应调用部分也做更改。

现在,浏览器访问 http://你的域名/hitokoto/ 就可以看到输出内容了。

2、使用 API

部署方法和上面那个基本一样:在主题代码中你需要显示语录文字的地方添加上如下代码既可以实现对 hitokoto.txt 中文字语录的调用。

  1. <script type="text/javascript" src="https://你的域名/hitokoto/?format=js&charset=utf-8"></script>
  2. <div id="hitokoto"><script>hitokoto()</script></div>

不过,输出的样式也和上面版本一样可能会比较丑,如果你懂 CSS的话可以自己再美化美化。

三、一言官方 AP I

首先,在主题 functions.php 中加入以下代码:

  1. /**
  2.  * Wordpress集成一言(Hitokoto)API经典语句功能 - 龙笑天下
  3.  * https://www.ilxtx.com/integrating-yiyan-hitokoto-to-wordpress.html
  4.  * 2017-12-25 23:14:02
  5.  */
  6. function LxtxgetHitokoto(){
  7.     $url = 'https://sslapi.hitokoto.cn/'; // http://api.hitokoto.cn/
  8.     $data = array(
  9.                 // 'c'=>'d', // 限定内容类型
  10.                 'encode'=>'json'
  11.             );
  12.     $ch = curl_init();
  13.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
  14.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
  15.     curl_setopt($ch, CURLOPT_URL, $url);
  16.     curl_setopt($ch, CURLOPT_POST, true);
  17.     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
  18.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  19.     curl_setopt($ch, CURLOPT_TIMEOUT, 6);
  20.     $response = curl_exec($ch);
  21.     if($error=curl_error($ch)){
  22.         return '欢迎来到龙笑天下~'; // 如果6s内,一言API调用失败则输出这个默认句子~
  23.     }
  24.     curl_close($ch);
  25.     $array_data = json_decode($response,true);
  26.     $lxtx_content = $array_data['hitokoto'].'----《'.$array_data['from'].'》'; // 输出格式:经典语句----《语句出处》
  27.     return $lxtx_content;
  28. }

使用方法也非常简单粗暴,在主题文件中想输出语录的地方加入以下输出代码即可,当然,你也可以跟龙笑天下一样放在文章的评论框哦~:

  1. <?php echo LxtxgetHitokoto(); ?>

另外,再附上一言API的返回参数:

  • id:本条一言的id,可以链接到 https://hitokoto.cn?id=[id] 查看这个一言的完整信息。
  • hitokoto:一言正文,编码方式 usc2,使用 utf-8。
  • type:类型,跟请求参数相同。a: Anime - 动画;b: Comic – 漫画;c: Game – 游戏;d: Novel – 小说;e: Myself – 原创;f: Internet – 来自网络;g: Other – 其他
  • from:一言的出处。
  • creator:添加者。
  • cearted_at:添加时间。
友情提示:大家可以根据返回参数自行修改上面的 LxtxgetHitokoto()函数中的第26行,随意修改为自己想要的格式哦;另外,本文教程不局限于 WordPress ~~

参考资料

历史上的今天:

如果文章对你有帮助,请赞赏支持作者继续创作!

文章标签: ,   ,  
原文地址:https://www.ilxtx.com/integrating-yiyan-hitokoto-to-wordpress.html
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为投稿文章,感谢 龙笑天下 的投稿,版权归原作者所有,欢迎分享本文,转载请保留出处!
龙笑天下

相关文章 分类热门分类热评最新问答

 发表评论

中国赞表情摊手表情吃瓜表情笑哭表情偷笑表情衰表情汗表情思考表情费解表情抓狂表情晕表情流泪表情疑问表情嘻嘻表情吃惊表情鼓掌表情

  1. 天赋网
    天赋网 @回复

    放评论里确实不错

  2. 米扑博客
    米扑博客 @回复

    喜欢钻研总是好的,我的米扑博客,也自己实现了经典名言,js实现的

  3. 学习笔记Blog
    学习笔记Blog @回复

    我很喜欢“一言”,还好,我的 Typecho 主题集成了!666

  4. 龙笑天
    龙笑天 @回复

    666 还截了个效果图啊~ [赞]

  5. 前端氪
    前端氪 @回复

    会不会影响加载速度?

  6. 在线看小说
    在线看小说 @回复

    这个功能真不错啊

  7. SugarHosts
    SugarHosts @回复

    实用教程 顶了

  8. 贷款口子
    贷款口子 @回复

    不错,很实用的教程。

  9. 清秋暖冬
    清秋暖冬 @回复

    这个思路好,等下试试加在评论框

  10. 蝈蝈要安静
    蝈蝈要安静 @回复

    自建的比较好,放在自己网站上放心

  11. 银色月航
    银色月航 @回复

    不想折腾,太累,搞搞内容吧

  12. 明月登楼
    明月登楼 @回复

    感觉这个还是被主题集成了最好!等待鸟哥实现此集成! [黑线]

  13. 靠谱学生兼职网
    靠谱学生兼职网 @回复

    刚刚和WP分手……

  14. 小苍老师
    小苍老师 @回复

    放评论框感觉不错哦,今晚上试一试!

  15. 80后记忆
    80后记忆 @回复

    放到评论框里很不错。