我的客户拥有超过 400,000 个客户的数据库。每个客户都分配有一个 GUID。他希望我选择所有记录,创建一个动态“短 URL”,其中包含此 GUID 作为参数。然后将此短网址保存到每个客户记录的字段中。
我的第一个问题是,是否有任何 URL 缩短站点允许您像这样以编程方式即时创建短 url?
TinyUrl 允许您这样做(没有广泛记录),例如:
http://tinyurl.com/api-create.php?url=http://www.stackoverflow.com/
所以你可以有
http://tinyurl.com/api-create.php?url=http://mysite.com/user/xxxx-xxxx-xxxx-xxxx
guid 最终并没有那么清楚,但 URL 应该是唯一的
请注意,您必须通过 HTTPWebRequest 传递它并获取响应。
您可以使用 Google 的 URL 缩短器,他们有一个 API。
这是相关的文档:http ://code.google.com/apis/urlshortener/v1/getting_started.html
这个 URL 不够短:?
http://www.clientsdomain.com/?customer=267E7DDD-8D01-4F38-A3D8-DCBAA2179609
注意:我个人认为您的客户要求一些奇怪的东西。通过要求您在每个客户记录上创建一个 URL 字段(这将基于客户的 GUID 通过确定性算法),他实际上是在要求您对数据库进行非规范化。
网站使用的 URL 缩短算法非常简单:
第二步仅使用六个小写字母将为您提供当前应用程序所需的更多 (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的形式。