(c#)SKYPE API项目总结(一)

简介: 原文: (c#)SKYPE API项目总结(一) 这个项目的需求:SKYPE软件文字聊天同步翻译,并将翻译后的内容会发送给对方,将对方发给自己的话翻译成自己语种。
原文: (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);
        }
    }  
}

这里软件整体的框架就出来了,后面章节再具体介绍细节的处理,软件的全部代码下载

目录
相关文章
|
11月前
|
设计模式 开发框架 安全
C# 一分钟浅谈:GraphQL API 与 C#
本文介绍了 GraphQL API 的基本概念及其优势,并通过 C# 实现了一个简单的 GraphQL 服务。GraphQL 是一种高效的 API 查询语言,允许客户端精确请求所需数据,减少不必要的数据传输。文章详细讲解了如何使用 `GraphQL.NET` 库在 C# 中创建和配置 GraphQL 服务,并提供了常见问题的解决方案和代码示例。
271 4
|
开发框架 .NET API
RESTful API 设计与实现:C# 开发者的一分钟入门
【10月更文挑战第5天】本文从零开始,介绍了如何使用 C# 和 ASP.NET Core 设计并实现一个简单的 RESTful API。首先解释了 RESTful API 的概念及其核心原则,然后详细说明了设计 RESTful API 的关键步骤,包括资源识别、URI 设计、HTTP 方法选择、状态码使用和错误处理。最后,通过一个用户管理 API 的示例,演示了如何创建项目、定义模型、实现控制器及运行测试,帮助读者掌握 RESTful API 的开发技巧。
446 7
|
8月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
401 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
7月前
|
人工智能 Java API
ai-api-union项目,适配各AI厂商api
本项目旨在实现兼容各大模型厂商API的流式对话和同步对话接口,现已支持智谱、豆包、通义、通义版DeepSeek。项目地址:[https://gitee.com/alpbeta/ai-api-union](https://gitee.com/alpbeta/ai-api-union)。通过`ChatController`类暴露两个接口,入参为`ChatRequest`,包含会话ID、大模型标识符和聊天消息列表。流式对话返回`Flux&lt;String&gt;`,同步调用返回`String`
|
9月前
|
C# 开发工具 C++
code runner 运行C#项目
本文介绍了如何修改Code Runner设置使 Visual Studio Code (VS Code) 能直接运行完整的 C# 项目。传统方式依赖 cscript 工具,仅支持 .csx 文件,功能受限且已停止维护。新配置使用 `dotnet run` 命令,结合一系列炫酷的cmd指令,将指令定位到具体的csproj文件上进行运行。
462 38
|
8月前
|
自然语言处理 API 开发者
DeepSeek-Free-API:DeepSeekV3免费的api接口,需要使用api方式的同学可以参考一下这个项目,可以收藏起来试一下
嗨,大家好,我是小华同学。今天为大家介绍一个开源项目——DeepSeek V3 Free 服务。该项目基于 DeepSeek-V3 R1 大模型,提供免费、高性能的 API,支持高速流式输出、多轮对话、联网搜索和深度思考等功能。适用于智能客服、内容创作、教育辅助等场景。部署方式灵活,支持 Docker、Docker-compose、Render、Vercel 和原生部署。欢迎关注我们,获取更多优质开源项目和高效工作学习方法。
2428 15
|
C# 开发者 Windows
在VB.NET项目中使用C#编写的代码
在VB.NET项目中使用C#编写的代码
178 0
|
11月前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
332 3
|
开发框架 前端开发 API
C#/.NET/.NET Core优秀项目和框架2024年9月简报
C#/.NET/.NET Core优秀项目和框架2024年9月简报
226 1

热门文章

最新文章