在如今的互聯網世界中,很多網址異常冗長,有的甚至長達幾百個字符。這些長鏈接不僅讓人產生視覺疲勞,而且還會給自己造成一定的危險。例如,當我們利用短信、郵件等方式將長鏈接分享給朋友時,極有可能會被電話軟件、短信軟件進行字符限制,甚至超出字符限制卻又導致鏈接截斷,從而導致鏈接無法使用或無效。這無疑會給我們帶來極大的不便。因此今天我們要介紹一個非常重要的工具——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/zh-hant/n/316369.html