[English]
2013-02-27 16:57 墳墓 (Brian Hsu) 花了一點時間把機器人的功能加到之前寫的,給 Scala 用的 Plurk API 2.0 的函式庫 SOPlurk 裡了。
雖然說一直都有 Scala 比起如 Java 等語言太過於複雜這樣的批評,但 Scala 真的提供了很多方便的工具給寫函式庫的人,讓設計出來的 API 變得非常容易使用,而且表達性非常強。
最讓人驚豔的,是雖然 Scala 和 Java 還有 C# 一樣是靜態型別的語言,但常常寫起來卻和 Ruby / Python 的簡潔有得拼--而且還是靜態型別,可以直接讓編譯器幫你抓一些顯而易見的錯誤等。
舉個例子而言,下面是透過 SOPlurk 的機器人介面寫出來的噗浪機器人,基本上功能是這個 Python 的版本的翻版,會接受所有的好友請求,然後當河道上新的噗文出現 hello 的時候,回應他 world。
雖然說 Python 版的裡面有很多在處理瑣碎的事情,不像 SOPlurk 把撈資料的部份都包好了,所以顯得比較冗長一點。但其實在寫這個範例之前,我沒有想到設計完後的 API 使用起來盡然可以短到這樣不像話。XD
import org.bone.soplurk.api._
import org.bone.soplurk.bot._
import org.bone.soplurk.constant._
import org.bone.soplurk.model._
val (appKey, appSecret) = ("APP_KEY", "APP_SECRET")
val (tokenKey, tokenSecret) = ("TOKEN_KEY", "TOKEN_SECRET")
val plurkBot = PlurkBot.withAccessToken(appKey, appSecret, tokenKey, tokenSecret) {
plurkAPI: PlurkAPI => {
case Alert(alertType, user, posted) => plurkAPI.Alerts.addAllAsFriends()
case RealtimeResponse(user, plurk, response) => // Ignore any response
case plurk: Plurk =>
if (plurk.content.toLowerCase contains "hello") {
plurkAPI.Responses.responseAdd(plurk.plurkID, "world", Qualifier.Says)
}
}
}
回響