PHP 板


LINE

看板 PHP  RSS
最近我在做解析 youtube 网址并且下载这件事情... (然後加上 ffmpeg 转出 ogg 音乐) 也参考了 Kej 的网站 稍微了解之後,我写了一份整理在我的网志 http://magicallove.twbbs.org/wordpress/?p=989 video_id 的取得很简单,我没有另外纪录 等我搞定下载问题会补上去吧XD 目前我解析出来之後遇到一个挺麻烦的问题 这个问题也让我联想到 Kej 的网站之所以要大家先下载一份文字档,再透过 js 解析。 这似乎有点关联!! 问题状况是,我解析出来的网址都没有办法直接使用 curl 下载 第一次使用 curl "link" > webm 输出到档案都会 20秒 timeout 但是紧接着再下一次 curl "link" > webm 就可以运作了 这什麽道理= =a 等我明天睡醒 试试看,再我的伺服器上面让它先去 curl get_video_info 但是为什麽 Kej 的网站可以第一次另存新档就成功? 是因为已经有先下载过那份文字档,等价於我 curl 失败的那次吗! 0.0 嗯,越写越开心,忍不住试了一下 好像果真如我猜测一般~ 如果明天顺利的话! 我想个办法看看能不能把这个功能开发成为一个堪用的 api 给大家呼叫~~~ ※ 引述《Kej (be me)》之铭言: : ※ 引述《kenshieh (Not always blank)》之铭言: : 网址有点眼熟..................... XD : j75Kl7_ERdM 跟 lax-v239.lax 以及 em-ZhJDjayM 跟 ash-v250.ash : 之间应该没有什麽关系,而只是单纯的 server hostname 罢了 : 你可以用 firebug 观察 flv 档案的 url,会发现多 reload 个几次 : hostname 是会变的(应该是影片的 server 有好几台) : : 懒人做法( 不确定是不是全都可以用, 但随手试二三个都行 ): : : // $source == '网页内容' : : $pattern = '/watch_fullscreen\?video_id=([\w-]+)&l=\d+&t=([\w-]+)'; : : if (preg_match('#$pattern#s", $source, $m)) : : { : : echo "GetTube: http://tw.youtube.com/get_video?video_id={$m[1]}&t={$m[2]}"; : : } : 基本上要取得 youtube 的影片位址,最主要的参数就是 video_id 跟 t : 像上面那样的作法是很 OK 的,我一开始也是这样的方式做的 : 可是当时间久了或量变大了之後,问题就来了 : 不晓得 youtube 是会侦测你今天总共 request 了几次还是会记录传输量 : 总之当程式抓网页抓到一个一定的量的时候,youtube 就会把你的连线挡了 : 过了一段时间之後才会再开放让你连线 : 当初我就一天到晚被挡,後来只好找 open proxy : 後来我发现了一个方法,不需要找 proxy 也不会被 youtube 挡: : 以 https://www.youtube.com/watch?v=em-ZhJDjayM 为例
: 我们可以知道他 embed 的标签里 : 影片的 src 会是 https://www.youtube.com/v/em-ZhJDjayM : 而这个 url 会做 redirect : 最後的网址就像下面这样:(三行连起来) : https://www.youtube.com/swf/l.swf?video_id=em-ZhJDjayM& : eurl=&iurl=http%3A//img.youtube.com/vi/em-ZhJDjayM/default.jpg& : t=OEgsToPDskLvttI1e7cLfmL15TOMbN24&rel=1&border=0 : 所以程式就可以改成这样: : (1). 抓原始 url 里的参数 v : (2). 重新组合成 https://www.youtube.com/v/xxxxxxxxxxx 的格式 : (3). 用 fsockopen 读取 (2),取得 header 的 Location 的 url : (4). 从 (3) 得到的 url 中,parse 出参数 t : (5). 组合成 https://www.youtube.com/get_video?video_id=$video_id&t=$t 的格式 : 基本上只要做到这个步骤就可以抓的到档案了,但是你还可以更进一步: : (6). 用 fsockopen 读取 (5),取得 header 的 Location 的 url : 从 (6) 这步骤得到的 url 就会是像 : http://ash-v250.ash.youtube.com/get_video?video_id=em-ZhJDjayM : 这样子的 url : that's all~!! : 只要 fsockopen parse_url parse_str 就好 : 不用捞网页(省流量!),也不用做 regular expression (省脑力!) : 不会被 youtube 挡,也不会因为 open proxy 关了你的站就死翘翘了(我挂了好几次orz) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.50.51.128
1F:推 grassboy2:印象中youtube影片实体url会因client端ip不同而不同… 02/28 03:37
2F:→ grassboy2:所以如果要开成api,就相当於每面对一个api call 02/28 03:38
3F:→ grassboy2:就必需从原po的主机抓下来影片後,再传给api client 02/28 03:39
4F:→ grassboy2:感觉流量会吃很大喔~~但也可能是我记错啦XDD 02/28 03:40
5F:→ iwhiori:对!抓下来的网址参数的确有ip这栏 02/28 09:19
6F:→ iwhiori:我机器放140.116 如果能成功做成!那我很乐意大家来吃频宽 02/28 09:19
7F:推 kusoayan:推一下 02/28 11:23
8F:推 shadowjohn:推一个,建议可以参考 youtube-dl (python)有现成的了 02/28 18:09
9F:→ iwhiori:哦感谢楼上 我去找找 03/17 12:55
10F:→ iwhiori:python youtube-dl 03/19 11:44
11F:→ iwhiori:wokrs !! 太伟大了! 03/19 11:44







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP