收集爬取百度网盘分享文件落到实处网盘寻觅

前情提要:近来利用PHP达成了大约的网盘寻觅程序,并且关系了微信公众平台,名字是网盘小说。用户能够因而公众号输加入关贸总协定社团键字,公众号会重临相应的网盘下载地址。就是那样一个大约的成效,类似诸多的网盘寻找类网站,笔者那几个采访和找出程序都以PHP完成的,全文和分词找出部分行使到了开源软件xunsearch。

题目起的太大了,都以骗人的。近年来采纳PHP完毕了简便的网盘寻觅程序,并且关系了微信公众平台。用户可以透过群众号输加入关贸总协定组织键字,公众号会再次回到相应的网盘下载地址。便是那般三个简短的效能,类似大多的网盘寻找类网址,我这一个采访和探寻程序都以PHP完结的,全文和分词搜索部分选取到了开源软件xunsearch,今后就来介绍一下完结进度。

标题起的太大了,都以骗人的。近日采纳PHP实现了简易的网盘寻找程序,并且关系了微信公众平台。用户能够透过群众号输加入关贸总协定社团键字,公众号会再次回到相应的网盘下载地址。便是这样一个简练的效率,类似许多的网盘找寻类网址,作者这么些采访和搜索程序都是PHP达成的,全文和分词寻找部分行使到了开源软件xunsearch,以往就来介绍一下完毕进度。

真正上线案例:收集爬取百度网盘分享文件落到实处网盘寻觅。搜盘子-网盘电影能源站

  1. 收获一堆网盘用户

  2. 依赖网盘用户获得分享列表

  3. xunsearch完毕全文字笔迹核准索和分词检索

  4. 微信公众平台接口开辟

  1. 获得一群网盘用户

  2. 依靠网盘用户获得分享列表

  3. xunsearch完毕全文字笔迹核查索和分词检索

  4. 微信公众平台接口开拓

上一篇([PHP]
网盘搜索引擎-采撷爬取百度网盘分享文件落实网盘找出)中本人第3介绍了哪些去得到一大批判的百度网盘用户,这一篇介绍怎样得到钦定网盘用户的分享列表。一样的规律,也是找到百度取得分享列表的接口,然后去巡回就足以了。

 

 

 

 

 

招来分享接口

意义展示:

功效展示:

甭管找3个网盘用户的享用页面,点击最上边包车型客车分页链接,能够看看发起的请求接口,这么些正是获得分享列表的接口。

美高梅开户网址 1美高梅开户网址 2

美高梅开户网址 3美高梅开户网址 4

美高梅开户网址 5

 

 

任何的呼吁url是那个 

获取并采访百度网盘用户

获得并搜集百度网盘用户

 

要想拿到到分享列表,首先要先把百度的用户音讯搜聚下来,今后自个儿来介绍怎样找到一大批判百度的用户。先把浏览器的审查成分张开,查看HTTP的请求包,展开自个儿的百度网盘主页地址  ,查看订阅的用户列表,观望请求。

要想赢获得分享列表,首先要先把百度的用户音信征集下来,以后本身来介绍怎么着找到一大批判百度的用户。先把浏览器的审核成分展开,查看HTTP的央浼包,张开自身的百度网盘主页地址  ,查看订阅的用户列表,观察请求。

调用接口获取数据

美高梅开户网址 6

美高梅开户网址 7

选取PHP的CUEvoqueL去哀告这些接口,看看是不是能够取获得数量。测试后发觉,再次回到的是{“errno”:贰,”request_id”:177538192七},并从未获取到多少。那是因为百度对header头新闻里面包车型大巴Referer实行了限制,小编把Referer改成 

这么些请求正是赢得订阅用户列表的接口。

这么些请求正是获得订阅用户列表的接口。

测试代码如下:

下面的参数含义分别是:query_uk (小编要好的id编号,百度都以以uk来定名的)
 ; limit (分页时每页显示的条数) ; start (分页发轫编号) ;
剩下的参数全都并无任何卵用。

地方的参数含义分别是:query_uk (笔者自个儿的id编号,百度都以以uk来命名的)
 ; limit (分页时每页彰显的条数) ; start (分页起首编号) ;
剩下的参数全都并无任何卵用。

<?php
/*
* 获取分享列表
*/
class TextsSpider{
    /**
    * 发送请求
    */
    public function sendRequest($url,$data = null,$header=null){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        if (!empty($header)){
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        }

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
}
$textsSpider=new TextsSpider();
$header=array(
    'Referer:http://www.baidu.com'
);
$str=$textsSpider->sendRequest("https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=60&limit=60&query_uk=4162539356",null,$header);
echo $str;

言必有中后的接口地址是:

简短后的接口地址是:

分享列表的json结果如下:

 

 

{
    "errno": 0,
    "request_id": 1985680203,
    "total_count": 1025,
    "records": [
        {
            "feed_type": "share",
            "category": 6,
            "public": "1",
            "shareid": "98963537",
            "data_id": "1799945104803474515",
            "title": "《通灵少女》2017.同步台视(完结待删)",
            "third": 0,
            "clienttype": 0,
            "filecount": 1,
            "uk": 4162539356,
            "username": "a20****3762",
            "feed_time": 1493626027308,
            "desc": "",
            "avatar_url": "https://ss0.bdstatic.com/7Ls0a8Sm1A5BphGlnYG/sys/portrait/item/01f8831f.jpg",
            "dir_cnt": 1,
            "filelist": [
                {
                    "server_filename": "《通灵少女》2017.同步台视(完结待删)",
                    "category": 6,
                    "isdir": 1,
                    "size": 1024,
                    "fs_id": 98994643773159,
                    "path": "%2F%E3%80%8A%E9%80%9A%E7%81%B5%E5%B0%91%E5%A5%B3%E3%80%8B2017.%E5%90%8C%E6%AD%A5%E5%8F%B0%E8%A7%86%EF%BC%88%E5%AE%8C%E7%BB%93%E5%BE%85%E5%88%A0%EF%BC%89",
                    "md5": "0",
                    "sign": "86de8a14f72e6e3798d525c689c0e4575b1a7728",
                    "time_stamp": 1493895381
                }
            ],
            "source_uid": "528742401",
            "source_id": "98963537",
            "shorturl": "1pKPCF0J",
            "vCnt": 356,
            "dCnt": 29,
            "tCnt": 184
        },
        {
            "source_uid": "528742401",
            "source_id": "152434783",
            "shorturl": "1qYdhFkC",
            "vCnt": 1022,
            "dCnt": 29,
            "tCnt": 345
        }
    ]
}

管理分页的拿走订阅者接口地址

管理分页的获得订阅者接口地址

照旧和上次一样,综合性的搜索站,可以把有效的多寡都留给存住,小编只是做个最简易的,就假使了标题title和shareid

先权且倘使,作者订阅了2400个用户,那么些数额基本够用了。每页显示二陆个用户,那么就可以分十0页,则先看哪样生成这些九拾玖个url。

先临时要是,笔者订阅了2400个用户,那个数量基本够用了。每页呈现二四个用户,那么就能够分十0页,则先看怎么着生成这么些玖拾玖个url。

各个分享文件的下载页面url是如此的:
,只需求用户号码和分享id就足以拼出下载url。

<?php
/*
* 获取订阅者
*/
class UkSpider{
    private $pages;//分页数
    private $start=24;//每页个数
    public function __construct($pages=100){
        $this->pages=$pages;
    }
    /**
    * 生成接口的url
    */
    public function makeUrl($rootUk){
        $urls=array();
        for($i=0;$i<=$this->pages;$i++){
            $start=$this->start*$i;
            $url="http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk={$rootUk}&limit=24&start={$start}";
            $urls[]=$url;
        }
        return $urls;
    }
}

$ukSpider=new UkSpider();
$urls=$ukSpider->makeUrl(3317165372);
print_r($urls);
<?php
/*
* 获取订阅者
*/
class UkSpider{
    private $pages;//分页数
    private $start=24;//每页个数
    public function __construct($pages=100){
        $this->pages=$pages;
    }
    /**
    * 生成接口的url
    */
    public function makeUrl($rootUk){
        $urls=array();
        for($i=0;$i<=$this->pages;$i++){
            $start=$this->start*$i;
            $url="http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk={$rootUk}&limit=24&start={$start}";
            $urls[]=$url;
        }
        return $urls;
    }
}

$ukSpider=new UkSpider();
$urls=$ukSpider->makeUrl(3317165372);
print_r($urls);

 

获取的url接口列表结果:

获得的url接口列表结果:

扭转分页接口U瑞鹰L

Array
(
    [0] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=0
    [1] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=24
    [2] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=48
    [3] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=72
    [4] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=96
    [5] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=120
Array
(
    [0] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=0
    [1] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=24
    [2] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=48
    [3] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=72
    [4] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=96
    [5] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=120

1旦用户最多分享了三千0个,每页56个,能够分500页,那样url能够那样变化

 

 

<?php
/*
* 获取分享列表
*/
class TextsSpider{
    private $pages=500;//分页数
    private $start=60;//每页个数
    /**
    * 生成分页接口的url
    */
    public function makeUrl($rootUk){
        $urls=array();
        for($i=0;$i<=$this->pages;$i++){
            $start=$this->start*$i;
            $url="https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start={$start}&limit={$this->start}&query_uk={$rootUk}";
            $urls[]=$url;
        }
        return $urls;
    }

}
$textsSpider=new TextsSpider();
$urls=$textsSpider->makeUrl(4162539356);
print_r($urls);

运用CURAV四L请求接口地址

动用CUENVISIONL请求接口地址

分页的url结果是这么的

呼吁接口地址时,能够一贯运用file_get_contents()函数,然则本人那边运用的是PHP的CU汉兰达L扩大函数,因为在获得分享文件列表时必要修改请求的header头音信。

伸手接口地址时,能够向来使用file_get_contents()函数,可是自身这里运用的是PHP的CU牧马人L扩大函数,因为在收获分享文件列表时索要修改请求的header头新闻。

Array
(
    [0] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=0&limit=60&query_uk=4162539356
    [1] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=60&limit=60&query_uk=4162539356
    [2] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=120&limit=60&query_uk=4162539356
    [3] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=180&limit=60&query_uk=4162539356
    [4] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=240&limit=60&query_uk=4162539356
    [5] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=300&limit=60&query_uk=4162539356
    [6] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=360&limit=60&query_uk=4162539356
    [7] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=420&limit=60&query_uk=4162539356
    [8] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=480&limit=60&query_uk=4162539356
    [9] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=540&limit=60&query_uk=4162539356

此接口再次回到的JSON消息结构如下

此接口再次回到的JSON新闻结构如下

 

{
    "errno": 0,
    "request_id": 3319309807,
    "total_count": 3,
    "follow_list": [
        {
            "type": -1,
            "follow_uname": "热心***联盟",
            "avatar_url": "http://himg.bdimg.com/sys/portrait/item/7fd8667f.jpg",
            "intro": "",
            "user_type": 0,
            "is_vip": 0,
            "follow_count": 0,
            "fans_count": 21677,
            "follow_time": 1493550371,
            "pubshare_count": 23467,
            "follow_uk": 3631952313,
            "album_count": 0
        },
        {
            "type": -1,
            "follow_uname": "绾*兮",
            "avatar_url": "http://himg.bdimg.com/sys/portrait/item/fa5ec198.jpg",
            "intro": "万里淘金,为你推荐精品全本小说,满满的资源福利!",
            "user_type": 6,
            "is_vip": 0,
            "follow_count": 10,
            "fans_count": 5463,
            "follow_time": 1493548024,
            "pubshare_count": 2448,
            "follow_uk": 1587328030,
            "album_count": 0
        },
        {
            "type": -1,
            "follow_uname": "自**检票",
            "avatar_url": "http://himg.bdimg.com/sys/portrait/item/8c5b2810.jpg",
            "intro": "没事看点小说。",
            "user_type": 0,
            "is_vip": 0,
            "follow_count": 299,
            "fans_count": 60771,
            "follow_time": 1493547941,
            "pubshare_count": 13404,
            "follow_uk": 1528087287,
            "album_count": 0
        }
    ]
}
{
    "errno": 0,
    "request_id": 3319309807,
    "total_count": 3,
    "follow_list": [
        {
            "type": -1,
            "follow_uname": "热心***联盟",
            "avatar_url": "http://himg.bdimg.com/sys/portrait/item/7fd8667f.jpg",
            "intro": "",
            "user_type": 0,
            "is_vip": 0,
            "follow_count": 0,
            "fans_count": 21677,
            "follow_time": 1493550371,
            "pubshare_count": 23467,
            "follow_uk": 3631952313,
            "album_count": 0
        },
        {
            "type": -1,
            "follow_uname": "绾*兮",
            "avatar_url": "http://himg.bdimg.com/sys/portrait/item/fa5ec198.jpg",
            "intro": "万里淘金,为你推荐精品全本小说,满满的资源福利!",
            "user_type": 6,
            "is_vip": 0,
            "follow_count": 10,
            "fans_count": 5463,
            "follow_time": 1493548024,
            "pubshare_count": 2448,
            "follow_uk": 1587328030,
            "album_count": 0
        },
        {
            "type": -1,
            "follow_uname": "自**检票",
            "avatar_url": "http://himg.bdimg.com/sys/portrait/item/8c5b2810.jpg",
            "intro": "没事看点小说。",
            "user_type": 0,
            "is_vip": 0,
            "follow_count": 299,
            "fans_count": 60771,
            "follow_time": 1493547941,
            "pubshare_count": 13404,
            "follow_uk": 1528087287,
            "album_count": 0
        }
    ]
}

数据表存款和储蓄结构

一旦要做3个综合性的网盘找出网址,就能够把这一个音讯全都存入数据库,未来我只是做二个不会细小略的小说寻找网址,由此只留下了订阅盘主的uk编号。

设若要做八个综合性的网盘寻觅网址,就足以把那么些新闻全都存入数据库,今后自身只是做一个很简短的小说找寻网址,因而只留下了订阅盘主的uk编号。

CREATE TABLE `texts` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL DEFAULT '',
  `url` varchar(255) NOT NULL DEFAULT '',
  `time` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `title` (`title`(250))
) ENGINE=MyISAM
<?php
/*
* 获取订阅者
*/
class UkSpider{
    private $pages;//分页数
    private $start=24;//每页个数
    public function __construct($pages=100){
        $this->pages=$pages;
    }
    /**
    * 生成接口的url
    */
    public function makeUrl($rootUk){
        $urls=array();
        for($i=0;$i<=$this->pages;$i++){
            $start=$this->start*$i;
            $url="https://pan.baidu.com/pcloud/friend/getfollowlist?query_uk={$rootUk}&limit=24&start={$start}";
            $urls[]=$url;
        }
        return $urls;
    }
    /**
    * 根据URL获取订阅用户id
    */
    public function getFollowsByUrl($url){
        $result=$this->sendRequest($url);
        $arr=json_decode($result,true);
        if(empty($arr)||!isset($arr['follow_list'])){
            return;
        }
        $ret=array();
        foreach($arr['follow_list'] as $fan){
            $ret[]=$fan['follow_uk'];
        }

        return $ret;
    }
    /**
    * 发送请求
    */
    public function sendRequest($url,$data = null,$header=null){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        if (!empty($header)){
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        }

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
}

$ukSpider=new UkSpider();
$urls=$ukSpider->makeUrl(3317165372);
//循环分页url
foreach($urls as $url){
    echo "loading:".$url."\r\n";
    //随机睡眠7到11秒
    $second=rand(7,11);
    echo "sleep...{$second}s\r\n";
    sleep($second);
    //发起请求
    $followList=$ukSpider->getFollowsByUrl($url);
    //如果已经没有数据了,要停掉请求
    if(empty($followList)){
        break;
    }
    print_r($followList);
}
<?php
/*
* 获取订阅者
*/
class UkSpider{
    private $pages;//分页数
    private $start=24;//每页个数
    public function __construct($pages=100){
        $this->pages=$pages;
    }
    /**
    * 生成接口的url
    */
    public function makeUrl($rootUk){
        $urls=array();
        for($i=0;$i<=$this->pages;$i++){
            $start=$this->start*$i;
            $url="https://pan.baidu.com/pcloud/friend/getfollowlist?query_uk={$rootUk}&limit=24&start={$start}";
            $urls[]=$url;
        }
        return $urls;
    }
    /**
    * 根据URL获取订阅用户id
    */
    public function getFollowsByUrl($url){
        $result=$this->sendRequest($url);
        $arr=json_decode($result,true);
        if(empty($arr)||!isset($arr['follow_list'])){
            return;
        }
        $ret=array();
        foreach($arr['follow_list'] as $fan){
            $ret[]=$fan['follow_uk'];
        }

        return $ret;
    }
    /**
    * 发送请求
    */
    public function sendRequest($url,$data = null,$header=null){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        if (!empty($header)){
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        }

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
}

$ukSpider=new UkSpider();
$urls=$ukSpider->makeUrl(3317165372);
//循环分页url
foreach($urls as $url){
    echo "loading:".$url."\r\n";
    //随机睡眠7到11秒
    $second=rand(7,11);
    echo "sleep...{$second}s\r\n";
    sleep($second);
    //发起请求
    $followList=$ukSpider->getFollowsByUrl($url);
    //如果已经没有数据了,要停掉请求
    if(empty($followList)){
        break;
    }
    print_r($followList);
}

 

 

 

 循环读取的时候,应该专注,每回间隔一定的时光,幸免被封。

循环请求上一步生成的urls,注意,此处要间隔一定秒数来发请求,否则会被直接封掉的,并且要看清若是未有多少了要停掉循环。此脚本一定要在命令行格局下运转,在浏览器上会直接超时死掉了。

巡回请求上一步生成的urls,注意,此处要间隔一定秒数来发请求,不然会被一向封掉的,并且要咬定若是未有多少了要停掉循环。此脚本一定要在命令行形式下运作,在浏览器上会直接超时死掉了。

下1篇首要介绍xunsearch分词和全文字笔迹核算索和这一次的完整代码

巡回收集用户uk编号

美高梅开户网址,巡回搜集用户uk编号

示范地址,关注微信公众号:网盘小说,只怕扫描上面包车型大巴二维码

应用mysql数据库,建一张表比如uks,存款和储蓄搜集到的用户号码,表结构如下:

动用mysql数据库,建一张表比方uks,存款和储蓄收集到的用户号码,表结构如下:

美高梅开户网址 8

CREATE TABLE `uks` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `uk` varchar(100) NOT NULL DEFAULT '',
  `get_follow` tinyint(4) NOT NULL DEFAULT '0',
  `get_share` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_2` (`uk`),
  KEY `uk` (`uk`)
)
CREATE TABLE `uks` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `uk` varchar(100) NOT NULL DEFAULT '',
  `get_follow` tinyint(4) NOT NULL DEFAULT '0',
  `get_share` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_2` (`uk`),
  KEY `uk` (`uk`)
)

上1篇循环获取uk并存入数据库的欧洲经济共同体代码如下:

先存入一堆,然后再依据那批继续找订阅盘主,不停的巡回,里面包车型地铁第二字段是:uk是唯一的
; ’get_follow默以为0 当第壹遍找它的订阅列表时,修改为一,幸免再一次搜集。

先存入一堆,然后再依据那批继续找订阅盘主,不停的轮回,里面包车型地铁重中之重字段是:uk是无可比拟的
; ’get_follow私下认可为0 当第1次找它的订阅列表时,修改为一,幸免再度收集。

<?php
/*
* 获取订阅者
*/
class UkSpider{
    private $pages;//分页数
    private $start=24;//每页个数
    private $db=null;//数据库
    public function __construct($pages=100){
        $this->pages=$pages;
        $this->db = new PDO("mysql:host=localhost;dbname=pan","root","root");
        $this->db->query('set names utf8');
    }
    /**
    * 生成分页接口的url
    */
    public function makeUrl($rootUk){
        $urls=array();
        for($i=0;$i<=$this->pages;$i++){
            $start=$this->start*$i;
            $url="https://pan.baidu.com/pcloud/friend/getfollowlist?query_uk={$rootUk}&limit={$this->start}&start={$start}";
            $urls[]=$url;
        }
        return $urls;
    }
    /**
    * 根据URL获取订阅用户id
    */
    public function getFollowsByUrl($url){
        $result=$this->sendRequest($url);
        $arr=json_decode($result,true);
        if(empty($arr)||!isset($arr['follow_list'])){
            return;
        }
        $ret=array();
        foreach($arr['follow_list'] as $fan){
            $ret[]=$fan['follow_uk'];
        }

        return $ret;
    }
    /**
    * 发送请求
    */
    public function sendRequest($url,$data = null,$header=null){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        if (!empty($header)){
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        }

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
    /*
    获取到的uks存入数据
    */
    public function addUks($uks){
        foreach($uks as $uk){
            $sql="insert into uks (uk)values({$uk})";
            $this->db->prepare($sql)->execute();
        }

    }
    /*
    获取某个用户的所有订阅并入库
    */
    public function sleepGetByUk($uk){
        $urls=$this->makeUrl($uk);
        //$this->updateUkFollow($uk);
        //循环分页url
        foreach($urls as $url){
            echo "loading:".$url."\r\n";
            //随机睡眠7到11秒
            $second=rand(7,11);
            echo "sleep...{$second}s\r\n";
            sleep($second);
            //发起请求
            $followList=$this->getFollowsByUrl($url);
            //如果已经没有数据了,要停掉请求
            if(empty($followList)){
                break;
            }
            $this->addUks($followList);
        }
    }
    /*从数据库取get_follow=0的uk*/
    public function getUksFromDb(){
        $sth = $this->db->prepare("select * from uks where get_follow=0");
        $sth->execute();
        $uks = $sth->fetchAll(PDO::FETCH_ASSOC);
        $result=array();
        foreach ($uks as $key => $uk) {
            $result[]=$uk['uk'];
        }
        return $result;
    }
    /*已经取过follow的置为1*/
    public function updateUkFollow($uk){
        $sql="UPDATE uks SET get_follow=1 where uk={$uk}";
        $this->db->prepare($sql)->execute();
    }
}

$ukSpider=new UkSpider();
$uks=$ukSpider->getUksFromDb();
foreach($uks as $uk){
    $ukSpider->sleepGetByUk($uk);
}

 

 

 

下一篇介绍依照uk获取分享列表,并且入库

下1篇介绍根据uk获取分享列表,并且入库

演示地址,关注微信公众号:网盘随笔,恐怕扫描上边包车型大巴二维码

示范地址,关怀微信公众号:网盘小说,大概扫描上边包车型客车二维码

美高梅开户网址 9

美高梅开户网址 10

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图