2009年9月27日

RSS2Blogger 開發記錄

最近很努力在搞 RSS2Blogger 搬家工具,事實上也弄出了一個試用版可以開始進行搬家作業。不過因為一開始規劃失當,加上拿別家的 rss 檔測試時出了一點小 Trouble ,所以目前重新改寫中...

本文作為開發過程中的點滴記錄...
  1. Google Data API 的版號設定很奇怪:在檔案名稱部份只編到 1.0/2.0/3.0 ,但實際上的版本設定已經到了 1.38 了。這種怪異的版本設定方式導致 Maven 很難對 GData API 的 jar 檔進行版號管理,除非在建立檔案庫時將版本號改成 xxxx-1.0-1.38.jar 這類格式。
  2. 原本的 SnipSnap 及 WordPress 這兩個 Blogger 系統都會在 RSS 檔中加入一個 <content:encoded /> 元素,但是 Blogger 只有 <description /> 元素。檢視的結果發現部份 BSP 會使用 <description /> 元素放置文章摘要,而 <content:encoded /> 則放置完整內文。
  3. 順手查了一下各 BSP 的 RSS 檔,Pixnet、Yam 有提供 <content:encoded /> 元素,Wretch 則沒有。另外補充一點是 Wretch 還特地封鎖掉諸如 wget 這類工具讀取 RSS 檔的資格,有點莫名其妙。
  4. 在設定文章的發表時間時是使用 Entry.setPublished() 這個 method,不過當用來匯入 Blogger 的 RSS 檔時會出現這麼個訊息,但問題是所傳入的日期資訊好歹也是用 GData API 內的工具去 parse 的,結果自己吐出來的東西又不吃?只能說 GData API 真偏食...
    Entry.published must have a timezone.
  5.  後來,我自行填入 TimeZone Offset 值為 0 終於通過前述考驗,不過當文章發佈出來後卻發現,時間一整個莫名其妙的不對... 發佈時間從本來的 +00:00 變成 -07:00 了... 莫名其妙嘛...
  6. 我已針對漏失 TimeZone 資訊的部份發起了一份 issue ,希望能快點確定是否為 bug !

特殊控制:因為懶的另外處理設定檔,所以某些設定可以掛在 RSS 檔內
  1. 草稿模式:預設匯入文章時會統一指定成草稿模式,不過如果患心有室肥大症,心臟比較大顆的人,可以在 RSS 檔中加入以下設定。如果是放在 channel 區段中屬於全域設定,放在 item 區段中則限該 item 有效。
    <draft>false</draft>
  2. 替換作業:原本是規劃將不需要、不正確的圖形刪除,但後續為方便處理表情符號所需,改成可執行替換方式辦理。共有三種設定型態:
    • <pattern>
        <regex><![CDATA[source string]]></regex>
        <replacement><![CDATA[replacement string]]></replacement>
      </pattern>
    • <pattern>
        <regex><![CDATA[source string]]></regex>
      </pattern>
    • <pattern><![CDATA[source string]]></pattern>
    第一種屬於原始設定方式;第二種是第一種的簡化型,其意等同於將指定字串替換成『空字串』(等於刪除功能);第三種再等於第二種的簡化型,總而言之就是懶而以。
  3. 待處理連結:主要是因應連結不正確的情形,此時一律會設定成草稿模式以利後續處理。
    <forceDraft><pattern><![CDATA[<img src="http://blog.adahsu.net/ada/[^>]*>]]></pattern></forceDraft>

逆境:基本上 RSS2Blogger 相關功能似乎已備妥,問題是偉大的 Google Data API 有每天 50 筆的限制。而且這個 50 筆限制的解除得等 24 小時候才能解除,等於每 50 篇約需花上 24.5 小時。這表示要把 13xx 筆一般文章搬到 Blogger 就要花上 54 天以上的時間...

有沒有 Blogger 討厭人家把 Blog 搬進 blogspot.com 的八卦啊?

2009年9月7日

安裝 Google Data for Java 套件庫給 Maven 使用

基本上 Google 並未替 Google Data API 建立 Maven 檔案庫,而目前 Google 到的 Maven Repository 又早已過期,所以最終只能自行下載原始檔案後再安裝到本機上的 Maven Repository 中。

Windows 下可以參考 Adding Googles GData Java API to your maven repository,如果是 Linux 的話則可以使用以下的 bash 命令稿:
#!/bin/bash

MVN=$(which mvn)

VER=1.38

for FILE in $(ls *.jar);
do
  T=$(echo $FILE | sed -e 's/\.jar$//')
  V=$(echo $T | gawk -F- '{ print $NF }')
  F=$(echo $T | sed -e 's/'$V'//' | sed -e 's/-$//')
 
  $MVN install:install-file -DgroupId=com.google.gdata \
        -DartifactId=${F} -Dversion=${V}-${VER} -Dfile=${FILE} -Dpackaging=jar \
        -DgeneratePom=true
done;

※註:我使用的版本是 1.38 版,所以設定上是會將 Google 提供的 .jar 檔改名為 -1.0-1.38.jar 之類的版號以方便 Maven 進行版號管理。