使用php批量抓取QQ空间相册链接教程

使用php批量抓取QQ空间相册链接教程插图

小高教学网之前发布的文章《为什么QQ空间与我们渐行渐远?》

里面就提到会抽空备份QQ空间的照片,但是在网上找了很久也没有找到一个有效的工具。

作为一个Phper,盘就完事了,所以顶着寒冷,搞了三个小时终于把QQ空间所有照片备份了。

小高教学网也希望能帮到有同样诉求的朋友,所以公开代码。

提示:采用QQ空间api,有效时间不确定,如果发现api失效,请自己抓取api。

手动验证了一下相册数与抓到的链接数,一个都不差。

源码代码如下:

<?php
/**
 * QzoneImgDown
 * QQ空间相册图片地址批量获取
 * @author 小高教学网
 * @DateTime 2019-12-01
 * @Blog https://www.12580sky.com
 */
class QzoneImgDown
{
    // 调用方法
    // 请登录https://h5.qzone.qq.com/获取你的cookie以及g_tk和uin
    // $g_tk    = \'\';
    // $res_uin = \'\'; // 该uin为你的QQ号(常规情况下)
    // $cookie  = \'\';
    // $qzone   = new QzoneImgDown($g_tk, $uin, $cookie);
    // echo $qzone->getList();
    // Ps:该类库仅用于获取自己QQ空间照片链接,至于QQ好友相册没有适配
    // 获取的下载链接请使用下载工具进行下载(php不方便下载)

    public function __construct($g_tk, $res_uin, $cookie)
    {
        $this->g_tk    = $g_tk;
        $this->res_uin = $res_uin;
        // 相册列表接口
        $this->listApi = \'https://mobile.qzone.qq.com/list?g_tk=\' . $this->g_tk . \'&format=json&list_type=album&action=0&res_uin=\' . $this->res_uin . \'&count=99\';

        // 相册图片列表接口
        $this->imgApi = \'https://h5.qzone.qq.com/webapp/json/mqzone_photo/getPhotoList2?g_tk=\' . $this->g_tk . \'&uin=\' . $this->res_uin . \'&albumid=xxxxxxxxxxxxx&ps=0&pn=20&password=&password_cleartext=0&swidth=1080&sheight=1920\';
        $this->cookie = $cookie;

    }

    /**
     * 获取图片列表
     * @Author   小高教学网www.12580sky.com
     * @DateTime 2019-12-01
     * @param    [type]     $url 相册ajax数据
     * @return   [type]          [description]
     */
    private function getImg($url)
    {
        // echo $url;exit;
        $json = $this->curl_request($url, \'\', \'\', $this->cookie);
        $arr  = json_decode($json, 1);

        if (isset($arr[\'data\'][\'album\'][\'name\'])) {
            $fileName = $arr[\'data\'][\'album\'][\'name\'];
            $myfile   = @fopen($fileName . \'.txt\', \'a+\');
            if(!$myfile){
                exit(\'文件写入失败,请检查目录读写权限是否正常\');
            }

            $photos = array_values($arr[\'data\'][\'photos\']);
            // echo json_encode($arr[\'data\'][\'photos\']);exit;
            foreach ($photos as $key => $value) {
                foreach ($photos[$key] as $keys => $values) {
                    // var_dump($key);var_dump($keys);
                    // var_dump($photos[$key][$keys][\'1\'][\'url\']);
                    echo $text = $photos[$key][$keys][\'1\'][\'url\'] . \"\\n\";
                    fwrite($myfile, $text);
                }
            }
            fclose($myfile);
        }
    }

    /**
     * 计算翻页
     * @Author   小高教学网www.12580sky.com
     * @DateTime 2019-12-01
     * @param    [type]     $url [description]
     * @return   [type]          [description]
     */
    private function ret($url)
    {

        $json = $this->curl_request($url, \'\', \'\', $this->cookie);
        $arr  = json_decode($json, 1);
        // echo json_encode($arr);exit;
        if (isset($arr[\'data\'][\'album\'][\'name\'])) {
            $total_count = $arr[\'data\'][\'total_count\'];
            $page_count  = ceil($total_count / 20);
            // var_dump($total_count);exit;

            for ($i = 0; $i <= $page_count; $i++) {
                // var_dump($i);
                $url = $this->url_set_value($url, \'ps\', $i * 20);
                // var_dump($url);exit;
                $this->getImg($url);

            }
            // var_dump($page_count);exit;
            // exit;
        } else {
            exit(\'error\');
        }

    }

    /**
     * 获取相册列表
     * @Author   小高教学网www.12580sky.com
     * @DateTime 2019-12-01
     * @return   [type]     [description]
     */
    public function getList()
    {
        $json = $this->curl_request($this->listApi, \'\', \'\', $this->cookie);
        $arr  = json_decode($json, 1);

        if (isset($arr[\'data\'][\'vFeeds\'])) {
            $newArr = $arr[\'data\'][\'vFeeds\'];
            foreach ($newArr as $key => $value) {
                $albumid = $newArr[$key][\'pic\'][\'albumid\'];
                $url     = $this->url_set_value($this->imgApi, \'albumid\', $albumid);
                // echo $url.\"\\n\";
                echo $this->ret($url);
            }
        } else {
            exit(\'error\');
        }
    }

    /**
     * curl模拟提交
     * @param  [type]  $url          访问的URL
     * @param  string  $post         post数据(不填则为GET)
     * @param  string  $referer      自定义来路
     * @param  string  $cookie       提交的$cookies
     * @param  integer $returnCookie 是否返回$cookies
     * @param  string  $ua           自定义UA
     * @return [type]                [description]
     */
    private function curl_request($url, $post = \'\', $referer = \'\', $cookie = \'\', $returnCookie = 0, $ua = \'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0\')
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_USERAGENT, $ua);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
        curl_setopt($curl, CURLOPT_TIMEOUT, 60);
        curl_setopt($curl, CURLOPT_REFERER, $referer);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        $httpheader[] = \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\";
        $httpheader[] = \"Accept-Encoding:gzip, deflate\";
        $httpheader[] = \"Accept-Language:zh-CN,zh;q=0.9\";
        $httpheader[] = \"Connection:close\";
        curl_setopt($curl, CURLOPT_HTTPHEADER, $httpheader);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        if ($post) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
        }
        if ($cookie) {
            curl_setopt($curl, CURLOPT_COOKIE, $cookie);
        }
        curl_setopt($curl, CURLOPT_HEADER, $returnCookie);
        curl_setopt($curl, CURLOPT_TIMEOUT, 10);
        curl_setopt($curl, CURLOPT_ENCODING, \"gzip\");
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($curl);
        if (curl_errno($curl)) {
            return curl_error($curl);
        }
        curl_close($curl);
        if ($returnCookie) {
            list($header, $body) = explode(\"\\r\\n\\r\\n\", $data, 2);
            preg_match_all(\"/Set\\-Cookie:([^;]*);/\", $header, $matches);
            $info[\'cookie\']  = substr($matches[1][1], 1);
            $info[\'content\'] = $body;
            return $info;
        } else {
            return $data;
        }
    }

    /**
     * 替换get参数
     * @Author   小高教学网www.12580sky.com
     * @DateTime 2019-12-01
     * @param    [type]     $url   地址
     * @param    [type]     $key   key
     * @param    [type]     $value val
     * @return   [type]            [description]
     */
    private function url_set_value($url, $key, $value)
    {
        $a     = explode(\'?\', $url);
        $url_f = $a[0];
        $query = $a[1];
        parse_str($query, $arr);
        $arr[$key] = $value;
        return $url_f . \'?\' . http_build_query($arr);
    }
}

Ps:如何获取cookie及uin就不再赘述了,该类库仅用于获取自己QQ空间照片链接,至于QQ好友相册没有适配,获取的下载链接请使用下载工具进行下载。(php不方便下载)

上一篇 JS实现QQ空间自动给好友动态点赞
下一篇 为什么我们与QQ空间渐行渐远了?

探索站点内容

搜索文章、标签、分类

MediaClaw 社媒虾
MediaClaw 社媒虾
关注公众号
领美团外卖神券
领美团外卖神券
最新评论
15579854855
15579854855
9月15日
安装流程都没有,下载也用不了,浪费时间
小高网
小高网
9月15日
这个还是少用好
06285142
06285142
9月14日
怎么现在都没出绿色版的绿泡泡了。等了一年了呢
小高网
小高网
9月9日
那就找个完整版的安装覆盖上去吧
白添霸霸
白添霸霸
9月9日
精简版安装后在控制面板不显示
小高网
小高网
9月8日
控制面板卸载不了吗
白添霸霸
白添霸霸
9月8日
大佬,安装以后有些软件打不开了,例如CCleaner 7,提示WebView2 Runtime 初始化失败(错误:0x80070002),重装完整版提示安装时出
1
1
8月31日
就是不能处理已安装软件
小高网

小高网管理员

小高网www.xx8g.com

本月创作热力图