chaihongjun.me

dedecms接入熊掌号API提交功能的改造方法

看到文章标题你也许会懵逼,其实就是说把网站的数据也就是URL提交到百度熊掌号这么一个系统里面,其实熊掌号是一个算比较复杂的系统,通过它的描述:

百度熊掌号是内容和服务提供者入驻百度生态的认证账号,致力于帮助内容和服务提供者便捷、高效地连接全网用户,并充分利用百度生态开放的优势,获取流量、沉淀用户、塑造品牌,实现自身价值的快速增长。

可以看出来它的复杂性,这里我们只是使用了他的搜索资源平台的入口,提供我们网站资源。具体还要数据开放平台以及类似公众号的百家号平台等其他平台,可以前往熊掌号官网(http://xiongzhang.baidu.com/official/home/main)进一步了解。这里只说如何改造网站接入熊掌号。

  1. 首先是开通工作,这个不做详细说明,依据平台的要求提示操作即可,这里我们默认已经通过审核

  2. 直接进入页面改造步骤QQ截图20171121103208.jpg

  3. 由于本网站是H5的相适式网站,所以按照H5的改造步骤完成:

在所有页面的头部<head>里面添加代码:

<script src="//msite.baidu.com/sdk/c.js?appid=这里是你的熊掌ID"></script>

然后是给H5页面添加关注功能(强烈推荐,但是似乎不是强制的) ,至多选择两种方式           

QQ截图20171121103709.jpg

前面的这个几个代码改造属于粉丝关注改造不是核心的部分,后面这里则是核心的部分之一,改造页面使之符合熊掌号的规范:

4. 添加canonical标签

在H5页面<head>部分添加:

<link rel="canonical" href="这里是H5对应的PC页面地址"/>

要求href的内容为MIP页或H5页对应的PC页地址;如果没有PC页,则填写当前页面地址。

然后是添加JSON_LD数据,示例:

<script type="application/ld+json">
        {
            "@context": "https://ziyuan.baidu.com/contexts/cambrian.jsonld",
            "@id": "这个是当前页面的URL",
            "appid": "这里是熊掌号ID",
            "title": "当前页面的标题",
            "images": [
                "https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png",
                "https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top_ca79a146.png",
                "https://m.baidu.com/static/index/plus/plus_logo.png"
                ],
            "description": "当前页面的描述",
            "pubDate": "页面发布时间"
        }
    </script>

说明:

@context:   必选字段,   请保留 &ldquo;https://ziyuan.baidu.com/contexts/cambrian.jsonld&rdquo;,若需要校验数据的schema,则可替换为schema地址

@id:    必选字段,   当前网页的url

appid:  必选字段,   熊掌号ID

title:  必选字段,   标题,建议长度:20个字符以内

images: 可选字段,   搜索结果结构化信息展示,仅允许提供0张,1张图或3张图

description:    可选字段,   内容摘要:120个字符以内

pubDate:    必选字段,   内容发布时间,格式是(2017-06-15T08:00:01)

显然上面这些内容是要放置在内容页也就是详情页内,对于DEDECMS可以将上面的实例改造如下:

 <script type="application/ld+json">
        {
            "@context": "https://ziyuan.baidu.com/contexts/cambrian.jsonld",
            "@id": "https://chaihongjun.me{dede:field.arcurl/}",
            "appid": "{dede:global.cfg_xzh_id/}",
            "title": "{dede:field.title/}",
            "images": [
                "https://chaihongjun.me{dede:field.litpic/}"
                ],
            "description": "{dede:field.description/}",
            "pubDate": "{dede:field.pubdate function="MyDate('Y-m-d',@me)"/}T{dede:field.pubdate function="MyDate('H:i:s',@me)"/}"
        }
    </script>

这里说明一下,

https://chaihongjun.me{dede:field.arcurl/}

获取的是当前文章页的URL,而

{dede:global.cfg_xzh_id/}

这里则是百度熊掌号的ID,这里配置为一个全局变量方便后续的数据提交部分的修改。images字段,则是使用的了dedecms文章缩略图,默认每篇文章带有一张缩略图,这里只引用一张也是符合代码要求的。摘要和发布时间不做说明。

以上的工作完成之后,即可通过在线校验工具

QQ截图20171121105213.jpg

检验一下页面是否符合规范:

QQ截图20171121105341.jpg

最后,我们要完成我们核心的工作部分,数据的提交。这里数据的提交分为API提交手动提交,手动提交,顾名思义就是将新页面URL在这里提交,比较的费事。咱们做的是每当发布完一篇文章之后,自动提交这篇页面的URL。这里参考之前的文章《dedecms后台控制内容是否需要主动提交到百度

5. 进入数据库选择数据表#@_archives,在表结构最后添加一个新的字段xzh,这个字段类型为tinyint,设默认值为1,表示推送数据,当值为0的时候不推送数据,这么做的目的是为了方便后台控制是否推送。接着模仿前面提及文章的部分修改article_add.php,article_edit.php,archives_add.php和archives_edit.php这4个文件,在相应的地方添加xzh和$xzh。以及整合URL提交部分,将之前的URL提交和新的熊掌号URL提交整合在一起,部分代码:

/*  article_add.php*/
...

if($push==1 && $xzh==1) {
{
$urls[]='https://'.$cfg_baiduhost.'/'.$artUrl;
$api = 'http://data.zz.baidu.com/urls?site='.$cfg_baiduhost.'&token='.$cfg_badutoken;
$api_xzh = 'http://data.zz.baidu.com/urls?appid='.$cfg_xzh_id.'&token='.$cfg_xzh_token.'&type=realtime';
/*   百度站长平台链接提交 */
$ch = curl_init();
$options =  array(
    CURLOPT_URL => $api,
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => implode("\n", $urls),
    CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);

/*   熊掌号数据提交 */
$ch_xzh = curl_init();
$options_xzh =  array(
    CURLOPT_URL => $api_xzh,
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => implode("\n", $urls),
    CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch_xzh, $options_xzh);
$result_xzh = curl_exec($ch_xzh);

}
    ClearMyAddon($arcID, $title);
    //返回成功信息
    $msg = "      请选择你的后续操作:
    <a href='article_add.php?cid=$typeid'><u>继续发布文章</u></a>
    &nbsp;&nbsp;
    <a href='$artUrl' target='_blank'><u>查看文章</u></a>
    &nbsp;&nbsp;
    <a href='archives_do.php?aid=".$arcID."&dopost=editArchives'><u>更改文章</u></a>
    &nbsp;&nbsp;
    <a href='catalog_do.php?cid=$typeid&dopost=listArchives'><u>已发布文章管理</u></a>
    <a href=''><u>百度提交返回:".$result."熊掌号提交返回:".$result_xzh."</u></a>
   &nbsp;&nbsp; $backurl";
}
else {
    ClearMyAddon($arcID, $title);
    //返回成功信息
    $msg = "      请选择你的后续操作:
    <a href='article_add.php?cid=$typeid'><u>继续发布文章</u></a>
    &nbsp;&nbsp;
    <a href='$artUrl' target='_blank'><u>查看文章</u></a>
    &nbsp;&nbsp;
    <a href='archives_do.php?aid=".$arcID."&dopost=editArchives'><u>更改文章</u></a>
    &nbsp;&nbsp;
    <a href='catalog_do.php?cid=$typeid&dopost=listArchives'><u>已发布文章管理</u></a>
    &nbsp;&nbsp;$backurl";
}
  $msg = "<div style=\"line-height:36px;height:36px\">{$msg}</div>".GetUpdateTest();
    $wintitle = "成功发布文章!";
    $wecome_info = "文章管理::发布文章";
    $win = new OxWindow();
    $win->AddTitle("成功发布文章:");
    $win->AddMsgItem($msg);
    $winform = $win->GetWindow("hand","&nbsp;",false);
    $win->Display();
}
?>

具体修改,请参考上传的附件文件

6. 前面提到的全局变量别忘记添加 cfg_xzh_id 表示熊掌号ID,cfg_xzh_token表示熊掌号的token

7.修改后台管理模板文件,在article_add.htm和artchives_add.htm添加如下:

<!--主动推送数据 -->
<td width="100">主动推送到百度:</td>
<td><input type='radio' name='push' value="0" /> 不推送
    <input type='radio' name='push' value="1"  checked='1'/> 推送</td>
<!--主动推送数据 -->
<!-- 上面是以前添加数据主动提交的控件开关  -->
<!-- 下面是新增加的针对熊掌号数据提交的控件开关  -->
<!--熊掌号推送数据 -->
<td width="100">主动推送到熊掌号:</td>
<td><input type='radio' name='xzh' value="0" /> 不推送
    <input type='radio' name='xzh' value="1"  checked='1'/> 推送</td>
<!--熊掌号推送数据 -->

在article_edit.htm和archives_edit.htm添加如下:

<!--主动推送数据 -->
<td width="100">主动推送到百度:</td>
<td><input type='radio' name='push' value="0"  <?php if($arcRow['push']=='0') echo " checked='1' "?>/> 不推送
<input type='radio' name='push' value="1"  <?php if($arcRow['push']=='1') echo " checked='1' "?>/> 推送</td>
<!--主动推送数据 -->
<!-- 上面是以前添加数据主动提交的控件开关  -->
<!-- 下面是新增加的针对熊掌号数据提交的控件开关  -->
<!--熊掌号推送数据 -->
<td width="100">主动推送到熊掌号:</td>
<td><input type='radio' name='xzh' value="0"  <?php if($arcRow['xzh']=='0') echo " checked='1' "?>/> 不推送
<input type='radio' name='xzh' value="1"  <?php if($arcRow['xzh']=='1') echo " checked='1' "?>/> 推送</td>
<!--熊掌号推送数据 -->

当前这文章发布出去之后后台显示如下:

QQ截图20171121111240.jpg
PS:后台目前只能设置为同时推送和同时不推送,不然会出现问题
 

submit_url.zip

知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。作者:柴宏俊»