Blackbing Playground

Download FB album (for high resolution pictures)

Download_FB_new_feature之前做了這個下載照片的小工具Download FB album,說真的,我沒想到會有這麼多人下載,雖然是chrome Extension,但隨著Chrome瀏覽器成長的快速,使用者與開發者也成長的非常快速,代表只要你的產品有碰到使用者,是真的能夠有這個市場,而且在chrome Web Store也已經有付費機制,也就是說你能夠透過web strore來跟使用者收取費用,讓開發人員更有興趣來Rock the World。

話說回來,Download FB album的目的只是要下載整個相簿的照片,而原本的概念也僅僅只是要替換縮圖與原圖的URL而已,然而,發佈之後才發現很多人反應沒辦法下載原始大小的圖檔,於是我再檢查是否可以取到相對應的原始大小圖檔,但結論是沒辦法,就連每一張圖片的高解析尺寸,FB都是重新發request來取得,而且包含html一起回來,這代表FB為了防止抓圖機器人大量抓圖(指)而採行的策略,於是我雙手一攤,那我就沒辦法囉~各位使用者,Sorry~(逃~)

但在這期間,我收到好幾個使用者直接寄信來反應是否可以提供下載高解析度照片,並且很認真的跟我討論實做的方法,大部分使用者一開始都提到只要改一個字元而已,仔細討論之後才發現真的沒那麼簡單,所以最後都不了了之。但隨著使用者下載的次數越來越多(目前已經38000以上人次下載),我的責任感卻增加了,於是我開始很認真的思考我該如何取得high resolution的圖片。歸納出以下結論:

facebook的圖片共分為三種格式

  • 預覽縮圖(120*160)px
  • 播放縮圖(960*640)px
  • 高解析尺寸(2048*1536)px
    • 高解析尺寸的URL需要發AJAX來取得(每一張圖片都要)。
    • 回傳的格式是JSON,但內容卻是一份HTML字串。因此需要parse HTML才能得到高解析尺寸的連結。

兩種尺寸的縮圖URL只差一個字元,因此知道縮圖連結之後,進行簡單的替換即可,然而高解析度的圖片URL需要一張一張跟server問。首先是想到的是流量問題,如果相簿裡頭有上百上千張圖片,那就要在短時間內發送上百上千的查詢,會不會引起FB的注意也是個問題。之前當我發布這個工具之後,碰巧與photojacker的作者聊到,他有提到之前因為流量太大被FB注意到並要求強制移除,當時他非常憤怒。並提醒我要注意這一點。不過為了解決這個問題,我暫時就不管這件事了。我只是想解決問題而已(抱頭~)。

另外一個問題則是Chrome Extenstion架構限制,在官方文件上寫到:

However, content scripts have some limitations. They cannot

  • Use chrome.* APIs (except for parts of chrome.extension)
  • Use variables or functions defined by their extension’s pages
  • Use variables or functions defined by web pages or by other content scripts

These limitations aren’t as bad as they sound. Content scripts can indirectly use the chrome.* APIs, get access to extension data, and request extension actions by exchanging messages with their parent extension. Content scripts can also make cross-site XMLHttpRequests to the same sites as their parent extensions, and they can communicate with web pages using the shared DOM. For more insight into what content scripts can and can’t do, learn about the execution environment.

你可以進行跨域的AJAX請求,並且禁止存取該頁的任何變數和function。而既然是不同的domain,當然就無法進行AJAX的溝通。然而他們卻可以「Communication with the embedding page」,這就有趣了,既然我可以access DOM,我就可以進行該頁面的任何動作,包括進行AJAX攻擊請求。是否?是否?細節不多提啦,有興趣的再私底下討論,這篇文章只是想說明Download FB album做了突破性的更新,不管會不會被Facebook阻擋,分享就是Rock the world的精神阿阿阿~

另外Chrome Store的評論和討論的互動性機制還蠻差的,所以我弄了一個Facebook粉絲頁(Face book Page for Download FB album)如果在操作或使用上有任何問題請別客氣的進來鞭我吧。