原文:(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);
}
}
}

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

(c#)SKYPE API项目总结(一)的更多相关文章

  1. Web API项目中使用Area对业务进行分类管理

    在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加 ...

  2. 在ASP.NET Web API项目中使用Hangfire实现后台任务处理

    当前项目中有这样一个需求:由前端用户的一个操作,需要触发到不同设备的消息推送.由于推送这个具体功能,我们采用了第三方的服务.而这个服务调用有时候可能会有延时,为此,我们希望将消息推送与用户前端操作实现 ...

  3. C# API项目代码正确 ,页面出不来的问题

    C# API项目代码正确  页面出不来的问题,截图如下: 解决方法: 在项目里设置好[起始页],就可以了.

  4. 【WEB API项目实战干货系列】- 导航篇(十足干货分享)

    在今天移动互联网的时代,作为攻城师的我们,谁不想着只写一套API就可以让我们的Web, Android APP, IOS APP, iPad APP, Hybired APP, H5 Web共用共同的 ...

  5. 通过beego快速创建一个Restful风格API项目及API文档自动化

    通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...

  6. 【WEB API项目实战干货系列】- API登录与身份验证(三)

    上一篇: [WEB API项目实战干货系列]- 接口文档与在线测试(二) 这篇我们主要来介绍我们如何在API项目中完成API的登录及身份认证. 所以这篇会分为两部分, 登录API, API身份验证. ...

  7. 【WEB API项目实战干货系列】- 接口文档与在线测试(二)

    上一篇: [WEB API项目实战干货系列]- Web API 2入门(一) 这一篇我们主要介绍如何做API帮助文档,给API的调用人员介绍各个 API的功能, 输入参数,输出参数, 以及在线测试 A ...

  8. 你也可以玩转Skype -- 基于Skype API开发外壳程序入门

    原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...

  9. 在Docker容器中运行.Net Core web Api项目

    安装Docker环境 参考本人这篇<CentOS 7 下Docker的安装>文章进行安装以及环境配置,这里不做赘述. 通过.NetCore开发WebApi项目 1. 创建.Net Core ...

随机推荐

  1. 在CentOS下安装配置MySQL(转)

    今天刚把项目做完,需要马上部署到新到的测试服务器上,于是乎,要在服务器上安装环境,由于好久在linux上部署了,手有些生,比较费劲装完,现在把重要步骤贴出,供自己以后参照.1.首先要看看有没有已经安装 ...

  2. 每天努力一点之SQL

    今天工作当中遇到一个问题:统计信息并导出EXcel 报表. 刚开始只做了统计信息: 如下图 请看最后一列的数据. 我当时想都从数据库里取出来,但是由于我能力有限没有做出来.先贴下后来写的SQL 语句. ...

  3. 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)

    原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...

  4. hibernate它 10.many2many单向

    在前文hibernate之5.many2one单向提到多对多关系,表结构设计是基于中间表来实现, 以下以用户与角色(多对多)为例,在Hibernate是怎样操作的 表结构设计: 类图: CRUD; S ...

  5. Java误区: 静态代码块,当把类将被载入到自己主动运行?

    JAVA静态代码块会在类被载入时自己主动运行? 非常多Java开发人员的思想,被这个思想深深的轮奸了n遍,传播这个错误思想的博客,在网上一堆,越来越多的人被轮奸. 如:http://blog.csdn ...

  6. BZOJ3362 [Usaco2004 Feb]Navigation Nightmare 导航噩梦

    标题效果:自脑补. 思维:与维护两个维度和可设置为检查右. 注意,标题给予一堆关系的.我们应该加入两对关系. Code: #include <cstdio> #include <cs ...

  7. Android源代码学习之六——ActivityManager框架解析

    ActivityManager在操作系统中有关键的数据,本文利用操作系统源代码,逐步理清ActivityManager的框架,并从静态类结构图和动态序列图两个角度分别进行剖析,从而帮助开发者加强对系统 ...

  8. 《TCP/IP作品详细解释2:达到》注意事项--ARP:地址解析协议

    Net/3于ARP和实施密切与路由表相关联的,下图显示了我们的叙述性说明ARP使用样品. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVE9ERDkxMQ ...

  9. Asp.net中Postback及Callback

    我们知道,在默认的情况下,当我们点击Asp.net Page中的一个服务器Button时(默认其实是Submit Form),会导致Page被Recreated,这个过程我们称之为Postback,它 ...

  10. Java 启动线程的方式

    面试题:JAVA启动线程的方式有哪些? 1.继承Thread [java] view plaincopy public class java_thread extends Thread{ public ...