ユニフォーム・リソース・ロケータ(一般的にはURLと呼ばれるもの)は、インターネット上のコンテンツの存在場所を示すアドレスです。URLには、ウェブページのアドレスの後に、一見ランダムな文字が長く続くことが多々あります。見た目が美しくなく、覚えづらいものです。これを整えるには、URL短縮ツールが使えます。
URLを短縮すると、アドレスの共有がしやすくなり、ユーザーによる不正確な情報の入力の可能性を下げるなど、いくつものメリットがあります。URLに1文字でも欠けていると、間違ったページが表示されてしまったり、そもそもページが表示されなかったりして、まったく使い物にならなくなります。
例えば、https://example.com/blog-url-shorteners/48bfefiahl9adik
をhttps://example.com/url-shorteners
と短縮した例を考えてみましょう。どちらを共有しやすいか、あるいはどちらの方がタイピング中のミスにつながりやすいかは、想像に難くありません。
URL短縮機能の強みは、長いURLを整理するだけではありません。URL短縮機能は、以下のようなあらゆることに活用することができます。
- 検索エンジンでのランキング向上:コンテンツ制作者、企業、スタートアップ企業の多くが、ウェブサイト、ブログ、SNSでコンテンツを公開しています。検索エンジンは特定のキーワードを含むリンクを好む傾向があり、それに応じてランク付けが多少変動することもあります。既知のプラットフォームから生成された短いURLは、コンテンツの上位表示を助ける要素になり得ます。
- リンクのトラフィックの追跡:Bitlyのような有料URL短縮サービスを使えば、リンクをクリックしたユーザーを追跡することができます。流入トラフィックの分析や、それに応じたコンテンツの調整に有用です。
URL短縮の2つの方法─PythonライブラリとAPI
今回の記事では、以下の2つの方法でPythonを使ったURL短縮ウェブアプリの構築を行います。
- pyshortenersライブラリ
- Bitly API
pyshortenersモジュールを開発に組み込むことで短いURLを生成することができます。一方、Bitly APIモジュールでは、短いURLを生成しながら、URLごとのクリック数、クリックされたURLの場所、URLのカスタマイズなど、付随する機能を利用可能です。
今回の説明を読み進めるには、Pythonについての基本的な知識が必要になります。また、Pythonがシステムにインストールされている必要がありますので事前にご確認ください。
プロジェクト環境のセットアップ
URL短縮ウェブアプリを作成する前に、Pythonウェブアプリの開発を容易にする軽量フレームワークであるFlaskのインストールを含め、プロジェクトの環境をセットアップしていきましょう。
以下のステップから始めます。
- url-shortenerのような名前でプロジェクトフォルダを作成します。
- そのフォルダの中にmain.pyという空のファイルを作成します。
- Pythonライブラリのインストールをシステムから独立したものにするために、プロジェクトの仮想環境を作成します。ターミナルで
python -m venv myenv
というコマンドを使って環境を構築します(この場合、環境ファイルはmyenvディレクトリに配置されることになります)。 - お使いのオペレーティングシステムに対応するコマンドを使って仮想環境を有効にします(<myenv>の部分は前のステップで作成したディレクトリの名前になります)。
- Windows:
<myenv>Scriptsactivate.bat
- Linux/macOS:
source <myenv>/bin/activate
- Windows:
- コマンド
pip install flask
を使ってFlaskをインストールします。 - プロジェクトフォルダ内にtemplatesという名前のフォルダを作成します(FlaskはこのディレクトリからHTMLテンプレートを取得することになります)。
ここまでのターミナルでの作業は以下のようになります。
pyshortenersライブラリを使用してURL短縮ウェブアプリを構築する
プロジェクトの環境が整ったので、pyshortenersライブラリを使って最初のURL短縮ツールを作成します。
以下のコマンドでpyshortenersライブラリをインストールします。
pip install pyshorteners
ウェブアプリケーションの基本的なユーザーインターフェースの作成
次に、長いURLを入力して短いURLを生成するために必要となる、ラベルと入力フィールドのある基本的なフォームをHTMLで作成します。
templatesフォルダにform.htmlファイルを作成し、そのファイルに以下のコードを入力し保存します。
<!DOCTYPE html>
<html lang="en">
<head>
<title>URL短縮ツール</title>
</head>
<body>
<h1>URLを楽々短縮</h1>
<form method="post" action="/">
<label for="url">「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">短縮実行</button>
<br>
<label>短縮後のURL</label>
<input name="generated_url" value="{{new_url}}" style="margin-top: 10px; margin-left:35px" size="50"></input>
</form>
</body>
</html>
上記のコードにより、2つのラベル、2つの入力フィールド、1つのボタンのあるフォームができます。
url
という最初の入力フィールドに長いURLを入力します。もう1つのフィールドは短いURLを生成するためのものです。
url
入力フィールドには以下の属性があります。
name
:要素(例:URL)を識別placeholder
:URLの例を示すpattern
:URLのパターンを指定する(https://.*
)required
:送信前にURLの入力を確認するvalue
:元のURLを表示する
2番目の入力フィールドはvalue
属性がnew_url
に設定されています。new_url
はmain.pyファイルからpyshortenersライブラリによって生成される短いURLです(次のセクションで説明します)。
入力フォームは以下のスクリーンショットのようになります。
pyshortenersを使ったURLの短縮
フォームができたので、Pythonとpyshortenersを使ってURL短縮の機能を追加しましょう。
長い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()
上のコードでは、pyshortenersライブラリと以下のモジュールをFlaskフレームワークからインポートしています。
Flask
:以前紹介したFlaskフレームワークそのものrender_template
:templates
フォルダからHTMLファイルの出力を生成するためのテンプレートレンダリングパッケージrequest
:ユーザーがHTTPリクエストの一部としてフロントエンドからバックエンドに送信するすべてのデータを含む、Flaskフレームワークのオブジェクト
次に、フォームで送信されたURLを受け取り、短いURLを出力するhome()
という関数を作成します。app.route()
デコレータを使用して、アプリを実行するために特定のURLルートに関数をバインドし、POST/GETメソッドでリクエストを処理します。
home()
関数の中にはif-else
条件文があります。
if
ステートメントでは、request.method=="POST"
の場合、url_received
という変数に、フォームで送信されるURLであるrequest.form["url"]
がセットされます。url
は、先に作成したHTMLフォームで定義した入力フィールドの名前になります。
次に、short_url
という変数がpyshorteners.Shortener().tinyurl.short(url_received)
にセットされます。
ここでは、pyshortenersライブラリの2つのメソッド、.Shortener()
と.short()
が使用されています。.Shortener()
関数はpyshortenersクラスのインスタンスを作成し、.short()
関数はURLを引数として受け取り、それを短縮する役割を果たします。
short()
関数であるtinyurl.short()
は、pyshortenersライブラリの数あるAPIのひとつです。osdb.short()
も同じ目的で使用することができます。
render_template()
関数は、HTMLファイルテンプレートであるform.htmlをレンダリングし、引数を通してURLをフォームに送り返すのに使われます。引数new_url
はshort_url
に、old_url
はurl_received
に設定されます。if
ステートメントのスコープはここで終了します。
else
ステートメントでは、リクエストメソッドが POST以外の場合、form.html HTMLテンプレートだけがレンダリングされます。
pyshortenersライブラリを使用したURL短縮ウェブアプリのデモ
pyshorteners URL短縮アプリケーションのデモを確認します。アプリケーションを実行した後、アプリケーションのデフォルトルートであるhttp://127.0.0.1:5000/を開いてみましょう。
ウェブフォームの最初のフィールドに好きなリンクを貼り付けます。
「短縮実行」ボタンをクリックすると、「短縮後のURL」フィールドにドメインとしてtinyurl
が入った、短いURLが出力されます。
Bitly APIモジュールを使用してURL短縮ウェブアプリを構築する
このセクションでは、Bitly APIを使用してURL短縮アプリケーションを開発します。前述したように、Bitly APIモジュールでもURLを短縮でき、クリック数、場所、使用したデバイスの種類(PCやモバイルなど)といった詳しい分析データの確認も可能です。
以下のコマンドを使用してBitly APIをインストールします。
pip install bitly-api-py3
Bitly APIを使用するにはアクセストークンが必要です。Bitlyにサインアップすることで取得できます。
サインアップ完了後、Bitlyにログインしてダッシュボードを表示します。
左サイドバーの「Settings」をクリックし、「Developer settings」の下にある「API」セクションをクリックします。
下の画像のように、「Generate token」ボタンの上のフィールドにパスワードを入力してアクセストークンを生成します。アプリのコードで使用できるようにトークンを保管しておいてください。
Bitly APIを使ったURLの短縮
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()
上のコードからわかるように、bitly_api
がimport bitly_api
を使ってインポートされます。アクセストークンはbitly_access_token = "37b1xxxxxxxxxxxxxxxxxxxxxxxx"
のようにbity_access_token
変数に保存されます。
home()
関数はURLを短縮するためのもので、if-else
条件文を含みます。
if
ステートメントでは、メソッドまたはリクエストがPOST
の場合、フォームで送信されたURLがurl_received
変数に設定されます。
bitly_api.Connection(access_token=bitly_access_token)
関数はBitly APIに接続し、先ほど保存したアクセストークンを引数として渡します。
URLを短縮するには、url_received
変数を引数として渡し、short_url
という変数に保存するかたちでbitly.shorten()
関数を使用します。
最後に、作成したフォームがレンダリングされ、render_template()
関数を使用してフォームに表示されるURLが送り返されます。これでif
ステートメントが完了します。
else
ステートメントでは、render_template()
関数を使用してフォームのレンダリングを行います。
Bitly APIを使用したURL短縮ウェブアプリのデモ
Bitly API URL 短縮アプリケーションのデモを確認するために、アプリケーションを実行した後、アプリケーションのデフォルトルートであるhttp://127.0.0.1:5000/に移動します。
ウェブフォームの最初のフィールドに任意のリンクを貼り付けます。
「短縮実行」をクリックすると、ウェブアプリケーションの2番目のフィールドにbit.ly
をドメインとする短いURL が生成されるはずです。
PythonアプリケーションとBitly APIを組み合わせて簡単にURLを短縮することができます。
まとめ
URL短縮機能を使うと、短いURLを簡単に共有でき、見た目もすっきりします。今回の記事ではURL短縮機能とその利点、そしてpyshortenersとBitly APIを使ってPythonでURL短縮ウェブアプリケーションを構築する方法をご紹介しました。pyshortenersライブラリを使えば短いURLを生成でき、Bitly APIでは短いURLの生成だけでなく詳細な分析データも確認できます。
これで便利なアプリケーションの完成です。Kinstaのウェブアプリケーションホスティングサービスを使ってさまざまなアイデアをお試しください。今回ご紹介したようなPythonアプリをKinstaのプラットフォームで稼働させるには、Flaskの活用例をご覧ください。
コメントを残す