百度分享无法抓取图片及摘要的折中解决办法
前天,cy 在《仿异次元百度分享工具条张戈修改版》一文留言告知,部分百度分享无法抓取图片:
亲自试了下,发现还真是抓不到图片,而且分享的内容也很单调!就一个文章标题而已,反观多说评论点击喜欢后的分享,就丰富多了!
于是翻箱倒柜各种搜,发现网络上并没有完整有效的教程,不过倒是让我找到了个关键词:searchPic。继续搜索这个关键词,找到了百度分享官方说明文档如下:
<!-- Baidu Button BEGIN -->
<div id="bdshare" class="bdshare_t bds_tools get-codes-bdshare">
<a class="bds_qzone"></a>
<a class="bds_tsina"></a>
<a class="bds_tqq"></a>
<a class="bds_renren"></a>
<span class="bds_more">更多</span>
</div>
<script type="text/javascript" id="bdshare_js" data="type=tools&mini=1" ></script>
<script type="text/javascript" id="bdshell_js"></script>
<script type="text/javascript">
/**
* 在这里定义bds_config
*/
var bds_config = {
'bdDes':'您的自定义分享摘要', //'请参考自定义分享摘要'
'bdText':'您的自定义分享内容', //'请参考自定义分享内容'
'bdPopTitle':'您的自定义pop窗口标题', //'请参考自定义pop窗口标题'
'bdTop':'您的自定义侧栏高度', //'请参考自定义侧栏高度'
'bdComment':'您的自定义分享评论', //'请参考自定义分享评论'
'bdPic':'您的自定义分享出去的图片', //'请参考自定义分享出去的图片'
'searchPic':'是否自动抓取页面图片',//'0为抓取,1为不抓取,默认为0,目前只针对新浪微博'
'wbUid':'您的自定义微博 ID', //'请参考自定义微博 id'
'render':false, //'请参考自定义分享回流量统计'
'review':'normal', //'请参考自定义分享回流签名'
'snsKey':{'tsina':'appkey'} //'请参考自定义分享到平台的appkey'
}
document.getElementById('bdshell_js').src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000);
</script>
<!-- Baidu Button END -->
按照官方的办法,只要在<div>或者 javascript 里面定义一下 searchPic:0 不就可以了吗?
然后,在 修改→清缓存→没效果→修改...几轮苦逼测试后,发现依然无效,分享时还是不出现图片!
研究了下点击分享后弹出的网址内容,发现里面的 searchPic 值死活为 false:
当我将地址中的 searchPic=false 手动改成 searchPic=true 或 searchPic=0 时,图片就出来了:
但是,无论是在 div 里的 data 中定义 searchPic,还是在 javascript 中定义 searchPic,点击分享弹出的地址中,searchPic 依然为 false!真无语!
折腾了半天没搞定,正要放弃时,突然注意到官方代码中的 pic 可以定义自定义图片,于是定义了一张图片地址试了试,发现还真可以~!
既然 searchPic 不好使,那只好先用 pic 定义个特色图片凑合下咯!
下面说下给百度分享加上特色图片和摘要内容的简单的方法:
一、在 function.php 中新增如下函数(有的主题可能已存在,请自查):
/*特色图片*/
function get_post_thumbnail_url($post_id){
$post_id = ( null === $post_id ) ? get_the_ID() : $post_id;
$thumbnail_id = get_post_thumbnail_id($post->ID);
if($thumbnail_id ){
$thumb = wp_get_attachment_image_src($thumbnail_id, 'thumbnail');
return $thumb[0];
}else{
return false;
}
}
二、定义 pic 图片及 text 分享内容:
以下方法二选一即可,代码中的@张戈博客,请自行修改成相应的微博 ID,或直接使用博客名称即可:
①、如果博客用的是仿异次元的百度分享工具条,那么可以如下修改 share.php 的相应位置代码:
<!--获取文章摘要(新增)-->
<?php
if (!function_exists('utf8Substr')) {
function utf8Substr($str, $from, $len)
{
return preg_replace('#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$from.'}'.
'((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}
}
if ( is_single() ){
if ($post->post_excerpt) {
$description = $post->post_excerpt;
} else {
if(preg_match('/<p>(.*)</p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){
$post_content = $result['1'];
} else {
$post_content_r = explode("n",trim(strip_tags($post->post_content)));
$post_content = $post_content_r['0'];
}
$description = utf8Substr($post_content,0,200);
}
}
?>
<!--百度分享(修改)-->
<div data="{'url':'<?php the_permalink()?>','pic':'<?php echo get_post_thumbnail_url($post->ID); ?>','text':'分享@张戈博客 的文章「<?php the_title(); ?>」:<?php echo trim($description); ?>...'}" class="bdshare_t bds_tools get-codes-bdshare stb_share_buttons stb_group" id="bdshare">
其中 2~24 行代码是新增代码,请在 share.php 中添加即可
第 21 行中可以修改内容字数,代码中默认设置为 200 个。
第 26 行是修改后的代码,在 share.php 中搜索“bdshare_t bds_tools get-codes” 找到位置后,替换整句代码即可。
②、通用方法:找到百度分享代码中的以下 javascript:
<script type="text/javascript">
document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + new Date().getHours();
</script>
替换成以下代码:
<!--获取文章摘要(新增)-->
<?php
if (!function_exists('utf8Substr')) {
function utf8Substr($str, $from, $len)
{
return preg_replace('#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$from.'}'.
'((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}
}
if ( is_single() ){
if ($post->post_excerpt) {
$description = $post->post_excerpt;
} else {
if(preg_match('/<p>(.*)</p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){
$post_content = $result['1'];
} else {
$post_content_r = explode("n",trim(strip_tags($post->post_content)));
$post_content = $post_content_r['0'];
}
$description = utf8Substr($post_content,0,200);
}
}
?>
<!--百度分享javascript-->
<script type="text/javascript">
var bds_config = {
'bdPic':'<?php echo get_post_thumbnail_url($post->ID); ?>',
'pic':'<?php echo get_post_thumbnail_url($post->ID); ?>',
'text':'分享@张戈博客 的文章「<?php the_title(); ?>」:<?php echo trim($description); ?>...'
}
document.getElementById('bdshell_js').src = "http://share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000);
</script>
做完以上操作后,你再点击分享,应该就会有图片和内容了:
不过图片只有一张!稍有遗憾,先凑合使用吧!
后续,张戈要是找到了解决办法,会继续分享!敬请关注张戈博客最新动态!
- 数据结构和算法——二叉树
- 【专业技术】谷歌浏览器实现Javascript扩展
- 数据结构和算法——二叉排序树
- 通过shell脚本生成查询表数据的sql (r2笔记63天)
- Linux C 编程——多线程
- 数据结构和算法——Huffman树和Huffman编码
- 简单易学的机器学习算法——K-Means++算法
- 梯度下降原理及Python实现
- 海量数据迁移之通过rowid切分大表(r2笔记62天)
- 简单易学的机器学习算法——K-近邻算法
- 使用Python绘制点击图、热图
- 使用shell生成状态报表(r2笔记61天)
- 利用d3.js对QQ群资料进行大数据可视化分析
- 海量数据迁移之分区并行切分(r2笔记60天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP如何搭建百度Ueditor富文本编辑器
- 浅谈keras.callbacks设置模型保存策略
- pandas之分组groupby()的使用整理与总结
- PHP fclose函数用法总结
- Python collections.defaultdict模块用法详解
- PHP crc32()函数讲解
- python读取图像矩阵文件并转换为向量实例
- PHP echo()函数讲解
- Python3开发环境搭建详细教程
- php使用QueryList轻松采集js动态渲染页面方法
- PHP convert_uudecode()函数讲解
- php实现在线考试系统【附源码】
- 实例介绍PHP中zip_open()函数用法
- php实现数字补零的方法总结
- PHP配置ZendOpcache插件加速