(c#)SKYPE API項目總結(一)

來源:互聯網
上載者:User

標籤: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);        }    }  }

這裡軟體整體的架構就出來了,後面章節再具體介紹細節的處理,軟體的全部代碼下載

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.