2

我的客户拥有超过 400,000 个客户的数据库。每个客户都分配有一个 GUID。他希望我选择所有记录,创建一个动态“短 URL”,其中包含此 GUID 作为参数。然后将此短网址保存到每个客户记录的字段中。

我的第一个问题是,是否有任何 URL 缩短站点允许您像这样以编程方式即时创建短 url?

4

4 回答 4

3

TinyUrl 允许您这样做(没有广泛记录),例如:

http://tinyurl.com/api-create.php?url=http://www.stackoverflow.com/

变成http://tinyurl.com/6fqmtu

所以你可以有

http://tinyurl.com/api-create.php?url=http://mysite.com/user/xxxx-xxxx-xxxx-xxxx

http://tinyurl.com/64dva66

guid 最终并没有那么清楚,但 URL 应该是唯一的

请注意,您必须通过 HTTPWebRequest 传递它并获取响应。

于 2011-03-17T22:12:33.253 回答
1

您可以使用 Google 的 URL 缩短器,他们有一个 API。

这是相关的文档:http ://code.google.com/apis/urlshortener/v1/getting_started.html

于 2011-03-17T22:05:15.253 回答
1

这个 URL 不够短:?

http://www.clientsdomain.com/?customer=267E7DDD-8D01-4F38-A3D8-DCBAA2179609

注意:我个人认为您的客户要求一些奇怪的东西。通过要求您在每个客户记录上创建一个 URL 字段(这将基于客户的 GUID 通过确定性算法),他实际上是在要求您对数据库进行非规范化。

于 2011-03-17T22:09:44.290 回答
1

网站使用的 URL 缩短算法非常简单:

  1. 存储 URL 并将其映射到它的序列号。
  2. 将序列号 (id) 转换为固定长度的字符串。

第二步仅使用六个小写字母将为您提供当前应用程序所需的更多 (24^6) 组合,并且没有什么可以阻止在某个时间点使用更大的序列。如果您允许数字和/或大写字母,您可以使用较短的序列。

转换算法是基本转换(就像转换为十六进制时一样),用任何表示零的符号填充。这是一些用于转换的 Python 代码:

LOWER = [chr(x + ord('a')) for x in range(25)]
DIGITS = [chr(x + ord('0')) for x in range(10)]
MAP = DIGITS + LOWER

def i2text(i, l):
        n = len(MAP)
        result = ''
        while i != 0:
                c = i % n
                result += MAP[c]
                i //= n
        padding = MAP[0]*l
        return (padding+result)[-l:]

print i2text(0,4)
print i2text(1,4)
print i2text(12,4)
print i2text(36,4)
print i2text(400000,4)
print i2text(1600000,4)

结果:

0000
0001
000c
0011
kib9
4b21

然后,您的 URL 将采用http://mydomain.com/myapp/short/kib9的形式。

于 2011-03-17T22:14:38.317 回答