小赖子的英国生活和资讯

怎么样下载 美拍视频? (meipai)

阅读 桌面完整版

美拍视频(meipai)下载的最好方法

目前有以下靠谱的下载美拍视频的方法:

美拍视频地址解析原理

美拍视频 (meipai.com) 的 HTML代码里的头部 head 标签里有:

1
2
<meta content="45f0aHR7Cr3vZ1hV0cDovL212dmlkZW8xLm1laXR1ZGF0YS5jb20vNTkxYjIwMjI5MGFjNTUyNjIubXVeeaA0" property="og:video:url">
<meta content="45f0aHR7Cr3vZ1hV0cDovL212dmlkZW8xLm1laXR1ZGF0YS5jb20vNTkxYjIwMjI5MGFjNTUyNjIubXVeeaA0" property="og:video:secure_url">
<meta content="45f0aHR7Cr3vZ1hV0cDovL212dmlkZW8xLm1laXR1ZGF0YS5jb20vNTkxYjIwMjI5MGFjNTUyNjIubXVeeaA0" property="og:video:url">
<meta content="45f0aHR7Cr3vZ1hV0cDovL212dmlkZW8xLm1laXR1ZGF0YS5jb20vNTkxYjIwMjI5MGFjNTUyNjIubXVeeaA0" property="og:video:secure_url">

这两串 content 的字符串是一样的, 取其一即可. 大概能猜出最后需要通过 Base64 来解码, 这串字符串里就包含了加密的视频原URL地址. 在最新推出的 2.3.5 Chrome 强有力的视频下载插件中, 增添了对美拍视频的本地解析.

对这串视频地址字符串的解密代码的JS代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// http://www.meipai.com/media/596371059
if (domain.includes("meipai.com")) {
    if (!ValidURL(video_url)) {
        var tmp = "";
        video_dom = document.querySelector("meta[property='og:video:secure_url']");
        if (video_dom) {
            tmp = video_dom.getAttribute("content");
        } else {
            video_dom = document.querySelector("meta[property='og:video']");
            if (video_dom) {
                tmp = video_dom.getAttribute("content");
            }
        }
        if (ValidURL(tmp)) {
            video_url = tmp;
        } else {
            function getHex(param1) {
                return {
                    'str': param1.substring(4),
                    'hex': param1.substring(0, 4).split('').reverse().join('')
                }
            }
            function getDec(param1) {
                var loc2 = parseInt(param1, 16) + "";
                return {
                    'head': loc2.substring(0, 2).split(''),
                    'tail': loc2.substring(2).split('')
                }
            }
            function substr(param1, param2) {
                var loc3 = param1.substring(0, parseInt(param2[0]));                    
                var loc4 = param1.substring(parseInt(param2[0]), parseInt(param2[0]) + parseInt(param2[1]));
                return loc3 + param1.substring(parseInt(param2[0])).replace(loc4, "");
            }
            function getPos(param1, param2) {
                param2[0] = param1.length - parseInt(param2[0]) - parseInt(param2[1]);
                return param2;
            }
            var dict2 = getHex(tmp);
            var dict3 = getDec(dict2['hex']);
            var str4 = substr(dict2['str'], dict3['head']);
            var tmp = atob(substr(str4, getPos(str4, dict3['tail'])));
            if (ValidURL(tmp)) {
                video_url = tmp;
            }
        }
    }
}
// http://www.meipai.com/media/596371059
if (domain.includes("meipai.com")) {
    if (!ValidURL(video_url)) {
        var tmp = "";
        video_dom = document.querySelector("meta[property='og:video:secure_url']");
        if (video_dom) {
            tmp = video_dom.getAttribute("content");
        } else {
            video_dom = document.querySelector("meta[property='og:video']");
            if (video_dom) {
                tmp = video_dom.getAttribute("content");
            }
        }
        if (ValidURL(tmp)) {
            video_url = tmp;
        } else {
            function getHex(param1) {
                return {
                    'str': param1.substring(4),
                    'hex': param1.substring(0, 4).split('').reverse().join('')
                }
            }
            function getDec(param1) {
                var loc2 = parseInt(param1, 16) + "";
                return {
                    'head': loc2.substring(0, 2).split(''),
                    'tail': loc2.substring(2).split('')
                }
            }
            function substr(param1, param2) {
                var loc3 = param1.substring(0, parseInt(param2[0]));                    
                var loc4 = param1.substring(parseInt(param2[0]), parseInt(param2[0]) + parseInt(param2[1]));
                return loc3 + param1.substring(parseInt(param2[0])).replace(loc4, "");
            }
            function getPos(param1, param2) {
                param2[0] = param1.length - parseInt(param2[0]) - parseInt(param2[1]);
                return param2;
            }
            var dict2 = getHex(tmp);
            var dict3 = getDec(dict2['hex']);
            var str4 = substr(dict2['str'], dict3['head']);
            var tmp = atob(substr(str4, getPos(str4, dict3['tail'])));
            if (ValidURL(tmp)) {
                video_url = tmp;
            }
        }
    }
}

如果放服务端PHP脚本解析美拍视频的话 代码类似:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
  function getHex($param1) {
      return array(
          'str' => substr($param1, 4),
          'hex' => strrev(substr($param1, 0, 4))
      );
  }
  
  function getDec($param1) {
      $loc2 = hexdec($param1);
      return array(
          'head' => str_split(substr($loc2, 0, 2)),
          'tail' => str_split(substr($loc2, 2))
      );
  }
  
  function substr1($param1, $param2) {  
      $loc3 = substr($param1, 0, (integer)$param2[0]);                    
      $loc4 = substr($param1, (integer)$param2[0], (integer)$param2[1]);
      return $loc3 . str_replace($loc4, "", substr($param1, (integer)$param2[0]));
  }
  
  function getPos($param1, $param2) {
      $param2[0] = strlen($param1) - (integer)$param2[0] - (integer)$param2[1];
      return $param2;
  }
    
  function download($url) {           
    $doc = phpQuery::newDocumentFile($url);
    $arr = array();      
    $tag = trim(strip_tags($doc->find("meta[property='og:video:secure_url']")->attr('content')));
    if (is_good_url($tag)) {
      return $tag;
    }
    $arr[] = $tag;
    $tag = trim(strip_tags($doc->find("meta[property='og:video:url']")->attr('content')));
    if (is_good_url($tag)) {
      return $tag;
    }
    $arr[] = $tag;        
    $tag = trim(strip_tags($doc->find("meta[property='og:videosrc']")->attr('content')));
    if (is_good_url($tag)) {
      return $tag;
    }
    $arr[] = $tag;
      
    foreach ($arr as $tmp) {
      $dict2 = getHex($tmp);
      $dict3 = getDec($dict2['hex']);
      $str4 = substr1($dict2['str'], $dict3['head']);
      $tmp1 = base64_decode(substr1($str4, getPos($str4, $dict3['tail'])));  
      if (is_good_url($tmp1)) {
        return $tmp1;
      }    
    }    
    return down($url);// 通过其它方法来尝试解析美拍视频
  }
  function getHex($param1) {
      return array(
          'str' => substr($param1, 4),
          'hex' => strrev(substr($param1, 0, 4))
      );
  }
  
  function getDec($param1) {
      $loc2 = hexdec($param1);
      return array(
          'head' => str_split(substr($loc2, 0, 2)),
          'tail' => str_split(substr($loc2, 2))
      );
  }
  
  function substr1($param1, $param2) {  
      $loc3 = substr($param1, 0, (integer)$param2[0]);                    
      $loc4 = substr($param1, (integer)$param2[0], (integer)$param2[1]);
      return $loc3 . str_replace($loc4, "", substr($param1, (integer)$param2[0]));
  }
  
  function getPos($param1, $param2) {
      $param2[0] = strlen($param1) - (integer)$param2[0] - (integer)$param2[1];
      return $param2;
  }
    
  function download($url) {           
    $doc = phpQuery::newDocumentFile($url);
    $arr = array();      
    $tag = trim(strip_tags($doc->find("meta[property='og:video:secure_url']")->attr('content')));
    if (is_good_url($tag)) {
      return $tag;
    }
    $arr[] = $tag;
    $tag = trim(strip_tags($doc->find("meta[property='og:video:url']")->attr('content')));
    if (is_good_url($tag)) {
      return $tag;
    }
    $arr[] = $tag;        
    $tag = trim(strip_tags($doc->find("meta[property='og:videosrc']")->attr('content')));
    if (is_good_url($tag)) {
      return $tag;
    }
    $arr[] = $tag;
      
    foreach ($arr as $tmp) {
      $dict2 = getHex($tmp);
      $dict3 = getDec($dict2['hex']);
      $str4 = substr1($dict2['str'], $dict3['head']);
      $tmp1 = base64_decode(substr1($str4, getPos($str4, $dict3['tail'])));  
      if (is_good_url($tmp1)) {
        return $tmp1;
      }    
    }    
    return down($url);// 通过其它方法来尝试解析美拍视频
  }

效果如下:

怎么样下载美拍视频?

当然也可以通过在线网页版本的美拍视频下载工具 (Meipai Video Downloader).

视频下载相关技术帖子

视频下载相关的几个帖子:

视频下载工具

强烈推荐

微信公众号: 小赖子的英国生活和资讯 JustYYUK

阅读 桌面完整版
Exit mobile version