[VS2010] 雲端應用開發:在雲端上的噗浪機器人 (Part 1)
在筆者的這篇文章中,筆者介紹了一個使用 .NET Framework 的功能存取 Plurk API 的一個應用,這次筆者將用它來開發一個大家較感興趣的應用:噗浪機器人 (Plurk Bots),噗浪機器人是一種可以自動回應或自動散布資訊的一種常駐型應用程式,像是大家所熟知的 [羊羊騎獏姿勢佳],[邦尼妹妹] 以及 [點部落機器人] 等,都是運用 Plurk 介面開發出來的應用程式,噗浪機器人的特性就是它會定時對所屬的河道 (時間軸) 上的任何新噗或回應,以及社交的相關行為(例如加入粉絲或朋友)作出回應,讓對方以為真的有一個真人在處理這些事一樣。若想要開發一個噗浪機器人,很簡單,只要開發一個常駐程式 (通常是 Windows Service) 在電腦中執行,並定時以 Plurk API 查詢與回應指定的工作即可。
但重點來了,若是要 24 小時都在網路上常駐的話,得要準備一台永遠都連上線且不能關機的電腦,如果只是要做一個玩票性質的機器人的話,這樣的投資似乎又太高了一點(電腦硬體與電費與網路成本),若是要藉由 Web Hosting,這些 Hosting 廠商未必願意讓開發人員在主機上放置常駐程式,因此雲端平台即成為一個最佳的載具,以 Windows Azure 來說,它提供了 Worker Role 讓開發人員得以撰寫常駐程式以服務連續不中斷的要求,它就像是掛在雲端的 Windows Service 一樣。
回到正題,若要開發一個在雲端運行的機器人應用程式,必須要準備好 Windows Azure 的開發環境並註冊一個 Windows Azure 帳戶,然後在 Windows Azure 中新增一個服務:
接著,使用 Visual Studio 2010 新增一個 Windows Azure Cloud Service 應用程式專案,並加入一個 Worker Role 角色,以支援常駐式的服務程式開發:
筆者在這篇所開發的噗浪機器人,會分成好幾個部份,漸次的加入新功能,第一個版本是網路報時功能,在每個整點時,它會自動在噗浪上發送一段報時的訊息:
這段程式其實很簡單,只要在 WorkerRole.cs 中的 Run() 方法中,加入下列的程式碼:
public override void Run()
{
// This is a sample worker implementation. Replace with your logic.
Trace.WriteLine("PlurkBot entry point called", "Information");
while (true)
{
try
{
if (DateTime.Now.Minute == 0)
{
Trace.WriteLine("Plurk Bot Do Action.");
DateTime currentTime = DateTime.Now.ToUniversalTime().AddHours(8);
PlurkApiClient.User user = new PlurkApiClient.User("[YOUR_PLURK_ACCOUNT]", "[YOUR_PLURK_PASSWORD]");
user.PostPlurk(string.Format("噗浪機器人自雲端報時,現在時間:{0} 點整", currentTime.Hour),
PlurkApiClient.PlurkQualifier.FreeStyle);
user = null;
Trace.WriteLine("Plurk Bot Do Action Completed.");
}
else
Trace.WriteLine(string.Format("Current time: {0}", DateTime.Now.ToString()));
Thread.Sleep(60000);
}
catch (Exception e)
{
Trace.WriteLine(string.Format("Plurk Bot throw a exception: {0}", e.Message));
}
}
}
然後建置它,並將它部署到雲端中即可。
噗浪 API 的元件可以由這裡下載。
這段程式碼的功能,是每分鐘(Thread.Sleep(60000) 代表每分鐘)檢查一次時間,在每個整點 (整點時 DateTime.Minute 都會等於 0) 時,取得當時的時間,並轉換成 UTC 時間(因為雲端機房可能不在亞洲)再轉換成台北的時間 (UTC+8) 後,將報時的訊息張貼到噗浪中。當然這必須要有噗浪的帳戶與密碼,因此若想要試用的話,必須要註冊一組 Plurk 的帳戶。
這只是開始而已,筆者會慢慢的加入一些噗浪機器人特有的功能。