PHP:把第三方的分页接口,写入项目的数据库

一、说明

  • 调用第三方的分页接口,接口返回的参数里有page_total(总记录数)
  • 接口是 付费接口,尽量最优调用(能缓存就缓存,能调用1次就不调用2次)

二、思路

1、法一

  • 先在循环外调用一次接口,获取总页数,然后在 for foreach 循环中调用接口
  • 这样的话,就在最外面多调用了一次,造成资源浪费,不是最优方案

2、法二

  • 步骤1)也是先在循环外调用一次接口
  • 但是在循环中,判断一下,如果不是第一页才调用接口;如果是第一页就直接取 步骤1)的值
  • 综上:代码使用的是该方法

3、法三

  • 欢迎大家评论区补充 =_<

三、打码及打印

    /**
     * 处理数据:默认从第一页开始
     * @param int $page 第几页的数据
     * @return void
     */
    public function processData($page = 1)
    {
    
    
        //获取总的页数
        $url = "/api/getKeyword?page={
      
      $page}"; //按照实际的url拼接,加上分页参数啥的;有的还需要加上header等
        $result = $this->getPageData($url, $page);
        if ($result['code'] != 0) {
    
    
            die($result['msg']); //输出错误信息,实际使用中建议写到Log日志中去
        }
        $pageTotal = $result['data']['page_total']; //总页数

        //循环处理数据
        for ($currentPage = $page; $currentPage <= $pageTotal; $currentPage ++) {
    
    
            if ($currentPage != 1) {
    
     //不是第一页,才请求数据
                $url = "/api/getKeyword?page={
      
      $currentPage}"; //拼接url参数
                $result = $this->getPageData($url, $currentPage);
            }

            if ($result['code'] != 0) {
    
    
                //输出错误信息,实际使用中建议写到Log日志中去,或者continue执行下一页数据,根据实际的情况来调整
                die($result['msg']);
            }

            $data = $result['data']['list']; //当前页的数据

            /**
             * TODO 处理当前页的数据
             * 直接写入或者处理后写入数据表...
             * 其他操作...
             */

            //打印:看下数据对不对
            echo "第 [ {
      
      $currentPage} ] 页数据:\t";
            var_export($data);
            echo '<br/>';

        }

        //打印输出结果如下:
        <<<EOF
第 [ 1 ] 页数据: array ( 0 => array ( 'id' => 1, 'name' => '你好1', ), 1 => array ( 'id' => 2, 'name' => '你好啊 1', ), )
第 [ 2 ] 页数据: array ( 0 => array ( 'id' => 1, 'name' => '你好2', ), 1 => array ( 'id' => 2, 'name' => '你好啊 2', ), )
第 [ 3 ] 页数据: array ( 0 => array ( 'id' => 1, 'name' => '你好3', ), 1 => array ( 'id' => 2, 'name' => '你好啊 3', ), )
第 [ 4 ] 页数据: array ( 0 => array ( 'id' => 1, 'name' => '你好4', ), 1 => array ( 'id' => 2, 'name' => '你好啊 4', ), )
第 [ 5 ] 页数据: array ( 0 => array ( 'id' => 1, 'name' => '你好5', ), 1 => array ( 'id' => 2, 'name' => '你好啊 5', ), )
第 [ 6 ] 页数据: array ( 0 => array ( 'id' => 1, 'name' => '你好6', ), 1 => array ( 'id' => 2, 'name' => '你好啊 6', ), )
第 [ 7 ] 页数据: array ( 0 => array ( 'id' => 1, 'name' => '你好7', ), 1 => array ( 'id' => 2, 'name' => '你好啊 7', ), )
第 [ 8 ] 页数据: array ( 0 => array ( 'id' => 1, 'name' => '你好8', ), 1 => array ( 'id' => 2, 'name' => '你好啊 8', ), )
第 [ 9 ] 页数据: array ( 0 => array ( 'id' => 1, 'name' => '你好9', ), 1 => array ( 'id' => 2, 'name' => '你好啊 9', ), )
第 [ 10 ] 页数据: array ( 0 => array ( 'id' => 1, 'name' => '你好10', ), 1 => array ( 'id' => 2, 'name' => '你好啊 10', ), )
第 [ 11 ] 页数据: array ( 0 => array ( 'id' => 1, 'name' => '你好11', ), 1 => array ( 'id' => 2, 'name' => '你好啊 11', ), )
第 [ 12 ] 页数据: array ( 0 => array ( 'id' => 1, 'name' => '你好12', ), 1 => array ( 'id' => 2, 'name' => '你好啊 12', ), )

EOF;
    }

    /**
     * 模拟返回某页的数据
     * @param string $url URL请求低脂
     * @param int $page 第几页的数据
     * @return array
     */
    public function getPageData($url, $page)
    {
    
    
        $result = [
            'code' => 0,
            'msg' => '',
            'data' => [
                'total' => 23, //总记录数
                'page_total' => 12, //总页数
                'page' => 1, //当前页
                'page_size' => 2, //每页记录数
                'list' => [ //二维数据
                    [
                        'id' => 1,
                        'name' => '你好' . $page
                    ],
                    [
                        'id' => 2,
                        'name' => "你好啊 {
      
      $page}"
                    ]
                ]
            ]
        ];

        return $result;
    }

猜你喜欢

转载自blog.csdn.net/qq_36025814/article/details/129112228