在如今的互联网世界中,很多网址异常冗长,有的甚至长达几百个字符。这些长链接不仅让人产生视觉疲劳,而且还会给自己造成一定的危险。例如,当我们利用短信、邮件等方式将长链接分享给朋友时,极有可能会被电话软件、短信软件进行字符限制,甚至超出字符限制却又导致链接截断,从而导致链接无法使用或无效。这无疑会给我们带来极大的不便。因此今天我们要介绍一个非常重要的工具——Shortened。
一、快速有效的短链接生成
Shortened是一个快速有效的短链接生成器,只要您输入所需的原始链接,系统将在瞬间生成一个简短的链接,长度大概在5-10个字符。而这个短链接可以很好地避免原链接的瑣碎、混乱,人们可以轻松记住这些短链接,方便快速访问。
二、高可用性和稳定性
为了保证我们生成的短链接可以长期有效,Shortened将所有的链接都进行了备份处理,并且设置了多个备用节点,使得即使主节点发生故障,也能够自动切换到备用节点,确保短链接一直处于可用状态。
三、灵活的链接跟踪与数据分析
通过使用Shortened,您可以不仅仅是生成短链接,更可以为自己的链接跟踪与数据分析注入有力的“血液”。在使用Shortened的过程中,可以轻松查看自己的链接访问量,链接源头,用户访问时间,用户浏览器类型,时间分布图等相关统计数据,方便您深入分析自己链接的流量变化,以便帮助做出更好的决策。
四、主要功能实现
1. 短链接生成
def url_shortener(long_url: str) -> str:
"""转换长链接为短链接"""
# 生成随机短地址
short_url = gen_random_string()
# 保存原始长地址和短地址的对应关系
save_url_mapping(short_url, long_url)
return short_url
2. 短链接还原
def url_expand(short_url: str) -> str:
"""转换短链接为长链接"""
long_url = validate_short_url(short_url)
# 如果短链接不存在或长链接不存在则返回错误提示
if not long_url or not short_url:
return "404 Not Found"
return long_url
3. 数据统计与分析
def stats_short_url(short_url: str) -> dict:
"""获取指定短链接的访问统计信息"""
if not short_url or not is_valid_short_url(short_url):
return {}
stats = {"short_url": short_url}
url_info = REDIS_CONN.hgetall(f"url:{short_url}")
stats["long_url"] = url_info.get(b"long_url").decode("utf-8")
stats["created_at"] = url_info.get(b"created_at").decode("utf-8")
stats["visited_count"] = url_info.get(b"visited_count").decode("utf-8")
# 访问时间统计
stats["visited_time"] = defaultdict(int)
visited_time_raw = url_info.get(b"visited_time")
if visited_time_raw:
visited_time_dict = json.loads(visited_time_raw.decode("utf-8"))
for k, v in visited_time_dict.items():
stats["visited_time"][k] = v
# 浏览器类型统计
stats["user_agent"] = defaultdict(int)
user_agent_raw = url_info.get(b"user_agent")
if user_agent_raw:
user_agent_dict = json.loads(user_agent_raw.decode("utf-8"))
for k, v in user_agent_dict.items():
stats["user_agent"][k] = v
return stats
五、总结
在本文中,我们介绍了一个最简单、最实用的短链接生成器——Shortened,并介绍了它的优点和主要功能实现方式。虽然现在各种短链接服务已经比比皆是,但是自己编写一个短链接服务,您可以完全掌握短链接的生成原理,同时也能让您的业务更加灵活、更加方便。我们希望能够给各位提供一些思路和参考,同时我们欢迎大家去pull Request增加代码的可扩展性和优化。
原创文章,作者:TVLQG,如若转载,请注明出处:https://www.506064.com/n/316369.html