MENU

【笔记】根据sitemap写执行百度接口推送PHP脚本

2021 年 02 月 09 日 • 阅读: 525 • 笔记

今天练习一下 PHP 数组,字符串处理,函数的使用,写了一个根据 sitemap.xml 写的 PHP 进行百度收录的接口提交方式脚本,(只是写了一下,其实用处不大)如下:


1.首先我用的是 Suming 的这款 sitemap 插件。(作者链接已失效,不在这里引用):
pic26

2.domain/sitemap.xml 源代码如下:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='https://blog.jerryiweb.com/usr/plugins/Sitemap/sitemap.xsl'?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">    <url>
        <loc>https://blog.jerryiweb.com/about.html</loc>
        <lastmod>2021-02-06T15:40:31Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.8</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/archives.html</loc>
        <lastmod>2020-12-29T15:22:52Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.8</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/links.html</loc>
        <lastmod>2021-01-18T22:17:57Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.8</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/notes/225.html</loc>
        <lastmod>2021-02-09T14:18:32Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/share-tech/211.html</loc>
        <lastmod>2021-02-07T14:43:01Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/notes/162.html</loc>
        <lastmod>2021-02-01T16:42:49Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/notes/150.html</loc>
        <lastmod>2021-02-01T16:42:59Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/share/142.html</loc>
        <lastmod>2021-02-01T16:43:11Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/notes/74.html</loc>
        <lastmod>2021-01-06T16:02:38Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/share/70.html</loc>
        <lastmod>2021-01-14T21:26:41Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/notes/61.html</loc>
        <lastmod>2020-12-20T22:24:05Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/notes/41.html</loc>
        <lastmod>2020-12-20T13:35:57Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/share/5.html</loc>
        <lastmod>2021-01-18T17:55:43Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.5</priority>
    </url>
    <url>
        <loc>https://blog.jerryiweb.com/share/4.html</loc>
        <lastmod>2021-01-17T17:49:32Z</lastmod>
        <changefreq>always</changefreq>
        <priority>0.5</priority>
    </url>
</urlset>

3.我们需要的是将网址提取出来,网址包含在 <loc></loc> 中,下面是将网址提取出来存到数组中的代码:

<?php
    $str = file_get_contents('https://blog.jerryiweb.com/sitemap.xml');
    //定义GetBetween函数,取出<loc></loc>之间的网址
    function GetBetween($str,$start,$end){
        $r = explode($start,$str);
        if (isset($r[1])){
            $r = explode($end,$r[1]);
            return $r[0];
        }
        return '';
    }
    //这里先以<url>为分隔符,分割字符串为数组(含有网址的数组索引从1开始)
    $string = explode('<url>',$str);
    //这里计算数组索引数量,并减去1(上面数组索引为0的值不包含网址),$number是网址的条数
    $number = count($string);
    $number = $number - 1;
    //定义$array_url为数组
    $array_url = array();
    //for循环使每个网址成为数组的值,采用赋值的方法
    for ($i=1;$i<=$number;$i++){
        $array_url[$i] = GetBetween($string[$i],'<loc>','</loc>');
    }
?>

4.根据百度的 php 推送示例,将推送代码整合到代码中:

  • 百度的示例:
<?php
    $urls = array(
        'http://www.example.com/1.html',
        'http://www.example.com/2.html',
    );
    $api = 'http://data.zz.baidu.com/urls?site=这里是站点url&token=这里是百度的token';
    $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);
    echo $result;
?>
  • 整合的代码:
<?php
    $str = file_get_contents('https://blog.jerryiweb.com/sitemap.xml');
    //定义GetBetween函数,取出<loc></loc>之间的网址
    function GetBetween($str,$start,$end){
        $r = explode($start,$str);
        if (isset($r[1])){
            $r = explode($end,$r[1]);
            return $r[0];
        }
        return '';
    }
    //这里先以<url>为分隔符,分割字符串为数组(含有网址的数组索引从1开始)
    $string = explode('<url>',$str);
    //这里计算数组索引数量,并减去1(上面数组索引为0的值不包含网址),$number是网址的条数
    $number = count($string);
    $number = $number - 1;
    //定义$array_url为数组
    $array_url = array();
    //for循环使每个网址称为数组的值,采用赋值的方法
    for ($i=1;$i<=$number;$i++){
        $array_url[$i] = GetBetween($string[$i],'<loc>','</loc>');
    }
    $api = 'http://data.zz.baidu.com/urls?site=这里是站点url&token=这里是百度的token';
    $ch = curl_init();
    $options =  array(
        CURLOPT_URL => $api,
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POSTFIELDS => implode("\n", $array_url),//注意将这里的数组变量换成自己的(百度默认为$urls)
        CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
    );
    curl_setopt_array($ch, $options);
    $result = curl_exec($ch);
    echo $result;
?>

5.执行测试:

{"remain":2987,"success":13}

上面的 remain 是本日还能推送的 url 数目,success 表示推送成功的数目(百度资源平台站点管理有说明)

6.设置定时执行

将代码保存到 php 文件中,上传到服务器中,设置定时任务(可以是定时 shell 任务,或者定时访问链接任务),这里以 BT 面板、shell 任务为例,复制 php 文件绝对路径,在计划任务中设置,shell 执行 php 命令如下:

php PHP文件的绝对路径

php /www/wwwroot/blog.jerryiweb.com/baidusubmit.php

定时任务设置每天运行一次即可!没必要多次推送

最后编辑于: 2021 年 03 月 05 日
返回文章列表 文章二维码
本页链接的二维码
打赏二维码