Django で練習用の URL 短縮アプリケーションを開発しようとしています。長い URL ごとに一意の文字列を作成して短い URL として使用する方法がわかりません。他の一般的な URL 短縮サービスと同様です。これどうやってするの?すべての短い URL を同じ長さにすることはできますか?
6 に答える
長いURLごとに一意の文字列を作成して短縮URLとして使用する方法がわかりません。他の人気のあるURL短縮サービスのようなものがあります。
sugermanが言ったように、これは簡単です。ハッシュテーブルを作成するだけです。これどうやってするの?
これを行う動的な方法がありますが、最も簡単で最も効果的なのは、データベースに2フィールドテーブルを作成することです。このテーブルには、ハッシュキーと完全なURLが含まれています。そうすれば、Apacheのようなサーバーは、正しいページにリダイレクトすることができます。同じ長さのすべての短いURLを作成することは可能ですか?
はい、ある程度はありますが、キーの最大数に達したら、短縮URLIDを再利用/交換する必要があります。固定長を設定すると、可能性の量が制限されます。
あなたへの私の質問:
私はURL shortener
あなたがjsFiddleやpastebinのようなものを参照していると仮定していますhttp://jsfiddle.net/sdfj2/
。そうでなければ、もう少し説明が必要です。
短い値をURLにマッピングする単純なdbテーブルを作成することをお勧めします。
生成できる最も単純な短縮URLは、シリアル番号または自動インクリメント列です(最初の値1、次に2などを割り当てます)
同じ長さの値が不足しなくなるまで、同じ長さのすべてのURLを作成することができます。たとえば、数値のみを使用している場合(簡単な例として)、0000から9999になります。
魔法の部分は、mod_rewriteを使用してURLをパラメーターとしてスクリプトに渡し、アプリケーションにデータベースで値を検索させてから、ユーザーをリダイレクトする場所です。
mod_rewriteのこの書き換えルールは、example.com / 0000のようなURLを取り、example.com / index.py?id = 0000にリダイレクトします。これを.htaccessに配置します(apacheを使用していると想定しています)。
アプリケーションはIDを読み取り、関連するページにリダイレクトするだけです。
RewriteRule ^([0-9]+)/?$ index.py?id=$1 [QSA,L]
ハッシュまたは単純なbase64シリアル番号(よりコンパクトな自動インクリメント)を使用する場合は、少し異なって見えます。
RewriteRule ^(.*)/?$ index.py?id=$1 [QSA,L]
上記のリンク先のブログ記事を書きました。基本的に、私がそれを行った方法は次のとおりです。
自動インクリメント インデックス フィールドを含むテーブルに長い URL を保存します。インデックスを取得します。16 進数または 8 進数に変換するのと同じ方法で文字列に変換しますが、使用可能なすべての文字を可能な「数字」として使用します。たとえば、az、AZ、および 0-9 を使用できるとします。次のようにします。
0 = 0 1 = 1 ... 9 = 9 10 = a 11 = b ... 35 = z 36 = A 37 = B ... 60 = Z 61 = 10 62 = 11 ... 70 = 19 71 = 1a 72 = 1b
パターンがわかりますか?これは、基数 10 の数値から基数 n の数値への一般的な変換アルゴリズムです。n は自由に使用できる文字数です。
おそらく、短縮URLを生成するためのハッシュ関数を設定する必要があります。
編集:
ここに座ってかなり詳細なウィキペディアの記事を要約するのではなく、正確なトピック(URL短縮サービス)に関連してハッシュ関数がどのように機能するかを説明するブログ投稿へのリンクをここに示します。
django-shorturlsアプリを確認してください。
これが私の見解です: https://github.com/bitmazk/django-tinylinks あるクライアントは、1 年以来、これを本番環境で使用しています。