2007/1/16

表謝意:近期迴響

搞不懂為什麼 Blogger 不提供「近期迴響」這個東西,之前使用「資訊提供」網頁元素(Feed Widget)搭配迴響的消息來源(Feed,偏不想叫它資訊提供勒)是做出了個堪用的東西,但可惜的是它不像 WordPress.com 一樣可以顯示迴響網頁標題。

解決方案找不到,頭痛了一陣子,也試用過 Beautiful Beta 提供的方案,但他有幾個大缺點:
  • 顯示的「標題」並不是真正的標題,而是連結名稱解析來的字串:

    @Ramani: I noticed that the post title is no exactly the same as the linkname. I checked the json-feed contents, and it offers no posttitle. You can get the post-id from the feed.entry.id object, but I have not come up with a trick to derive the posttitle fom the post-id. -- Hans

    簡譯:我也知道連結名稱不真能代表網頁標題,不過 Blogger 的 JSON 裡完全沒有網頁標題;雖然也可以從文章的 JSON 找同 post-id 的標題,但我不幹。(譯註:ㄜ,最後那個「我不幹」是我亂講的 XD)

    這點碰上中文更是致命啊...

  • 我問作者那些程式我可否自己修?他沒理我 XD (還是我留錯地方了?因為回去已經看不到我的留言...)

本來放棄了,但昨天查詢 JSON 資訊的時候發現水瓶子那邊已經有可以支援中文的版本「JSON 應用(2):最新迴響的標題」,這很棒!馬上拿回來裝裝看,發現一些地方跟我想的不太一樣:

  • 沒有考慮 noscript:mmm... 我會希望讓沒有開 Script 的人也能看到基本的東西。
  • 版面顯示方式:這沒什麼好壞只是我不習慣,事實上原來的方式感覺還蠻有效率的。

所以經由水瓶子的友善回應,我稍微修改成自己的版本(嗯,其實還改蠻多的,因為我的需求比較簡單),也提供大家參考,修改的地方簡述如下:

  • 考慮不開 Script 的朋友:照後面提到的步驟修改的話,即使對方關閉 Script 也可以看到原來的 Feed Widget 版本。
  • 程式碼比較簡單:剛說了我的需求比較簡單,所以寫的程式也簡單,或許你改起來會更輕鬆?

還有些小缺點... 不過目前是堪用狀態,總之先放出來給大家看,要修改請自便、發現問題歡迎幫我 debug... XD 安裝方法如下:

  1. 先到「範本>網頁元素」中插入一個「資訊提供」網頁元素,怎麼設定都行,只要來源的地方填上「http://你的blogspot網址/feeds/comments/full」就行了。建議標題直接命名為「近期迴響」。
  2. 儲存後切換到「範本>修改 HTML」處,在內容中找到你剛剛輸入的標題(近期迴響),那一整行長得應該像這樣:

    <b:widget id='Feed2' locked='false' title='近期迴響' type='Feed'/>
  3. 麻煩先把剛那段程式碼中粗體的「/>」刪掉,隨即貼上以下這段程式:

    
    >
      <b:includable id='main'>
        <h2><data:title/></h2>
        <div class='widget-content'>
        <div id='divrc'><ul expr:id='data:widget.instanceId + "_feedItemListDisplay"'>
          <b:loop values='data:feedData.items' var='i'>
            <li><b:if cond='data:showItemAuthor'>
                <b:if cond='data:i.author != ""'>
                  <span class='item-author'>
                    <data:i.author/> said:
                  </span>
                </b:if>
              </b:if>
              <span class='item-title'>
                <a expr:href='data:i.alternate.href'>
                  <data:i.title/>
                </a>
              </span>
              <b:if cond='data:showItemDate'>
                <b:if cond='data:i.str_published != ""'>
                  <span class='item-date'>
                    &#160;-&#160;<data:i.str_published/>
                  </span>
                </b:if>
              </b:if>
            </li>
          </b:loop>
        </ul></div>
        <script type='text/javascript'>
          g_iShowCount=5; //這個 5 改成你要顯示的數目
          g_szBlogDomain=&quot;blog.bobchao.net&quot;; //這邊改成你的 blogspot 網址
        </script>
        <script src='http://page.bobchao.net/rc.js' type='text/javascript'/>
        </div>
      </b:includable>
    </b:widget>
    

    記得修改程式中提到的兩個變數。

  4. 先預覽一下會比較保險,沒問題之後就可以存檔了。

這樣會引入http://page.bobchao.net/rc.js 程式碼,要 debug 請往這邊走 :)

其實原版我有些地方不太了解,像是不知道為什麼要取 id 跟排序,不過我的需求來講應該用不到就是了。GData 還有很多查詢參數,如果其提供的 JSON 都能用的話,或許我以後還會再修改一下(例如,我現在才看到有 entryID 這玩意...)