65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 URL 缩短服务 – X.co

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (2投票s)

2010年9月26日

CC (Attr 3U)

9分钟阅读

viewsIcon

27717

X.co 提供的 WCF 服务以及 RESTful 接口的完整讨论

هذه المقالة متوفرة أيضا باللغة العربية، اقرأها هنا.

目录

  • 概述
  • 引言
  • API
  • WCF 服务
    • 压缩服务
    • 报告服务
  • RESTful 服务
    • 压缩服务
    • 报告服务
  • 源代码
  • 下一步

概述

这是我们 URL 缩短服务系列文章的另一篇。本文将介绍 Go Daddy 提供的 X.co 缩短服务。如果您不知道如何从您的 .NET 应用程序访问此服务,那么现在就是时候了。

我们将完整讨论 X.co 提供的 WCF 服务。然后,我们将考虑提供的 RESTful 接口。

引言

今天我们将介绍目前网络上最受欢迎的 URL 缩短服务之一;它是由 Go Daddy 提供的新的 X.co,Go Daddy 是占主导地位的域名和网络托管服务提供商。

尽管 X.co 发布仅几个月,相对较新,但它很快获得了全球用户的支持,现在它是网络上最受欢迎的缩短服务之一。尽管提供给用户的界面功能并不强大,但它提供的 API 接口确实值得称赞,因为它是目前网络上最简单但功能强大的 API(用于缩短服务)之一。

API

关于 X.co API 最引人注目的一点是,与其他 API 不同,它基于 ASP.NET 和 WCF(哇!)。此外,WCF 服务为您提供 RESTful 接口。因此,您最终会得到两个接口:一个基于 WCF,另一个是 REST Web 服务。

您可能不熟悉 WCF 或其他与 .NET 2.0 以上版本相关的较新技术,没关系,这只是名称的问题!您使用 WCF 服务的方式与使用普通 Web 服务相同。

在本文中,我们将首先讨论 X.co 提供给您的 WCF/Web 服务接口。之后,我们将看看 RESTful 接口是如何融入其中的。

在我们开始讨论之前,您需要获取 API 密钥,该密钥是所有函数进行身份验证所必需的。要获取 API 密钥,如果您还没有,请先在 http://www.godaddy.com 创建一个免费帐户。图 1 显示了注册页面。

图 1 - Go Daddy 注册页面

完成注册过程后,请访问 http://x.co,使用您的用户名和密码登录,然后转到“设置”以获取您的 API 密钥。见图 2。

图 2 - X.co API 密钥

请注意,这是一个秘密密钥,您应将其保密,防止被入侵者发现。此密钥将在您与 X.co API 的所有工作中用到。

WCF 服务

WCF 或 Web 服务,问题不大,我们就称之为 WCF 吧。我们的 X.co 服务为您提供了两个您可以访问的 WCF 服务:

Squeeze 服务只支持一个函数,用于缩短(squeeze)长 URL。实际上,Squeeze 服务还提供其他函数,但它们要么已弃用,要么仅供 Go Daddy 内部使用。另一个服务,Reporting 服务,支持与短 URL 的报告和分析(如点击次数和引用网站)相关的函数。

无论您想使用哪个服务,都必须将其引用到您的项目中。要将 Web 服务引用添加到您的项目中,您可以使用以下两种方法之一。第一种也是更好的一种方法是使用 Visual Studio。在解决方案资源管理器中右键单击项目节点下的 Web 引用节点,然后选择“添加 Web 引用”以启动“添加 Web 引用”对话框(参见图 3)。

Figure 3 - Solution Explorer - Add Web Reference

图 3 - 解决方案资源管理器 - 添加 Web 引用

“添加 Web 引用”对话框现在位于 IDE 的顶部,该对话框在 .NET 2.0 与更高版本之间可能有所不同(参见图 4 和图 5)。无论如何,输入需要添加的服务的地址,单击“转到”,以便 Visual Studio 可以读取服务描述,在“引用名称”字段中输入一个好的名称,它将作为分组服务对象的命名空间,最后单击“添加引用”。请注意,我们为 Squeeze 服务使用了名称 xcoapi,为 Reporting 服务使用了名称 xcoapirpt

Figure 4 - Add Web Reference Dialog in .NET 3.0+

图 4 - .NET 3.0+ 中的“添加 Web 引用”对话框

Figure 5 - Add Web Reference Dialog in .NET 2.0

图 5 - .NET 2.0 中的“添加 Web 引用”对话框

获取服务所需源文件的另一种方法是使用 Visual Studio 内部使用的 svcutil.exe 工具。这是一个命令行工具,用于生成 Web 服务和 WCF 服务的源文件。您可以使用此工具如下:

svcutil.exe http://api.x.co/Squeeze.svc?wsdl /language=C#
svcutil.exe http://api.x.co/Squeeze.svc?wsdl /language=VB

请注意,我们包含了服务的发现(描述)WSDL 数据的地址,以便工具可以读取它。请记住在命令行中选择您的语言。

压缩服务

我们今天讨论的第一个函数,也是 Squeeze 服务(http://api.x.co/Squeeze.svc)的唯一函数,是 Shorten() 函数,用于缩短长 URL 文件。该函数接受 2 个参数:

  • url:要缩短的长 URL
  • apiKey:用于验证调用的 API 密钥

Squeeze 服务还存在其他函数,但它们要么已弃用,要么保留供 Go Daddy 内部使用。

在确保已将服务引用添加到您的项目后(请参阅上一节),您可以开始编写代码了。以下函数接受长 URL 并返回缩短后的 URL,该 URL(在撰写本文时)不超过 16 个字符(例如:http://x.co/8Gg8)。

// C#

string Shorten(string url, string apiKey)
{
    using (xcoapi.Squeeze sq = new xcoapi.Squeeze())
    {
        return sq.Shorten(url, apiKey);
    }
}

请注意,Web 服务会消耗大量系统资源,您应该在完成工作后尽快释放它们,因此我们使用了 C# 的 using 语句。

报告服务

我们拥有的另一个服务是 Reporting 服务(http://api.x.co/Reporting.svc),它为您提供了大量的分析和报告功能,可以分为 3 个方面:

  • 点击次数(短 URL 的使用次数)
  • 引用网站(针对短 URL)
  • 按地区(城市、地区和国家)使用情况。

此服务支持 5 个函数:

  • GetTotalMapClick():返回短 URL 的总点击次数(使用次数)。
  • GetMapClicksByDates():返回在给定时间段内对短 URL 的点击次数,按天分组。
  • GetMapClicksByHour():返回今天对短 URL 的点击次数,按小时分组。
  • GetMapReferrersByDates():返回在给定时间段内对短 URL 的引用链接,按天分组。
  • GetMapLocationsByDates():返回在给定时间段内对短 URL 的点击次数,按地理位置分组。

这五个函数在很多方面都非常相似。首先,它们都接受两个必需的参数:

此外,最后四个函数的工作方式相同。它们都返回对象数组。例如,GetMapClicksByHour() 返回今天按小时分组的点击次数。每个小时都由一个对象表示,该对象包含小时数以及该小时内的点击次数,所有对象都包含在一个数组中。

其他函数 GetMapClicksByDates()GetMapReferrersByDates()GetMapLocationsByDates() 的工作方式相同,接受相同的参数,但它们另外接受四个参数,分别代表时间段的开始日期和结束日期,以及日期参数是否已设置或留空。

这四个参数如何提供帮助?您可以同时设置它们,并设置两个标志来指示我们需要一个特定的时间段。您还可以设置其中一个并设置其标志,以指示我们需要从特定日期开始,并获取直到现在的分析。请注意,您不能同时将两者都留空。

以下代码返回特定短 URL 的总点击次数。

// C#

int GetTotalClicks(string shortCode, string apiKey)
{
    using (xcoapirpt.ReportingClient rpt = new xcoapirpt.ReportingClient())
    {
        return rep.GetTotalMapClick(apiKey, shortCode);
    }
}

以下代码与上面的代码相同,只是它使用了 .NET 2.0。

// C#

int GetTotalClicks(string shortCode, string apiKey)
{
    using (xcoapirpt.Reporting rpt = new xcoapirpt.Reporting())
    {
        int totalClicks;
        bool succeeded;
        rep.GetTotalMapClick(apiKey, shortCode, out totalClicks, out succeeded);

        return succeeded ? totalClicks : -1;
    }
}

注意两个调用之间的细微差别(在 .NET 2.0 及更高版本中)。在 .NET 2.0 中,返回值被指定为输出参数。

以下代码比前面的代码要复杂一些。以下代码返回我们短 URL 的引用链接。

// C#

xcoapirpt.ReferrerEventInfo[] GetReferrers
	(string shortUrl, string apiKey, out int totalClicks)
{
    using (xcoapirpt.Reporting rep = new xcoapirpt.Reporting())
    {
        xcoapirpt.ReferrerEventInfo[] results =
            rep.GetMapReferrersByDates(apiKey, shortUrl,
                DateTime.Now - new TimeSpan(7, 0, 0, 0, 0), true, DateTime.Now, true);

        totalClicks = 0;
        foreach (xcoapirpt.ReferrerEventInfo r in results)
            totalClicks += r.TotalSpecified ? r.Total : 0;

        return results;
    }
}

请注意我们如何指定开始和结束日期参数及其标志以仅获取上周的分析。还要注意函数返回的数组类型以及我们如何使用它来获取所需信息。

RESTful 服务

如果您不想使用 WCF 服务,可以从 WCF 服务提供的 REST 接口开始。RESTful 服务是一组相关的 Web 函数,具有特定的格式;有些返回纯文本,有些返回 XML 数据,还有些返回 JSON。

请记住,WCF 服务得到 .NET 框架的原生支持,因此它们更快、更容易使用。

压缩服务

不出所料,我们的 RESTful Squeeze 服务可以通过地址 http://api.x.co/Squeeze.svc 访问。此服务有两个缩短 URL 的函数:一个为 JSON,另一个为纯文本。

返回纯文本的第一个函数可以通过以下地址调用:

http://api.x.co/Squeeze.svc/text/{apiKey}?url={url}

现在您有了地址并准备好输入,以下函数调用前面的函数来缩短长 URL:

// C#

string Shorten(string url, string apiKey)
{
    WebRequest req = HttpWebRequest.Create(
        string.Format("http://api.x.co/Squeeze.svc/text/{0}?url={1}",
        apiKey, url));

    req.Timeout = 10000; // 10 seconds

    string shortUrl;
    System.IO.Stream stm;

    stm = req.GetResponse().GetResponseStream();

    using (System.IO.StreamReader rdr = new System.IO.StreamReader(stm))
    {
        return rdr.ReadToEnd();
    }
}

报告服务

同样,Reporting 服务的地址是:http://api.x.co/Squeeze.svc。此服务提供许多与 WCF 对应版本类似的功能,但所有这些功能都是 JSON,除了一个返回纯文本。因为 JSON 不被 .NET 框架原生支持,因此需要使用其他第三方组件(例如 Json.NET),所以我们不考虑这些端点。但是,我们有返回纯文本的总点击次数函数:

// C#

int GetTotalClicks(string shortCode, string apiKey)
{
    WebRequest req = HttpWebRequest.Create(
        string.Format("http://x.co/Reporting.svc/map/{0}/{1}/total",
        apiKey, shortCode));

    req.Timeout = 10000; // 10 seconds

    System.IO.Stream stm;

    stm = req.GetResponse().GetResponseStream();

    using (System.IO.StreamReader rdr = new System.IO.StreamReader(stm))
    {
        return int.Parse(rdr.ReadToEnd());
    }
}

同样,短代码是短 URL 所必需的唯一部分,您不需要包含 http://x.co/(实际上,您不能!)。

源代码

您可以从 此处 下载源代码文件。

下一步

请继续阅读更多关于 URL 缩短服务的内容 此处

© . All rights reserved.