検索システム用パーツ仕様書

説明

このページでは検索システムに用いられ、なおかつ他のページでも使えるように部品化したメソッドについて記述します。新規プロジェクトが始まった場合、これ等をライブラリの様に使う事で工数を削減できるかも知れません。

下記のメソッドを使う際はhtmlブロックもしくはコードブロック等で下記のように呼び出してください。

<script type="text/javascript" src="<格納先URL>"></script>

タグを取得する

複数タグ検索システムで使用しているタグリストです。テクニカルスタッフやタグコントリビュータが随時更新しますので最新のタグを取得する事ができます。

タグリストを用いたシステムを作る際は保守すべきコードを増やさない為にも積極的に下記のリストを使用してください。

格納先URL

http://ja.scp-wiki.net/tag-search/code/1

仕様

上記のURLには連想配列によってタグを収めた変数が格納されています。この変数は下記のような構成でタグが収められています。

<実際に検索するタグ名> : <複数検索システムの検索フォーム表示名>

実際に使われているタグ名を取得する場合はキー(string型)を取得します。

上記のキー及びコンテンツはどちらもstring型です。しかしコンテンツには更に他のカテゴリに分類されたタグの連想配列のリストが収められている場合があります。この変数から全てのタグを取得する場合は下記の様な再帰処理を行う必要があります。

var TagList = new Array();//予めタグを格納する配列を作る
 
function AddTagList(AssociativeArray){
    //引数に連想配列が収められた変数を送る
    for(var i in AssociativeArray){
        if(typeof(AssociativeArray[i]) == "string"){
            //複数タグ検索システムのタグリストで現在検索している項目が
            //タグ名ならば、こちらのタグリストにタグを記入します
            TagList.push(i);
        }else{
            //現在検索している項目が更に細かい項目のリストであるならば、
            //その項目に対してこの関数を動かします。これを再帰処理と言います
            AddTagList(AssociativeArray[i]);
        }
 
    }
}
 
//下記の例は全てのタグを取得するコード
AddTagList(FirstCategory);

タグリストには下記の変数が格納されています。

  • FirstCategory
    • 全てのタグが格納
  • otherMajorTags
    • その他メジャータグが格納
  • AttributeCreature
    • 生物のアトリビュートタグが格納
  • AttributeScience
    • 科学のアトリビュートタグが格納
  • AttributeOthers
    • その他のアトリビュートタグが格納

また各変数に対して、例えば

//オブジェクトクラスのタグリストのみ取得
var targetTagCategory = FirstCategory["オブジェクトクラス"];

のようにキーを指定すれば該当のタグリストのみを取得する事ができます。どの変数のどのキー及び項目があるかの具体的な内容は複数タグ検索システムの動作を確認するか該当ページのソースコードを参照してください。
実際の使用例
野良タグ(タグリストにないタグ)検出用CSS自動生成ツール

Wikidotの構文をhtmlコードに変換する

関数名

trasrateWikidotToHtml(sentence);

SCPタイトル検索で使用しています。Wikidotの独自の構文例えば"**太字**"で太字等をhtmlのタグに変換します。ただし現時点ではリンク構文やList構文等には対応していません。

直接Wikidotのソースコードを取得して画面に表示する際の手助けになるでしょう。

格納先URL

http://ja.scp-wiki.net/scpmetatitlesearch/code/1

仕様

下記の関数を使用します。引数には文字列を送ってください。引数として渡された文字列にあるWikidotのコードをhtmlタグに変換した文字列を返します。
使用例

//Wikidot構文が含まれた文字列
var sentence = "彫刻 - **オリジナル**"
//htmlCodeにWikidotの構文をhtmlタグに変換した文字列が格納される
var htmlCode = trasrateWikidotToHtml(sentence);
 
/*
htmlCode <- 彫刻 - <b>オリジナル</b>
*/

文字列をWikidotのpagenameに変換する

関数名

replasticPageName(sentence)

SCPタイトル検索で使用しています。Wikidotでは例えばリンク先に"Kate McTiriss's Proposal"の様に記述すると自動で"kate-mctiriss-s-proposal"というpanemeへのリンク構文が生成されます。これはブラウザに直接URLを入力した時も同様です。

Wikidotはある法則に基づきURLの生成もしくは入力されたURLの変換を行いますが、この変換されたURLがWikidotで管理する正式なpagenameとなります。ここで紹介する関数は、渡された文字列をWikidotのURL生成と同じ法則で変換を行い、WikidotのURLの生成もしくはWikidotのURLへの変換を行うものです。

格納先URL

http://ja.scp-wiki.net/scpmetatitlesearch/code/1

仕様

当該の関数に文字列を引数として渡すと、WikidotのURLに変換された文字列を返します。
使用例

//スペース等が含まれるリンク先URL
var SelfishURL = "Kate McTiriss's Proposal";
//WikidotのURLに変換
var SevereURL = replasticPageName(SelfishURL);
/*
SevereURL <- kate-mctiriss-s-proposal
 
*/

文字列から該当SCPの支部等を取得する

関数名

getSCPAllBranch(targetparam)

SCP作者検索で使用しています。任意の文字列を引数として渡すと、その文字列からどの支部のSCPであるか、及び該当支部のトップページのURLを返します。

格納先URL

http://ja.scp-wiki.net/scpauthorssearch/code/3

仕様

この関数は下記の形式の返り値を返却しますのでご留意ください。

    var resultObject = {
        url:"http://www.scp-wiki.net/",
        branch:"EN"
    }

返り値の内urlプロパティからトップページのURLをbranchから支部を表す記号を取得する事ができます。それぞれの支部もしくは検索結果に応じて下記の値を返します。

使用例

//SCP-KOのナンバリング
var SearchSCP = "SCP-018-KO-J";
 
//上記のSCPから支部名等を取得
var branchData = getSCPAllBranch(SearchSCP);
 
//上記取得データを元に文章を作成
var resultSentence = SearchSCP + "はSCP-" + branchData.branch + "の作品です。\n" +
"SCP-" + branchData.branch+"のトップページは" + branchData.url + "です。";
 
/*
resultSentence <- SCP-018-KO-JはSCP-KOの作品です。\nSCP-KOのトップページはhttp://ko.scp-wiki.net/です
*/

SCP-JPもしくはSCP-JP-EXの番号かを判定する

関数名

isSCPJPRegex(upperSearch)

SCP作者検索で使用しています。任意の文字列を引数として渡すと、その文字列がSCP-JPの通常ナンバーもしくはSCP-JP-EXのナンバーであるかを判定します。

格納先URL

http://ja.scp-wiki.net/scpauthorssearch/code/3

仕様

引数に任意の文字列を送るとtrueかfalseを返します。SCP-JPの通常もしくはEXナンバーならtrueを、それ以外はfalseを返します。なお、SCP-JP-Jもfalseを返します。

この引数に送る文字列はSCPや支部符号(JP等の支部を表す文字)が大文字になっている必要があります。

使用例

//SCP通常ナンバー
var SCP001 = "SCP-001-JP";
//SCP-EXナンバー
var SCPEX001 = "SCP-001-JP-EX";
//SCP-Jナンバー
var SCPJ001 = "SCP-001-JP-J";
//他支部
var SCPKO001 = "SCP-001-KO";
 
alert(isSCPJPRegex(SCP001));//<- true
alert(isSCPJPRegex(SCPEX001));//<- true
alert(isSCPJPRegex(SCPJ001));//<- false
alert(isSCPJPRegex(SCPKO001));//<- false

SCP-JP-Jか判定する

関数名

isSCPJPJRegex(upperSearch)

SCP作者検索で使用しています。任意の文字列を引数として渡すと、その文字列がSCP-JP-Jのナンバーであるかを判定します。

格納先URL

http://ja.scp-wiki.net/scpauthorssearch/code/3

仕様

SCP-JP-Jのナンバーに対してはtrueをそれ以外にはfalseを返します。

この引数に送る文字列はSCPや支部符号(JP等の支部を表す文字)が大文字になっている必要があります。

使用例

//SCP通常ナンバー
var SCP001 = "SCP-001-JP";
//SCP-EXナンバー
var SCPEX001 = "SCP-001-JP-EX";
//SCP-Jナンバー
var SCPJ001 = "SCP-001-JP-J";
//他支部
var SCPKO001 = "SCP-001-KO";
 
alert(isSCPJPJRegex(SCP001));//<- false
alert(isSCPJPJRegex(SCPEX001));//<- false
alert(isSCPJPJRegex(SCPJ001));//<- true
alert(isSCPJPJRegex(SCPKO001));//<- false

100未満のSCP番号に対し、文頭に0を付け足す

関数名

addPrefixZeroForSCP(originalText)

SCP作者検索で使用しています。SCP-<番号>という形式が送られた時、その番号が100未満でなおかつ3文字未満の場合、3文字になるように数字を付け足します。

なおJoke記事の場合は必ずしも番号が100未満ならば3文字になるように文頭に0を付け足すという法則に則るとは限りませんのでJoke記事の場合はこの関数を動かさない様にコーディングしてください。

格納先URL

http://ja.scp-wiki.net/scpauthorssearch/code/1

仕様

SCP番号を引数として渡すと番号部を整形した文字列を返します。また数字変換が行われた場合、渡した引数のアルファベットは全て大文字になっているのでご留意ください。
使用例

//SCP-001
var CommonOne = "scp-1";
//SCP-001-EX
var ExOne = "scp-ex-1";
//SCP-001-J
var JokeOne = "scp-1-J";
//番号部が数字ではない
var JokeString = "scp-|zフ-jp-j";
 
//上記の文字列に対してそれぞれ変換を試みる
var ReCommonOne = addPrefixZeroForSCP(CommonOne);
var ReExOne = addPrefixZeroForSCP(ExOne);
var ReJokeOne = addPrefixZeroForSCP(ReJokeOne);
var ReJokeString = addPrefixZeroForSCP(JokeString);
/*
ReCommonOne <- SCP-001
ReExOne <- SCP-001-EX
ReJokeOne <- SCP-001-J
ReJokeString <- scp-|zフ-jp-j
*/

空白文字列、もしくは文字列以外の変数かを判定する

関数名

isNullOrWhiteSpace(text)

SCP作者検索で使用しています。渡された引数が空白の文字列(string)か文字列以外の変数化を判定します。ここまで紹介した関数のいくつかは引数が空白文字等であった場合エラーを起こしプログラムの動作が停止しますので、この関数と合わせて使用すると安全です。

格納先URL

http://scp-jp.wdfiles.com/local--code/scpauthorssearch/1

仕様

引数を渡した時、その引数が空白ではない文字列だった場合はfalseを、それ以外の場合はtrueを返します。
使用例

//空白ではない文字列
var fillString = "Hello";
//空白文字列
var spaceString = " ";
//文字列ではない
var NumberV = 2;
 
alert(isNullOrWhiteSpace(fillString));//<- false
alert(isNullOrWhiteSpace(spaceString));//<- true
alert(isNullOrWhiteSpace(NumberV));//<- true

パーセントエンコーディングを通常文字列にデコードする

関数名

decodeURIExtension(target);

SCPタイトル検索で使用しています。パーセントエンコーディングとはURLに全角が含まれた際に変換される、例えば"%E3%83%A1%E3"の様な文字列の事です。これを通常の文字列にデコードします。なお、下記に紹介するメソッドはyukioc氏のJavaScriptでURLをちょっと賢く解読する。 CodingFirstから拝借したものです。

格納先URL

http://ja.scp-wiki.net/scpmetatitlesearch/code/4

仕様

当該の関数にパーセントエンコーディングされた文字列が含まれた文字列を引数として送ると、それらをデコードした文字列を返します。
使用例

//パーセントエンコーディングが含まれた文字列
var encoded = "%E3%83%A1%E3%82%BF%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E5%8F%96%E5%BE%97%E3%83%86%E3%82%B9%E3%83%88";
//デコードを行う
var decoded = decodeURIExtension(encoded);
/*
decoded <- メタタイトル取得テスト
*/
特に指定がない限り、このサイトのコンテンツには次のライセンスが適用されます: Creative Commons Attribution-ShareAlike 3.0 License