
最近讀到一篇關於Blogger的JSON中,如何截取出Media$thumbnail的文章,Media$thumbnail是Google自動針對網誌內的圖像所產生的72x72縮圖,利用這個JSON物件就有辦法做出帶縮圖的最新文章Widget,我把程式碼與Abin大大的最新文章模組「終極版」做了一個融合,就生出這套新插件可以給大家用啦。
使用教學:(我盡量簡單化安裝步驟,裝起來應該不會有太大難度)
- 到[設定]->[網站提供]->將文章資訊提供改為[完整],否則本外掛會無法使用喔。
- 到[版面配置]->[網頁元素]->新增[HTML/JAVASCRIPT]元件。
- 在內容表格填上下列程式碼
<style>
/* 最新文章 */
#RPosts ul{margin:0;padding:0;list-style:none;}
#RPosts li{display:block; margin:1px 0;height:52px;line-height:20px;padding:0 5px;border-bottom:1px dotted #ccc;}
.RP-title{font-size:13px;display:block; padding:5px 0 0;}
.RP-thumb{width:40px;height:40px;border:1px solid #ccc;padding:2px;margin:3px 8px 3px 0;float:left;}
#RP-nav{font-size:14px;margin-top:8px;text-align:center;}
</style>
<div id="RPosts"></div>
<script language="javascript">
var nPostStartIndex = 1;
var nPostShow = 5;
var noImage ="http://1.bp.blogspot.com/_u4gySN2ZgqE/SosvnavWq0I/AAAAAAAAArk/yL95WlyTqr0/s400/noimage.png";
function showRecentPosts(nIndex) {
if (!nIndex)
nIndex = nPostStartIndex;
var sFeedURL = '/feeds/posts/full?orderby=published&start-index='+nIndex+'&max-results='+(nPostShow+1)+'&alt=json-in-script&callback=generatePosts';
var script = document.createElement('script');
document.getElementById('RPosts').innerHTML = ' Loading...';
script.setAttribute('src', sFeedURL);
script.setAttribute('type', 'text/javascript');
document.documentElement.firstChild.appendChild(script);
}
function generatePosts(json) {
function compareentry(a,b) {
order= Date.parse(a.published.$t.replace(/^(\d{4})-(\d{2})-(\d{2})T([0-9:]*)([.0-9]*)(.)(.*)$/, '$1/$2/$3 $4 GMT')) - Date.parse(b.published.$t.replace(/^(\d{4})-(\d{2})-(\d{2})T([0-9:]*)([.0-9]*)(.)(.*)$/, '$1/$2/$3 $4 GMT'));
return 0-order;
}
var sortentry = json.feed.entry.sort(compareentry);
var nIndex = parseInt(json.feed.openSearch$startIndex.$t);
var nTotalPost = parseInt(json.feed.openSearch$totalResults.$t);
var sHTML ='<ul>';
for (var i = 0, Post; Post = sortentry[i]; i++) {
if (i >= nPostShow)
break;
var title = Post.title.$t;
// Fetch thumb script by Aneesh of www.bloggerplugins.org
var thumb;
try{thumb = Post.media$thumbnail.url;
// If image source from flickr than use exsisting thumbnail
if(thumb.match("flickr")=="flickr")thumb=thumb.replace(/\_[stmo]\.jpg|\.jpg/,"_s.jpg");
}
catch (error){
s=Post.content.$t;a=s.indexOf("<img");b=s.indexOf("src=\"",a);c=s.indexOf("\"",b+5);d=s.substr(b+5,c-b-5);
if((a!=-1)&&(b!=-1)&&(c!=-1)&&(d!="")){
thumb=d;
// If image source from flickr than use exsisting thumbnail
if(thumb.match("flickr")=="flickr")thumb=thumb.replace(/\_[stmo]\.jpg|\.jpg/,"_s.jpg");
}
// No mediathumbnail and any image in the article
else thumb=noImage;
}
var j = 0;
while (j < Post.link.length && Post.link[j].rel != "alternate")
j++;
var link = Post.link[j].href;
sHTML += '<li><a href="'+link+'"><img class="RP-thumb" src="'+thumb+'" /><span class="RP-title">'+ title +'</span></a></li>';
}
sHTML += '</ul>' + generatePostLink(parseInt(json.feed.entry.length), nIndex, nTotalPost);
document.getElementById('RPosts').innerHTML = sHTML;
}
function generatePostLink(nFetch, nIndex, nTotalPost) {
var bOld = (nFetch > nPostShow);
if (bOld) nFetch = nPostShow;
var sResult ='<div id="RP-nav">';
if (nIndex > nPostStartIndex)
sResult += '<a href="javascript:showRecentPosts('+(nIndex-nPostShow)+');" title="Newer Posts">上一頁</a> ';
sResult += '第'+nIndex+'-'+(nIndex+nFetch-1)+'篇, 共'+nTotalPost+'篇 ';
if (bOld)
sResult += '<a href="javascript:showRecentPosts('+(nIndex+nPostShow)+');" title="Older Posts">下一頁</a></div>';
return sResult;
}
</script>
<script language="javascript">showRecentPosts();</script>
<a style="clear:both;float:right;font-size:8px;color:#ccc;padding:2px;" href="http://blog.nightspirit.tw/2010/03/blogger-ajax.html">MOD BY NS</a> - 開頭的STYLE為此元件的CSS,可以自行針對版面做客製化。
#RPosts li - 此li元件為每一列圖片加標題的外框,我預設52px高,有加下底線,可以透過設定margin調整項與項的間距,透過padding決定內容與外框的間隔。
.RP-title - 標題的span元件,可以透過font-size來改大小,padding來決定與頂端的間隔。
.RP-thumb - 縮圖的img元件,可以透過width、height來調整縮圖大小,margin-right來決定與標題文字的間隔。
#RP-nav - 底下的訊息列與上下頁籤,是一個div物件,基本上就隨你喜歡來操作囉。 - var nPostStartIndex = 1; 此參數決定你要從第幾頁開始。
- var nPostShow = 5; 此參數決定每頁entry的個數,建議這個不要設太高,畢竟讀取太多縮圖會花較長時間。
- 對JS熟習者,上下頁或特定字詞可以在內碼中找到並自行替換,元件結構也可以透過填入SHTML的順序來加以變動。
- 為了推廣此套件NS有在底下放了一個MOD BY NS的小連結,如果覺得這外掛好用的話請不要把他拿掉,如果真的覺得礙眼的話,請用CSS #RP-link{display:none;},謝謝您的支持 :)
套件特點:
縮圖第一步是先找有沒有對應的media$thumbnail,沒有則會去搜尋內文中的圖片。這邊有加入flickr的檢查機制,如果你是用flickr當圖床,程式會自動把URL轉成flickr縮圖的位置來加速讀取時間(3/14更新,我把replace那邊換成通用的正規式,因此不論用_s,_t,_m,_o或無印應該都會轉成_s.jpg)
若是用其他圖床恐怕就必須載入原圖並因為強制縮為正方形而造成部份失真。至於什麼圖都沒找到的情況之下會填入一張無縮圖的圖像,各位可以自行把程式碼中var noImage=""的字串換成你想要的圖片URL。
2010-11-30更新
由於blogger feed的media$thumbnail有時會抓到flickr的_t.jpg縮圖,所以需將檢查機制同時加入try()跟catch(error)裡,程式碼部份已修正,請直接換用新程式碼。
延伸閱讀:
- Related Posts Widget for Blogger with Thumbnails - 我從這篇學到怎麼去抓thumbnail,或者從內文中找到圖片。
- 最新文章模組「終極版」 - 模組原型是取自於Abin大大這篇。
常見問答:
Q. 跳頁功能無法使用?
A. 主因是本外掛改自Abin大大的最新回應終極版,在做的時候並沒有把原來的更新Function改名,造成兩個外掛無法共容,最快的辦法是擇一使用之,不然就是要把我程式碼中showRecentPosts用別的字串來取代...Q. list-style就算設成了none也無法把清單bullets移除?
A. 很多template是利用background來做清單的bullets,所以只要在#RPosts li裡加入background:none;的屬性即可把bullets移除。最後希望大家都能快樂的hacking blogger,有問題的同學請在下面發問,洩洩!
2011/1/31 NS已推出JQuery為主的新版插件,歡迎試用。
Blogger RecentPosts 最新文章插件 V1.0.0
35 回應:
這個好威....我找個時間再來裝一下,最近在趕東西
這個超讚的
樓上:
謝謝~ 喜歡的話還請幫小弟多多宣傳 :)
你好,我試著在我的網誌安裝了這個非常棒的程式,
但是發現按程式中"下一頁"時,他都不會讀取接下來的文章,請問有可能是我哪邊設定錯誤嗎?
http://jokerson.blogspot.com/ <=這是我的網誌
HermesLee:
因為你底下裝了一個abin版的最新文章,因為我這是改自abin大的程式所以更新函式showRecentPosts是共用的,看你要把這函式改個名或是兩者擇一使用囉
請問一下,我的List Style是設定none,卻還是顯示,要怎麼才能讓他消失呢?
搞定了,這真的是ㄧ個非常棒的東西,
很感謝你的分享和講解。
Atlas Weng
我剛看一下你的ul li 背景都被加上了有點的background,所以那點並不是list-style管的,我試著用web developer調但是css蓋不過去,可能你的版型有鎖住CSS,你可能要自己debug看看...
嘿,謝謝你的ajax!我忍不住裝來玩了
雖然又熬夜還是要弄到好才甘心XD
我真的一頁頁檢查縮圖有無正常出現
像福利客有時出不來的原因也找到了
若當初上傳的圖過小,但用最大尺寸的網址就會出現問題
要再選小一號就ok
還順便檢查到以前空間失效沒有叉燒包的圖
NS~GJ!!
http://huijung.blogspot.com
請驗收!
Huijung:
很高興能幫到你,你能喜歡這個外掛就是我最大的榮幸囉,也請幫我推廣囉 :)
list的問題已經解決了!目前正在運作中!非常好用!超感謝你!
(不好意思,我把link拿掉了,因為它跑出格子外,不過我有聯播連結,沒關係吧!)
哈,這東西真的是愈來愈炫了,我才知道有 thumbnail 可以用耶!
未來讓我也把它加進我新版的外掛裡,肯定也會很威的啊!
感謝!
特別覺得,這功能對於圖文部落格特別有幫助,甚至可以當做一個單獨的功能來開發,做成類似電視牆之類的東東...呵呵
說不定比月曆形式還要有趣!
LVCHEN:
給你看看我正在試作的新外掛,不過現在還有些小問題無法解決,例如圖位置會跑掉跟IE/FX無法兼容的問題。
你好,我在我自己的部落格中嘗試安裝這個hack,但一直顯示loading,請問是否需要讓程式自行抓取一段時間後才能正常顯示呢?
我有裝abin的最新文章和最新回應,但兩者移除後這個hack還是一直在loading,不知道是什麼原因?謝謝!
之前試都一直不成功呢。
但是試著改裝ABIN'S的掛件卻可以。
小小的研究一下才發現,原來格主所抓取的RSS是全文。
ABIN的是摘要,而我自己本身的BLOGGER RSS是只提供摘要的~
難怪一直無法出現~
謝謝格主的掛件,這個比BLOGGER原配件來的理想多了!
Hudson:
剛到你網誌看過,如同璘夜所言,此外掛需要開放完整的網誌提供,請到[設定]->[網站提供]->將文章資訊提供改為[完整]。 另外你目前使用的最新文章套件是abin版的,跟這套會有衝突,請擇一使用之。
璘夜:
很開心你喜歡這個套件,你的提醒我注意到了,在安裝說明的部份我加入了這條注意事項,感謝你 :)
謝謝格主,改過後就可以用了,非常謝謝你的幫忙,真的是很棒的掛件,看起來很賞心悅目!
你好 不好意思想請教一下
如果想把最新文章作成跟這blog一樣
http://phx1985.blog125.fc2.com/blog-entry-405.html
該如何下手呢? 謝謝^^
樗里疾: 是說要弄成tab式的下拉選單嗎?,那你可能要去找下拉選單的外掛再把最新文章的內容寫到innerHtml了
好東西, 請問如果想要再加上內文的前幾個 character, script 要怎麼改呢 ?
感謝NS兄提供這外掛,真是帥呆了...
哇!你真滴好棒喔~超感謝你滴!這各很好耶^^找好久!真滴很謝謝你
好東西阿 雖然很久沒碰網誌了XD 還是手癢玩了一下
謝謝你...我也手癢改了一下..
還在研究Blogger hack: AJAX LOADING 動態文章中...
發現一個BUG
程式中雖然有加入flickr的檢查機制
但是1~5項的_s,_t,_m,_o縮圖
並沒有轉成_s.jpg
請問要如何解決
以你右側的最新文章
DIY MINI STUDIO 自製迷你攝影棚
文中的第一章圖
http://farm2.static.flickr.com/1030/5180609337_58e05e733a.jpg
被轉換成
http://.............._t.jpg
但並沒有縮成
http://.............._s.jpg
請問要如何解決
不知道nightspirit懂不懂我的意思
Mokotw:
謝謝你的回報, 我還在抓bug, 若是抓到了會再通知您。
Mokotw:
我抓到bug了,剛剛研究了一下新的feed,發現blogger現在會抓flickr的_t.jpg來塞到media$thumbnail這個entry,所以我的檢查機制要放到try()裡面而非底下的catch(error)。
我已經將原碼更新過了,只要直接copy paste新原碼即可。
有錯誤的話再跟我說
這是可以找到的"最新文章"工具裏, 最好用也最好看的. 謝謝你.
天才大大,
很謝謝你offer了recent posts的模組套件, It works excellent on my brogger. 但我把它加入我一個同學會部落格, 這個設定為不被search和要有密碼才能進入, 在這裡就發生error. 是否因完全封鎖就不行使用? ( 但另一個設定成不被search, 但任何人皆可瀏覽, 你的模組就work ) 因不希望不同學會部落格開放為to public, 想請問是否有解決的方法?
@Christine
沒有辦法~ 如果不公開就表示抓不到json feed,那麼這個plugin就完全無用武之地。
Thanks.
讚!!
套入BLOG囉~~~~謝謝
你好~我想請問該怎麼樣才可以讓點選的文章用另開新視窗的方式開啟呢~感謝您
張貼意見
非Blogger會員的朋友,請在"發表意見的身份"選單選用"名稱/網址"填入您的大名,這樣NS才知道該怎麼稱呼你喔 :)