bs-url-normalizer は Go の URL 正規化パッケージです。 Momentum は自社のサービスで bs-url-normalizer を使用しています。
bs-url-normalizer では Linux と macOS 向けに C 言語から利用できる共有ライブラリを用意しています。 examples ディレクトリにいくつかの言語から bs-url-normalizer を呼び出すサンプルを作成しています。
bs-url-normalizer normalize a URL by Moementum. It is used by Momentum products.
You can generate Shared Library of bs-url-normalizer for Linux or macOS. You can see examples for some languages in examples/ directory.
NOTE: 本パッケージによる正規化はデータベースのキーなどに使うことを想定しています。正規化後のURLはブラウザ等から アクセスできない可能性があります 。ご留意ください。
正規化には第一正規化と第二正規化があります。
TODO: English
単一のWebページを表すキーとして利用できます。 正規化処理として行っているのは以下の処理となります。
- http/https schemeのhttpへの統一
- SPとPCのホスト変換 リスト参照
- パス階層での正規化
- パス末尾を
/
で統一 - 不要なクエリパラメータの除去
- クエリパラメータの順序を統一
- クエリキーの文字列の値の昇順でソートしております。
- クエリキーのsliceを引数にsort関数をかけております。
- フラグメントを削除
単一のWebサイトを表すキーとして利用できます (bakusai.com など CGM サイト等では例外があります)。 正規化処理として行っているのは以下の処理となります。
- http/https schemeのhttpへの統一
- SPとPCのホスト変換 リスト参照
- パス末尾の
/
は削除 - 指定ドメイン、指定パターン以外のパスは全て削除
- ユーザスペースは保持
- リスト参照
- クエリパラメータの除去
- 特定ドメインにおいては一部を保持
- フラグメントを削除
testdata にサンプルがありますので参照してください。
in
: 正規化前のURLを表しますn1url
: 第一正規化を表しますn2url
: 第二正規化を表します
func FirstNormalizeURL(*url.URL) string
func SecondNormalizeURL(*url.URL) string
https://play.golang.org/p/SvgzdnbV6BM
package main
import (
"net/url"
"github.com/TeamMomentum/bs-url-normalizer/lib/urls"
)
func main() {
u, _ := url.Parse("https://www.m0mentum.co.jp/ja/about.html")
n1url := urls.SecondNormalizeURL(u)
println(n1url) //=> http://www.m0mentum.co.jp
}
extern void first_normalize_url(char* src, void** result);
extern void second_normalize_url(char* src, void** result);
extern void free_normalize_url(void** result);
関数を呼び出した後は確保したメモリを解放する必要があります
You have to free a memory that is allocated by bs-url-normalizer
#include <stdio.h>
#include "libmomentum_url_normalizer.h"
int main() {
void *result;
second_normalize_url("https://www.m0mentum.co.jp/about.html", &result);
printf("%s\n", (char*)result) //=> http://www.m0mentum.co.jp;
free_normalize_url(result);
return 0;
}
Please see CONTRIBUTING.md
See the LICENSE file for license rights and limitations (Apache 2.0).