我之所以選擇這個主題,是因為在日常做報告或工作時,常常需要擷取與分享網址。然而市面上雖然有許多線上平台能將長網址轉換成短網址,但往往充斥著廣告,甚至還存在資安上的疑慮。也因此,我萌生了自己動手開發小程式的想法,把它放在電腦上就能像 APP 一樣使用,不僅安全,也大幅提升效率。
接下來,就讓我們一起來看看如何打造專屬的** URL 短網址工具**吧!
我希望的小程式功能:
設計重點:
接下來是程式碼重點解說時間,一共會分六個項目解釋:
我們會用到 tkinter(GUI)、webbrowser(開啟網址)、json(儲存資料),並且設定好 JSON 檔案,讓程式可以下次開啟時自動載入。
import tkinter as tk
from tkinter import messagebox, simpledialog
import webbrowser
import json
import os
DATA_FILE = "short_urls.json"
短網址與原始網址的對應關係存到 url_map,並且用 JSON 檔保存。
def load_data():
if os.path.exists(DATA_FILE):
with open(DATA_FILE, "r", encoding="utf-8") as f:
return json.load(f)
return {}
def save_data():
with open(DATA_FILE, "w", encoding="utf-8") as f:
json.dump(url_map, f, ensure_ascii=False, indent=4)
url_map = load_data()
可以輸入網址並自動產生短碼,儲存後更新到 Listbox。
def add_url():
url = entry_url.get().strip()
if not url:
messagebox.showwarning("警告", "請輸入網址!")
return
short_code = f"url{len(url_map)+1}"
url_map[short_code] = {"url": url, "count": 0}
listbox.insert(tk.END, f"{short_code} -> {url}")
save_data()
entry_url.delete(0, tk.END)
從 Listbox 選取短碼,打開對應網址,並且點擊次數 +1。
def open_url():
selection = listbox.curselection()
if not selection:
messagebox.showwarning("警告", "請選擇一個短網址!")
return
short_code = listbox.get(selection[0]).split(" -> ")[0]
url_map[short_code]["count"] += 1
save_data()
webbrowser.open(url_map[short_code]["url"])
選中 Listbox 的項目後,可以刪掉該短碼紀錄。
def delete_url():
selection = listbox.curselection()
if not selection:
messagebox.showwarning("警告", "請選擇要刪除的短網址!")
return
short_code = listbox.get(selection[0]).split(" -> ")[0]
del url_map[short_code]
listbox.delete(selection[0])
save_data()
會同步刪掉 url_map 內的紀錄,Listbox 也會清除該行。
背景顏色 + 底部按鈕排版,讓整體比較像一個小 app。
root = tk.Tk()
root.title("短網址產生器")
root.geometry("500x500")
root.configure(bg="#f0f4f7")
# 輸入框
entry_url = tk.Entry(root, width=40)
entry_url.pack(pady=10)
# Listbox
listbox = tk.Listbox(root, width=50, height=15)
listbox.pack(pady=10)
# 底部按鈕
frame_buttons = tk.Frame(root, bg="#f0f4f7")
frame_buttons.pack(side=tk.BOTTOM, pady=15)
btn_add = tk.Button(frame_buttons, text="新增", command=add_url, width=10, bg="#4CAF50", fg="white")
btn_add.grid(row=0, column=0, padx=5)
btn_open = tk.Button(frame_buttons, text="開啟", command=open_url, width=10, bg="#2196F3", fg="white")
btn_open.grid(row=0, column=1, padx=5)
btn_delete = tk.Button(frame_buttons, text="刪除", command=delete_url, width=10, bg="#f44336", fg="white")
btn_delete.grid(row=0, column=2, padx=5)
root.mainloop()
輸入長連結,並點選生成短連結即可生成。
選擇我們剛剛生成的短連結,按下打開短網址鍵即開啟網頁介面。
開啟的網路介面樣式:
選擇想要在歷史紀錄中刪除的短網址,並點下刪除短網址即可刪除。
若想要搜尋曾經生成過的短網址,直接在搜尋列打下名稱便可以透過歷史紀錄中找到。
這次動手做了一個 URL 短網址小工具,過程中讓我覺得很有趣也很實用。一開始的構想只是單純能把長網址轉換成短碼,但在實作完成後,發現若只停留在最基本的功能,使用上會有些不足。於是,我又加上了「歷史紀錄欄位」和「刪除鍵」,讓使用者可以管理和清理短網址,整體操作上更接近一個小型應用程式。
原本我還想挑戰加入「自訂短碼」的功能,讓使用者能輸入自己喜歡的名稱,例如 chatgpt123,不過在測試的過程中,才發現這樣的功能其實需要搭配像 Flask 或 FastAPI 去架設一個本地 Web 伺服器,才能讓瀏覽器直接透過 "http://localhost:5000/xxx" 來存取。由於目前查到的一些完整解決方案需要額外的伺服器環境或費用,所以暫時就先擱置這個進階功能。
總結這次的實作不僅讓我更熟悉了 tkinter 的 GUI 設計,也學到了如何利用 JSON 儲存資料,讓程式下次開啟時仍能保留使用紀錄。雖然還有一些功能沒有完成,但這樣一步步嘗試與改進的過程,讓我更有動力繼續把它發展得更完整,期待下一次,能帶來更加完整、實用的版本!