很早以前,为了练习Python写了个《喜马拉雅mp3批量下载工具》,本以为没多少人关注,后来发现使用的小伙伴还是挺多的。但是随着官方网站的更新,导致了脚本失效,最近抽时间重写了代码,Python版本的以前使用的lxml解析html,这次更新使用正则表达式处理,原生支持,这样减少了小伙伴们安装库的时间。。然而本次的重点不是Python。。。
自从学习了Python以后,PHP已经全忘了,以至于我在用PHP写这个批量下载工具的时候,都忘了PHP变量怎么使用了。^_^
为了练习PHP,方便代码审计,花了一整个下午的时间写了PHP版的小工具,唉。看来编程这玩意要常练呀。。
喜欢Python版本的,请稳步至 [python]喜马拉雅mp3批量下载工具
程序说明:
1、使用类编写,简洁明了。
2、可下载单一MP3链接,也可以下载专辑。
3、调用外部工具多线程下载。
喜马拉雅mp3批量下载工具PHP版
url = $url; } public function getpage() { $purl = array(); $response = file_get_contents($this->url); if (preg_match_all('/class=\'pagingBar_page\'/', $response, $match)) { $pagelen = count($match[0]); for ($i = 1; $i <= $pagelen; $i++) { $purl[] = $this->url . '?page=' . $i; } } else { $purl[] = $this->url; } return $purl; } public function analyze($trackid) { $mp3_arr = array(); $trackurl = 'http://www.ximalaya.com/tracks/' . $trackid . '.json'; $response = file_get_contents($trackurl); $jsonobj = json_decode($response, true); $title = $jsonobj['title']; $mp3 = $jsonobj['play_path']; $mp3_arr['title'] = iconv('utf-8', 'gbk//IGNORE', $title); $mp3_arr['mp3'] = $mp3; return $mp3_arr; } public function getids($purl) { $ids = array(); if (strpos($purl, 'sound')) { $ids[] = substr($purl, strrpos($purl, '/') + 1); } else { $response = file_get_contents($purl); preg_match('/sound_ids="(.+?)"/', $response, $match); $ids = explode(',', $match[1]); } return $ids; } public function down() { $todown = $this->getpage(); foreach ($todown as $purl) { foreach ($this->getids($purl) as $ids) { $idsarr = $this->analyze($ids); $title = $idsarr['title']; $mp3_url = $idsarr['mp3']; $filename = $title . '.mp3'; echo $filename . ' ' . $mp3_url . PHP_EOL; fwrite(fopen('mp3.txt', 'ab+'), $filename . ' | ' . $mp3_url . PHP_EOL); if (function_exists('system')) { @ob_start(); $res = system('aria2c.exe -s 10 -j 10 ' . $mp3_url . ' --out=' . $filename); @ob_get_contents(); @ob_end_clean(); if (strpos($res, 'OK')) { echo $filename . ' 下载成功!' . PHP_EOL; } else { echo $filename . ' 下载失败!' . PHP_EOL; } } else { echo '请开启system函数以便多线程下载!tips: check disable_functions in php.ini' . PHP_EOL; } } } } } $ximalaya = new ximalaya($argv[1]); $ximalaya->down();
程序执行方法:
php ximalaya.php http://www.ximalaya.com/52622741/album/4519297
from www.waitalone.cn.thanks for it.
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论