標籤:style blog class code c tar
原文: (c#)SKYPE API項目總結(一)
這個項目的需求:SKYPE軟體文字交談同步翻譯,並將翻譯後的內容會發送給對方,將對方發給自己的話翻譯成自己語種。功能見圖:
當點擊使用譯牛後,在SKYPE軟體中,會彈出上面的圖片,點擊允許後此外掛程式將可以對SKYPE進行操作,介面將變成右側圖片。
雙擊線上好友將出現聊天對話方塊:
這裡發的話,SKYPE軟體也會同步:
這個SKYPE小外掛程式主要用到微軟線上翻譯api和SKYPE API,微軟線上翻譯參考使用文檔 , skype api,執行檔案夾裡的reg.bat對此dll進行註冊後,方可使用。Skype4COM.dll的引用請參考於小章的部落格,接下來我將總結下這個小外掛程式用到的一些知識點。
1.軟體介面:
軟體介面使用的是常用的DotNetBar破解的.dll類庫的。
2.翻譯介面的使用:
利用翻譯介面進行翻譯的功能製作成了一個WebService,因為考慮到翻譯介面API裡共用一個APP_ID,首先在自己的WS中引用微軟線上翻譯的web_service.
代碼如下:
public class WS_Translate : System.Web.Services.WebService { string appId = System.Configuration.ConfigurationManager.AppSettings["Application_id"]; ServiceRefer.LanguageServiceClient client = new ServiceRefer.LanguageServiceClient();//微軟線上翻譯的web service [WebMethod(Discription="擷取翻譯結果<BR>參數:string text(要翻譯的文本), string from(該文本的語言代碼), string to(要翻譯成的目標語言代碼)<BR>返回:string (翻譯後的文本)")] public string GetTranslateResult(string text,string from,string to) { string resulte=client .Translate (appId ,text ,from,to,"text/html","general"); return resulte; } [WebMethod(Discription="返回語言代碼<BR>參數:無<BR>返回:string[]")] public string[] GetLanguagesCode() { string[] LanguagesCode = client.GetLanguagesForTranslate(appId); return LanguagesCode; } [WebMethod(Discription="根據提供的顯示語言類型,返回對應該語言的語言名稱列表。<BR>參數:string localeLanguage<BR>返回:string[]")] public string[] GetLanguage() { string[] LanguagesName = client.GetLanguageNames(appId,"zh-CHS", GetLanguagesCode());//"zh-CHS"簡體中文 return LanguagesName; } }
skype api工具類代碼如下:
namespace YiNiu{ /// <summary> /// Skype工具 /// </summary> public class SkypeTool { /// <summary> /// Skype對象 /// </summary> public Skype Skype { get; set; } /// <summary> /// 目前使用者 /// </summary> public User CurrentUser { get { try { return this.Skype.CurrentUser; } catch { return null; } } } /// <summary> /// 目前使用者的資料 /// </summary> public Profile CurrentUserProfile { get { return this.Skype.CurrentUserProfile; } } /// <summary> /// 我的語言種類 /// </summary> public String MyCode { get { return this.CurrentUser .LanguageCode ; } } /// <summary> /// 線上好友 /// </summary> public UserCollection Friends { get { return this.Skype.Friends ; } } /// <summary> /// 串連狀態 /// </summary> public TOnlineStatus Status { get { return this.Skype.CurrentUser.OnlineStatus; }} /// <summary> /// 是否Skype正在運行 /// </summary> public bool IsSkypeRunning { get { return this.Skype.Client.IsRunning; } } /// <summary> /// 訊息狀態變化時 /// </summary> public event _ISkypeEvents_MessageStatusEventHandler MessageStatus; /// <summary> /// 線上使用者狀態變化時 /// </summary> public event _ISkypeEvents_OnlineStatusEventHandler OnlineStatus; /// <summary> /// 執行個體化WebService /// </summary> public TranslateService translate = new TranslateService(ConstStrings.TRANSLATE_WEBSERVICE_URL); /// <summary> /// 建構函式 /// </summary> public SkypeTool() { this.Skype = new Skype();//執行個體化Skype對象 this.Skype.MessageStatus += new _ISkypeEvents_MessageStatusEventHandler(Skype_MessageStatus);//發送資訊和接受資訊時觸發此事件 this.Skype.OnlineStatus += new _ISkypeEvents_OnlineStatusEventHandler(Skype_OnlineStatus);//使用者線上狀態改變觸發此事件 } /// <summary> /// 返回狀態列表 /// </summary> public DataTable GetStatus() { DataTable list = new DataTable(); list.Columns.Add(new DataColumn("Display", typeof(string))); list.Columns.Add(new DataColumn("Value", typeof(string))); for (int i = 0; i < 5; i++) { list.Rows.Add(list.NewRow()); } //英文的對應是用SKYPE API讀出的連結狀態 list.Rows[0][0] = "線上"; list.Rows[1][0] = "離開"; list.Rows[4][0] = "請勿打擾"; list.Rows[2][0] = "隱藏"; list.Rows[3][0] = "離線"; list.Rows[0][1] = "Online"; list.Rows[1][1] = "Away"; list.Rows[2][1] = "Invisible"; list.Rows[3][1] = "Offline"; list.Rows[4][1] = "DND"; return list; } /// <summary> /// 返回好友名單 /// </summary> /// <returns></returns> public string[,] GetFriends() { string[,] list = new string[Skype.Friends.Count, 3]; for (int i = 0; i < Skype.Friends.Count; i++) { int index = 1; if (Skype.Friends[i + 1].FullName != "" || Skype.Friends[i + 1].DisplayName != "" || Skype.Friends[i + 1].Handle!="") { //獲得使用者線上狀態 string status=this.TextSataus ((this.Skype.get_User(Skype.Friends[i + 1].Handle.ToString()).OnlineStatus)).ToUpper(); if (status == "ONLINE") { index = 0; } if (Skype.Friends[i + 1].DisplayName != "") { list[i, 0] = Skype.Friends[i + 1].DisplayName.ToString();//使用者暱稱 } else { if (Skype.Friends[i + 1].FullName != "") { list[i, 0] = Skype.Friends[i + 1].FullName.ToString(); }//使用者暱稱 else { list[i, 0] = Skype.Friends[i + 1].Handle.ToString(); } } list[i, 1] = Skype.Friends[i + 1].Handle.ToString();//使用者名稱 list[i, 2] = index.ToString();//使用者線上狀態 } } return list; } /// <summary> /// 返回語言列表 /// </summary> /// <returns></returns> public DataTable GetToLanguage(string code) { DataTable list = new DataTable(); list.Columns.Add(new DataColumn("Display", typeof(string))); list.Columns.Add(new DataColumn("Value", typeof(string))); List<string> LanguagesName = translate.GetLanguagesName(code);//調用webService List<string> LanguagesCode = translate.GetLanguagesCode(); for (int i = 0; i < LanguagesName.Count; i++) { list.Rows.Add(list.NewRow()); list.Rows[i][0] = LanguagesName[i].ToString(); list.Rows[i][1] = LanguagesCode[i].ToString(); ; } return list; } /// <summary> /// 獲得某一使用者的語言類型 /// </summary> /// <param name="fullname"></param> /// <returns></returns> public string GetUserLanguageCode(string fullname) { return SetMycode(Skype.get_User(fullname ).LanguageCode.ToString()); } /// <summary> /// 初始化語言 /// </summary> /// <returns></returns> public string SetMycode(string code) { //在Skype中和TranslateSope中漢語的英文code不對應需要轉換 if (code == "zh-Hans" || code == "zh")//擷取sender.languageCode,漢語是ch,不分簡體和繁體 { code = "zh-CHS"; } if (code == "zh-Hant") { code = "zh-CHT"; } return code; } /// <summary> /// 建立聊天 /// </summary> /// <param name="friend">好友的使用者名稱handle</param> public IChat CreateIchat(string friend) { IChat ichat = Skype.CreateChatWith(friend); return ichat; } /// <summary> /// 狀態變化 /// </summary> /// <param name="pMessage">資訊</param> /// <param name="Status">資訊狀態</param> private void Skype_MessageStatus(ChatMessage pMessage, TChatMessageStatus Status) { if (this.MessageStatus != null) { this.MessageStatus(pMessage, Status); } } /// <summary> /// 改變使用者狀態 /// </summary> /// <param name="Status">使用者線上狀態</param> public void ChangeStatus(string Status) { this.Skype.ChangeUserStatus(Skype.Convert.TextToUserStatus(Status)); } /// <summary> /// 啟動Skype /// </summary> public bool StartSkype() { try { if (!this.Skype.Client.IsRunning) { this.Skype.Client.Start(false, true); } //添加到類,用於控制 this.Skype.Attach(5, false); return true; } catch { return false; } } /// <summary> /// 使用者狀態變化事件 /// </summary> /// <param name="pUser">使用者</param> /// <param name="Status">狀態</param> public void Skype_OnlineStatus(User pUser, TOnlineStatus Status) { if (this.OnlineStatus != null) { this.OnlineStatus(pUser, Status); } } /// <summary> /// 使用者線上狀態改變成"online"格式 /// </summary> public string TextSataus(TOnlineStatus Status) { return this.Skype.Convert.OnlineStatusToText(Status); } } }
這裡軟體整體的架構就出來了,後面章節再具體介紹細節的處理,軟體的全部代碼下載