美文网首页程序员
Hexo站点主动推送百度-基于Flow.ci

Hexo站点主动推送百度-基于Flow.ci

作者: 小矮人Ethan | 来源:发表于2016-12-19 17:14 被阅读593次

    写在前面:

    下面是链接提交方式的对比:

    如何选择链接提交方式
    1、主动推送:最为快速的提交方式,推荐您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。
    2、自动推送:最为便捷的提交方式,请将自动推送的JS代码部署在站点的每一个页面源代码中,部署代码的页面在每次被浏览时,链接会被自动推送给百度。可以与主动推送配合使用。
    3、sitemap:您可以定期将网站链接放到sitemap中,然后将sitemap提交给百度。百度会周期性的抓取检查您提交的sitemap,对其中的链接进行处理,但收录速度慢于主动推送。
    4、手动提交:一次性提交链接给百度,可以使用此种方式。
    来自百度站长>>

    原创文章,转发请注明!

    访问接口实现主动提交

    使用Post请求,通过配置site和token将包含你需要提交的链接的数组提交到百度提供的接口!
    示例代码(这里实现了php的和python的):

    php:

    说明:此方法适合能够自动构建sitemap的情况,未设置的请移步>>
    自动构建>>
    只要保证你的博客根目录的sitemap.xml和baidusitemap.xml能够访问就好!
    如未实现自动构建sitemap,需要本地手动生成之后添加到source文件夹下!不过每次添加新文章都需要从新上传!
    将下面脚本保存成baidusitemapPush.php(名字随便起,注意跟后面对应就好!)

    <?php
    
    //从博客根目录加载百度站点地图
    $xmlfile = './baidusitemap.xml';
    
    //解析站点地图,并将所有站点链接存入数组$locs
    $xml = simplexml_load_file($xmlfile);
    $locs = [];
    foreach ($xml->url as $child) {
      array_push($locs,$child->loc->__toString());
    }
    
    //调用百度主动推送接口,将baidusitemap.xml中所有的站点链接提交
    //site和token请换成你自己的
    $api = 'http://data.zz.baidu.com/urls?site=www.yoursite.com&token=yourtoken';
    $ch = curl_init();
    $options =  array(
        CURLOPT_URL => $api,
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POSTFIELDS => implode("\n", $locs),
        CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
    );
    curl_setopt_array($ch, $options);
    $result = curl_exec($ch);
    //echo $result;
    print_r($result);
    
    ?>
    

    python:

    python请轻喷啊,写得很low!如果使用python的请严格复制下面代码,否则你就需要一把游标卡尺~~~
    保存成baidusitemapPush.py文件

    # !/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    
    import requests
    from xml.dom.minidom import parse
    import xml.dom.minidom
    
    # 加载xml文件
    DOMTree = xml.dom.minidom.parse("./baidusitemap.xml")
    data0 = DOMTree.getElementsByTagName("loc")
    list_len = len(data0)
    payload = []
    data2 = []
    
    # 遍历xml文件,得到所有站点链接
    for i in range(0, list_len, 1):
        data1 = data0[i].firstChild.data
        data2.append(data1)
    
    payload = str(data2)
    url = "http://data.zz.baidu.com/urls"
    querystring = {"site":"www.oneonecity.xyz","token":"yourtoken"}
    headers = {
        'content-type': "text/plain",
        'cache-control': "no-cache",
        }
    
    # 请求百度主动推送接口
    response = requests.request("POST", url, data=payload, headers=headers, params=querystring)
    print(response.text)
    
    

    上传脚本:

    将上面的php或者python脚本上传一个就好,放在hexo-->source文件夹下面;然后上传!

    git add .
    
    git commit -am "添加百度主动推送脚本"
    
    git push origin master
    

    配置flow.ci

    说明:

    flow的地址>>
    可以参考这里>>
    这里配置自动构建的flow项目需要绑定你的博客对应的仓库,而非源码仓库;
    配置环境选择php或者python,这取决于你之前上传的那个脚本!

    百度主动推送
    自定义脚本:
    flow_cmd "php baidusitemapPush.php" --echo --assert
    flow_cmd "php sitemapPush.php" --echo --assert
    flow_cmd "php baiduPush_index.php" --echo --assert
    flow_result $?
    

    检测构建:

    push一下博客或者手动更新博客仓库的文件,触发自动构建,理想情况下是这样子:


    百度主动推送

    这样子以后每次更新文章都会触发一次主动推送!

    任何问题,欢迎交流!

    相关文章

      网友评论

        本文标题:Hexo站点主动推送百度-基于Flow.ci

        本文链接:https://www.haomeiwen.com/subject/qymtvttx.html