2009年8月1日 星期六

攻略:nico影片下載教學

之前研究了youtube影片抓取方式後,就順便研究了一下niconico的檔案抓取方法
niconico是日本知名的影音分享平台,通常我們這種宅男都會很喜歡去逛
而他的影片要如何下載呢?

方法一:使用軟體


目前最常用的軟體就是 [BOON-SUTAZIO] 這套軟體,他是用IE的核心在跑
但是如果對用灌firefox的朋友來說,還要特定開一個瀏覽器實在麻煩
ptt的ybite大則有推廣一套名為 [Nicofox] 的plug-in

又或者firefox可以用HTTP 封包觀察plug-in 如 [FireBug] [HttpFox]等來直接找出檔案位置
下面用FireBug舉個例如下

選擇[網路]這個tag,在選擇[all]
可以找到類似下面這種長像的網址

http://smile-clb52.nicovideo.jp/smile?v=5425174.41080low

這就是實體檔案位置,可以放到flashget等續傳軟體下載
這邊low是指低畫質影片,正常畫質位置則不會有low這個字

那有沒有更直接的方法 連plug-in都不用裝呢
當然有,接下來介紹下面方法

方法二:抓出實體link編碼


首先呢 請先抓出nico影片的後置碼,譬如說
http://www.nicovideo.jp/watch/sm5425174
就是抓出sm5425174,然後用http://www.nicovideo.jp/api/getflv/代換如下

http://www.nicovideo.jp/api/getflv/sm5425174

之後把組合後的新網址放到網址列按下enter進入後,會得到類似如下的一段code

thread_id=1228159357&l=306&url=http%3A%2F%2Fsmile-clb52.nicovideo.jp%2Fsmile%3Fv%3D5425174.41080low&link=http%3A%2F%2Fwww.smilevideo.jp%2Fview%2F5425174%2F594488&ms=http%3A%2F%2Fmsg.nicovideo.jp%2F9%2Fapi%2F&user_id=594488&is_premium=0&nickname=Hatsuki&time=1249113823&done=true&ng_rv=1&hms=hiroba-test6.nicovideo.jp&hmsp=2532&hmst=1000000108&hmstk=1249113853.UtHSJn2X4wZFiWNekHQL-e-YtY4



但是這樣還沒結束,這段code是被encode過的,必須decode後才能用
decode可以用javascript的unescape函式
或者是提供decode功能的網頁,類似下面這個網頁
http://www.csie.ntu.edu.tw/~b94102/unescape.htm

不一定是要上面那個網頁,任何有提供URLDecode的網頁都可以
或者高興自己寫一個也行(反正也才一行程式碼)
又或是對URL encode的方式很熟,自行帶換也可以
英文字是不用改,只須對特殊符號作替換如下

  • [%3A]:替換成[:]

  • [%2F]:替換成[/]

  • [%3F]:替換成[?]

  • [%3D]:替換成[=]


上面換一換也能decode回來


解碼後的結果如下

thread_id=1228159357&l=306&url=http://smile-clb52.nicovideo.jp/smile?v=5425174.41080low&link=http://www.smilevideo.jp/view/5425174/594488&ms=http://msg.nicovideo.jp/9/api/&user_id=594488&is_premium=0&nickname=Hatsuki&time=1249113930&done=true&ng_rv=1&hms=hiroba-test7.nicovideo.jp&hmsp=2530&hmst=1000000126&hmstk=1249113960.RcySgXhjcWcgVTsbv2zEwT9_xI4


看到沒有!紅色那段url=http://smile-clb52.nicovideo.jp/smile?v=5425174.41080low不就是我們要找的東西嗎?

如此一來就可以得到nico影片檔的實體檔案位置,輕鬆方便,連plug-in都不用裝

-----------------------------

備註一下,上面提到的方法都要先登入nico後才有用,因為他會用session跟timestamp來驗證


題外話,後來寫了一個javascript抓取nico影片的程式,發現只能在IE上使用,查了一下原因
我是用AJAX去做的,但是Firefox會對cross-domain(跨網域)的XMLHttpRequest請求作出阻擋
所以必須使用類似PHP的script程式來當proxy
後來懶惰就沒有繼續寫了

沒有留言: