最近做網站的時候遇到一個需求:給定一個視頻地址,獲取它的swf地址。例如,給一個優酷的視頻地址:http://v.youku.com/v_show/id_XNDg4MzY5ODU2.html,想獲取它的swf文件的地址,通常情況我們是通過爬取網頁的方式來獲取相關標簽內的值,可是這種方法有很多不便,效率不高,准確度不能得到保證,不同的網站篩選的方法也不一樣,有的網站的flash地址是用js動態生成的(例如愛奇藝),這時候通過爬取網頁就得不到想要的結果了。
今天突然想到新浪微博支持在發微博的時候直接插入視頻地址,就想看看新浪是怎么做的。於是試着發一條帶視頻的微博,此時頁面上並沒有視頻的真實地址,而是一張與視頻相關的圖片
點擊圖片,出現了視頻播放器。
使用谷歌瀏覽器的開發人員工具查看,原來新浪是通過它自己的api來實現這一功能的。
我們只需要關心short_url這個參數就行了,它就是視頻的長網址轉換后的短網址。
這里給個長網址轉短網址的api:http://weibo.com/aj/mblog/video?_wv=5&url=http%3A%2F%2Fv.youku.com%2Fv_show%2Fid_XNDg1MDkzODcy.html
url參數換成你需要轉換的網址就行了。
返回結果:
{"code":"100000","msg":"","data":{"url":"http:\/\/t.cn\/zjxngLP","title":null}}
另外加上jsonp=STK這個參數,返回的結果是html,不加這個參數返回的是json格式的數據。
來看看結果吧
<!-- 加jsonp=STK參數 --> <html> <head></head> <body> try{STK({"result":" <div> <div> <embed id="\"STK\"" height="\"356\"" allowscriptaccess="\"never\"" style="\"visibility:" visible;\"="" pluginspage="\"http://get.adobe.com/cn/flashplayer/\"" flashvars="\"playMovie=true&auto=1\"" width="\"440\"" allowfullscreen="\"true\"" quality="\"high\"" src="\"http://player.ku6.com/refer/uLsWSvMRa4YaFaeNBlo04Q../v.swf\"" type="\"application/x-shockwave-flash\"" wmode="\"transparent\"/" /> </div> </div>"});}catch(e){} </body> </html>
<!-- 不加參數,返回的是json格式 {"result":"<div><div><embed id=\"\" height=\"356\" allowscriptaccess=\"never\" style=\"visibility: visible;\" pluginspage=\"http://get.adobe.com/cn/flashplayer/\" flashvars=\"playMovie=true&auto=1\" width=\"440\" allowfullscreen=\"true\" quality=\"high\" src=\"http://player.ku6.com/refer/uLsWSvMRa4YaFaeNBlo04Q../v.swf\" type=\"application/x-shockwave-flash\" wmode=\"transparent\"/></div></div>"}
可以看到返回結果中的src正是我們想要的內容。