用Python构建简单的短链生成器

用Python构建简单的短链生成器

统一资源定位器(或更常见的 URL)是互联网上内容的地址。URL 通常是网页的地址,后面跟着一长串看似随机的字符。这些字符既难看又难记。幸运的是,有一种叫做 短链生成器的工具可以最大限度地减少这些字符。

短链有几个好处,包括使地址更容易分享,减少用户输入错误的可能性。即使 URL 中少了一个字符,也会使其完全无用,将用户导向错误的页面或根本不存在的资源。

https://example.com/blog-url-shorteners/48bfefiahl9adik 缩写为 https://example.com/url-shorteners 为例。不难看出,用户更容易分享哪个网址,或者哪个网址更容易导致输入错误。

短链生成器的好处不仅仅在于整理长 URL。它们还能在以下方面提供帮助:

  • 提高在搜索引擎中的排名:内容创作者、企业和初创公司的网站、博客或社交媒体上都有内容。搜索引擎更喜欢带有特定关键词的链接,这样它们就能获得相应的排名并产生良好的结果。从已知平台生成的简短 URL 可以帮助您的 URL 获得更高的排名。
  • 跟踪链接流量:Bitly 等付费短链生成服务可帮助您跟踪点击链接的用户,这样您就可以分析输入流量并相应地定制内容。

短链生成器的两种方法:Python 库和 API

按照本教程的说明,您将使用两种不同的方法用 Python 构建一个短链生成器 Web 应用程序:

pyshorteners 模块用于开发人员生成短网址,而 Bitly API 模块则生成短网址并提供更强大的功能,如每个网址的点击次数、点击网址的位置、网址的自定义等。

要完成本教程,您需要具备基本的 Python 知识,并且系统中必须安装 Python

设置项目环境

在创建短链生成器 Web 应用程序之前,您需要为项目设置环境,包括安装 Flask,这是一个轻量级框架,能让 Python 网络应用程序的开发变得更简单。

从以下步骤开始:

  • 创建一个项目文件夹,名称可以是 url-shortener
  • 在该文件夹中创建一个名为 main.py 的空文件。
  • 为该项目创建一个虚拟环境,这样任何 Python 库的安装都与系统无关。在终端中使用 python -m venv myenv 命令来创建该环境。(在这种情况下,环境文件将放在 myenv 目录中)。
  • 使用操作系统的相应命令激活虚拟环境(其中 <myenv> 是上一步创建的目录名称)。
    • Windows: <myenv>\Scripts\activate.bat
    • Linux/macOS: source <myenv>/bin/activate
  • 使用 pip install flask 命令安装 Flask。
  • 在项目文件夹中创建名为 templates 的文件夹。(Flask 将从该目录中获取 HTML 模板)。

到目前为止,您在终端中完成的工作将如下所示:

macOS 终端中的 Python 项目

macOS 终端中的 Python 项目

使用 pyshorteners 库创建短链生成 Web 应用程序

项目环境设置完成后,现在就使用 pyshorteners 库创建第一个 URL 短缩器。

使用以下命令安装 pyshorteners 库:

pip install pyshorteners

为 Web 应用程序创建基本用户界面

接下来,你将用 HTML 创建一个带有标签和输入框的基本表单,在其中输入一个长 URL 并生成一个短 URL。

在 templates 文件夹中创建 form.html 文件,然后在该文件中输入以下代码并保存:

<!DOCTYPE html>
<html lang="en">
<head>
<title>URL Shortener</title>
</head>
<body>
<h1>URL Shortener</h1>
<form method="post" action="/">
<label for="url">Enter an https:// URL:</label>
<input type="url"
name="url"
id="url"
placeholder="https://www.xyz.com"
pattern="https://.*" size="50"
value="{{old_url}}"
required  
>
<button type="submit" value="submit">Submit</button>
<br>
<label>Generated URL: </label>
<input name="generated_url" value="{{new_url}}" style="margin-top: 10px; margin-left:35px" size="50"></input>
</form>
</body>
</html>

上述代码创建了一个包含两个标签、两个输入框和一个按钮的表单。

第一个输入框名为 url,用于写入长 URL,另一个输入框用于生成短 URL。

url 输入字段具有以下属性:

  • name:用于标识元素(如 URL)
  • placeholder:显示 URL 示例
  • pattern:指定 URL 的规则,即 https://.* https://.*
  • required:在提交前输入 URL
  • value:查看旧 URL

第二个输入字段的 value 属性设置为 new_urlnew_url 是由 main.py 文件中的 pyshorteners 库生成的短 URL(如下一节所示)。

输入表单如下截图所示:

用于短链生成器的网络表单

用于短链生成器的网络表单

使用 pyshorteners 缩短 URL 代码

现在您已经创建了表单,可以使用 Python 和 pyshorteners 为其添加一些功能。

您将添加代码,将长 URL 处理为短 URL 并运行网络应用程序。导航到之前创建的 main.py 文件,输入以下代码并保存:

from flask import Flask, render_template, request
import pyshorteners
app = Flask(__name__)
@app.route("/", methods=['POST', 'GET'])
def home():
if request.method=="POST":
url_received = request.form["url"]
short_url = pyshorteners.Shortener().tinyurl.short(url_received)
return render_template("form.html", new_url=short_url, old_url=url_received)
else:
return render_template('form.html')
if __name__ == "__main__":
app.run() 

上面的代码从 Flask 框架导入了 pyshorteners 库和以下模块,所有这些都是缩短 URL 所需的:

  • Flask: Flask 框架本身,之前已经介绍过。
  • render_template: 模板渲染包,用于从 templates 文件夹中生成 HTML 文件输出。
  • request: Flask 框架中的一个对象,包含用户作为 HTTP 请求的一部分从前台发送到后台的所有数据。

接下来,它会创建一个名为 home() 的函数,该函数接收表单中提交的 URL 并输出一个简短的 URL。app.route() 装饰器用于将函数绑定到运行应用程序的特定 URL 路由,而 POST/GET 方法则用于处理请求。

home() 函数中,有一个 if-else 条件语句。

if 语句中,如果 request.method=="POST",名为 url_received 的变量将被设置为 request.form["url"],即在表单中提交的 URL。这里,url 是之前创建的 HTML 表单中定义的输入字段的名称。

然后,将名为 short_url 的变量设置为 pyshorteners.Shortener().tinyurl.short(url_received)。这里使用了 pyshorteners 库中的两个方法: .Shortener().short() 。 .Shortener() 函数创建一个 pyshorteners 类实例, .short() 函数将 URL 作为参数并将其缩短。

short() 函数 tinyurl.short()pyshorteners 库的众多 API 之一, osdb.short() 是另一个 API,也可用于相同目的。

render_template() 函数用于渲染 HTML 文件模板 form.html,并通过参数将 URL 发送回表单。new_url 参数设置为,old_url 设置为 url_receivedif 语句的作用域到此为止。

对于 else 语句,如果请求方法不是 POST,则只渲染 form.html HTML 模板。

使用 pyshorteners 库构建的短链生成器 Web 应用程序演示

要演示 pyshorteners 短链生成器应用程序,请在运行应用程序后导航到应用程序的默认路径 http://127.0.0.1:5000/

在网页表单的第一个字段中粘贴一个链接:

使用 pyshorteners 库测试短链生成器
使用 pyshorteners 库测试短链生成器

单击 Submit 按钮,在生成的 URL 字段中输出以 tinyurl 为域的短 URL:

使用 pyshorteners 库生成短链的结果

使用 pyshorteners 库生成短链的结果

使用 Bitly API 模块创建短链生成器 Web 应用程序

在本节中,您将使用 Bitly API 开发一个短链生成器应用。如前所述,Bitly API 模块是生成短链的另一种方法,它还能提供有关点击、位置和所用设备类型(如台式机或移动设备)的详细分析。

使用以下命令安装 Bitly API:

pip install bitly-api-py3

使用 Bitly API 需要访问令牌,您可以通过注册 Bitly 获得。

完成注册过程后,登录 Bitly 查看您的仪表盘:

Bitly 仪表盘

单击左侧边栏的 “Settings“,然后单击 “Developer settings” 下的 “API” 部分。

如下图所示,在 “Generate token” 按钮上方的字段中输入密码,生成访问令牌,并将令牌保留在应用程序的代码中:

为 Bitly API 生成访问令牌

为 Bitly API 生成访问令牌

使用 Bitly API 生成短链的代码

现在您已经从 Bitly 获得了令牌,可以编写网络应用程序代码,使用 Bitly API 缩短 URL。

您将使用为 pyshorteners 部分创建的相同表单,但要对 main.py 文件做一些改动:

from flask import Flask, render_template, request
import bitly_api
app = Flask(__name__)
bitly_access_token = "37b1xxxxxxxxxxxxxxxxxxxxxxxxxx"
@app.route("/", methods=['POST', 'GET'])
def home():
if request.method=="POST":
url_received = request.form["url"]
bitly = bitly_api.Connection(access_token=bitly_access_token)
short_url = bitly.shorten(url_received)
return render_template("form.html", new_url=short_url.get('url'), old_url=url_received)
else:
return render_template('form.html')
if __name__ == "__main__":
app.run() 

从上面的代码中可以看到,使用 import bitly_api 导入了 bitly_api。然后,访问令牌会保存在一个名为 bity_access_token 的变量中,如 bitly_access_token = "37b1xxxxxxxxxxxxxxxxxxxxxxxx"

home() 函数缩短了 URL 的长度,并包含一个 if-else 条件语句。

if 语句中,如果方法或请求是 POST,那么表单中提交的 URL 将被设置为 url_received 变量。

bitly_api.Connection(access_token=bitly_access_token) 函数连接到 Bitly API,并将你之前保存的访问令牌作为参数传递给它。

要缩短 URL,需要使用 bitly.shorten() 函数,将 url_received 变量作为参数传递,并将其保存到名为 short_url 的变量中。

最后,创建的表单将被渲染,并使用 render_template() 函数将 URL 发送回表单中。if 语句至此完成。

对于 else 语句,则使用 render_template() 函数渲染表单。

使用 Bitly API 构建的短链生成器 Web 应用程序演示

要演示 Bitly API URL Shortener 应用程序,请在运行应用程序后导航到应用程序的默认路径 http://127.0.0.1:5000/

将您选择的链接粘贴到网页表单的第一个字段:

使用 Bitly API 测试短链生成器

使用 Bitly API 测试短链生成器

单击 Submit,在网络应用程序的第二个字段中生成以 bit.ly 为域的短链:

使用 Bitly API 生成短链的结果

使用 Bitly API 生成短链的结果

在 Python 应用程序中使用 Bitly API 生成短链就这么简单。

小结

短链生成器可以缩短 URL,使其易于共享、看起来更整洁、占用空间更少。在本文中,您了解了短链生成器及其优点,以及如何使用 pyshorteners 和 Bitly API 用 Python 创建短链生成器 Web 应用程序。pyshorteners 库提供短网址,而 Bitly API 则提供详细的分析和短网址。

评论留言