這篇來寫一下如何為相片網站設定 filter. Filter 要做的事如下:
- 找出相簿裡所有的小圖URL
- 利用小圖URL找出大圖URL
- 回傳所有的大圖URL資訊.
再來介紹一下 filter function 回傳的結果定義. VIL 支援的回傳結果種類如下:
- String array, 每個 Element 就是圖片的URL.
- Object array, 每個 Element 是一個包含圖片相關資訊的 Object. 這個 Object 可包含以下 property:
- src: 圖片的 URL, required.
- desc: 圖片的說明文字, optional
- thumb: 縮圖的 URL, optional.
- link: 圖片在相簿中的連結, optional.
以上這些 properties 只有 src 是必要的, 其它的 property 如果不存在, 則會自動代換成 src.
接下來我們以無名相簿為例來說明怎麼樣寫 Filter Function. 先隨便打開一本無名的熱門相簿來參考. 在網頁上要秀圖片, 最常用的方法就是用 <img> tag. 所以我們可以用以下方法抓出頁面上所有的小圖:
function(){
var images = document.getElementsByTagName("img");
}
這樣 images 陣列中就是頁面上所有的 <img> 了. 因此, 用以下迴圈就可以找出所有的小圖URL了.
function(){
var images = document.getElementsByTagName("img");
for(var i = 0; i < images.length; i++){
var imgurl = images[i].src;
}
}
接下來進行第二步, 來看看大圖和小圖片URL有沒有什麼關聯性. 如果你有 Firebug 可以直接用它來觀察:
不然, 用 DOM Inspector也不錯:
再不然直接 “檢視原始碼” 也可以 :
接下來就是找出大圖的URL:
比對一下:
小圖: http://f4.wretch.yimg.com/bunny1010/9/thumbs/t1344171903.jpg
大圖: http://f4.wretch.yimg.com/bunny1010/9/1344171903.jpg
這樣很明顯了吧? 所以我們再把圖片URL處理一下:
function(){
var images = document.getElementsByTagName("img");
for(var i = 0; i < images.length; i++){
var imgurl = images[i].src.replace(/thumb\/t/,'');
}
}
這樣就是所有的大圖URL了. 再來把所有大圖路徑存入 Array 之後回傳即可.
function(){
var images = document.getElementsByTagName("img");
var myurls = new Array();
for(var i = 0; i < images.length; i++){
var imgurl = images[i].src.replace(/thumb\/t/,'');
myurls.push(imgurl);
}
return myurls;
}
如此就完成最基本的 filter 了. 當然功能是很陽春的, 不過已經足夠讓 VIL 顯示圖片了. 對進階功能有興趣的朋友可以參考 VIL wiki 上完整版的 filter for wretch. 如果有了什麼成果, 也歡迎跟我聯絡分享喔!




請問要如何顯示指定的圖片
或是
阻擋不要的圖片!?
感謝囉!!
Hi Frank,
如果要濾掉不要的圖片, 最簡單的方法就是在 for loop 中, replace 前先判斷是不是要顯示的圖片. 例如:
function(){ var images = document.getElementsByTagName("img"); var myurls = new Array(); for(var i = 0; i < images.length; i++){ if (images[i].src.match(/^http:\/\/.*\.wretch.*thumbs\/.*$/)) { var imgurl = images[i].src.replace(/thumb\/t/,''); myurls.push(imgurl); } } return myurls; }參考看看
哈哈!!感謝了!改成功了:)
咦!!
(var i = 0; i < images.length; i )
是不是少了 !
我這外行人問外行話 別見怪!
我真的看了好幾天程式 看不出所以然啦!呵呵!
另外我想顯示全部每個下1.2.3….頁的圖片該怎麼做啊!!
真的愛看圖哩!嘻嘻~~
感恩先~~
是少了”加加”啦!
原來是打不出來!!
嗯, 應該是被濾掉了.
要抓下幾頁的其實還滿麻煩的, 比較建議的作法是找看看有沒有以 “幻燈片播放” 的功能. 這類功能通常會把所有的圖片路徑一次丟出來, 比較好處理.
沒有的話就只好一頁一頁去發 XMLHttpRequest() 抓回來再處理了.
目前我手邊是沒有一頁一頁抓的範例, 不過可以參考 https://opensvn.csie.org/traccgi/MirrorScripts/wiki/fc_pixnet 的作法來處理抓回來的 HTML.