我要看圖! VIL Filter How-to

這篇來寫一下如何為相片網站設定 filter. Filter 要做的事如下:

  1. 找出相簿裡所有的小圖URL
  2. 利用小圖URL找出大圖URL
  3. 回傳所有的大圖URL資訊.

再來介紹一下 filter function 回傳的結果定義. VIL 支援的回傳結果種類如下:

  1. String array, 每個 Element 就是圖片的URL.
  2. 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. 如果有了什麼成果, 也歡迎跟我聯絡分享喔!

5 Responses to “我要看圖! VIL Filter How-to”


  1. 1 frank Apr 30th, 2008 at 05:30:39 PDT

    請問要如何顯示指定的圖片

    或是

    阻擋不要的圖片!?

    感謝囉!!

  2. 2 Horance Chou Apr 30th, 2008 at 14:30:18 PDT

    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;
    }
    

    參考看看 :)

  3. 3 frank Apr 30th, 2008 at 18:30:27 PDT

    哈哈!!感謝了!改成功了:)

    咦!!
    (var i = 0; i < images.length; i )

    是不是少了 !

    我這外行人問外行話 別見怪!

    我真的看了好幾天程式 看不出所以然啦!呵呵!

    另外我想顯示全部每個下1.2.3….頁的圖片該怎麼做啊!!

    真的愛看圖哩!嘻嘻~~

    感恩先~~

  4. 4 frank Apr 30th, 2008 at 18:30:11 PDT

    是少了”加加”啦!

    原來是打不出來!!

  5. 5 Horance Chou Apr 30th, 2008 at 19:30:47 PDT

    嗯, 應該是被濾掉了.

    要抓下幾頁的其實還滿麻煩的, 比較建議的作法是找看看有沒有以 “幻燈片播放” 的功能. 這類功能通常會把所有的圖片路徑一次丟出來, 比較好處理.
    沒有的話就只好一頁一頁去發 XMLHttpRequest() 抓回來再處理了.
    目前我手邊是沒有一頁一頁抓的範例, 不過可以參考 https://opensvn.csie.org/traccgi/MirrorScripts/wiki/fc_pixnet 的作法來處理抓回來的 HTML.

Leave a Reply




Google Friend Connect