美拍视频(meipai)下载的最好方法
目前有以下靠谱的下载美拍视频的方法:
- 网页在线美拍视频下载解析工具 (Meipai Video Downloader)
- Chrome 浏览器插件, 支持数十种视频网站下载, 又方便又准确.
- 当然还可以加我的 微信公众号 JustYYUK 通过机器人问答交互方式来 下载视频.
- IOS 用户可以通过 Workflow 来调用视频下载的工具
美拍视频地址解析原理
美拍视频 (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; } } } }
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).
视频下载相关技术帖子
视频下载相关的几个帖子:- 如何解决微博视频下载出现的403错误(Denied by Referer ACL)?
- 怎样通过 Workflow 应用来下载视频?
- 如何下载 Instagram 视频?
- 如何下载 汤不热 Tumblr 视频?
- 如何下载 91 (P*rn) 视频?
- 如何下载 微博/weibo秒拍miaopai视频?
- 如何下载 网页中的 视频? (万能视频解析下载技巧)
- 如何通过微信公众号机器人下载视频?
- 怎么样下载 美拍/meipai视频 (含 Javascript 代码)?
- 如何下载解析 爱拍视频? (aipai)
- 如何下载解析 快手视频? (kuaishou)
- 第一视频的解析技巧
- 梨视频(PearVideo)下载解析的方法和技巧
- 说说我那复活的视频下载插件
- 如何下载TED视频?
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK