きらファンの「ランプの気まぐれ占い」について調査した

<作った会社>
ドリコム
Webサイトに書いてある。

<トップページ>
○JSファイル(見てもあまり面白くない)
 ・common.js…OSやUAの判定など
 ・app.common.js…デザインの調整など
 ・app.dia.js…アニメーションの処理など
  →bodyタグに付与したdata属性で処理の判別を行っている

○画面表示時の処理
・キーワード入力欄(#keyword)が空の場合は、占うボタン(#submitButton)を無効化する処理を行う
   →無効化された状態で画面を表示するようにすれば良いのでは…?
 ・btn-disabledクラスを追加して、見た目を透過させる
 ・disabledプロパティをtrueにして、操作などを無効にする
・キーワード入力欄(#keyword)に文字を入力した時の処理をセットする
 ・20字を超えた場合は、占うボタン(#submitButton)を無効化する処理を行い、警告文(<div class="caution">20文字以内で入力してください。</div>)を.input-notesに追加する
  →ログ文が残っているのはよろしくないのでは…?
  →文字入力で20字を超えるたびに処理が実行されるため、btn-disabledクラスが無限に追加されていく。これは酷い。
 ・1字以上20字以下の場合は、占うボタン(#submitButton)無効化処理をリセットして、警告文を削除する
 ・それ以外(0字以下)は、占うボタン(#submitButton)を無効化する処理を行う
・占うボタン(#submitButton)をクリックした時の処理をセットする
 ・キーワード入力欄(#keyword)の文字列を、フォーム(#frm)のinputタグ(#text)にセットする
 ・フォーム送信を行う

占うボタン(#submitButton)を無効化する処理が何度も書かれており、冗長。

○フォームについて
フォームは以下のようになっている。

<form id="frm" method="post" action="/game/kirarafantasia/dia-301-B8G/diagnosis/">
<input type="hidden" id="text" name="text">
</form>

○ユーザーシナリオ(正常系)に沿った処理の流れ
1.ユーザーがキーワードを入力
2.占うボタンをクリック
3.inputタグ(#text)に入力したキーワードがセットされる
4.フォーム送信が実行される
5.キーワードに応じた結果画面が表示される

○フォーム送信について
HTMLをいじって空文字や21字以上の文字列を送信した場合、サーバでエラー判定されるっぽい。


<結果画面>
※URLは一例

○URLについて
result以下の2つの値の法則は不明。ランダムっぽい。
 →存在しない値を入れるとトップページが表示される

○画面表示時の処理
・もう一度占うボタン(#retryButton)をクリックした時の処理をセットする
 ・トップページに遷移する
share(type)関数を定義する
 ・各結果ごとに、どのサービスでシェアされたかを集計しているっぽい。

function share(type) {
    $.ajax({
        type: "POST",
        url: '/game/kirarafantasia/dia-301-B8G/diagnosis/point/96718/' + type + '/',
        data: {},
        dataType: 'json'
    }).done(function(json) {
    });
}

ちなみに、集計用APIに投げた結果(typeはtweet)として、以下のようなJSONが返ってくる。
{"result":"1"}
本当にシンプルなJSONだ…。
typeを「test」にしてみたが同様のレスポンスが返ってきた。
done関数で何も処理をしていないあたり、固定のレスポンスを返しているのだろうか。

○占いの結果
URLは一例。
.img配下のimgタグのsrc属性から画像URLが取得できる。
パラメータが付いているが、無視できる。
テキストは.textの値だが、すでに埋め込み済みなので、
どの画像がどういうテキストなのか、という法則は見つけられず…。

以下の画像のURLを見れば分かる通り、
https://c-image.asfes.jp/zR4gfSJw/22/301/media/result_a19.jpg
各画像に番号が振られており、01〜72まで確認した。
存在しない番号を指定すると、HTTP 403が返ってくる。
全結果画像をダウンロードするPythonスクリプトを書いたので、リンクを貼っておきます。

2018/03/20 18:51、追記。
result_aというのが気になっていましたが、同様に、bとcもあるっぽい。
bは01〜79、cは01〜28。
つながりとしては、b01〜b72→c01〜c28で、
b73〜b79はきらファンのキャラクター枠。

2018/03/22 16:02、追記。
dもあった。
dは数字なしで、全員集合絵
「かわいい」で占うと表示されるらしい。

○シェアする際の処理
.tw配下のボタンをクリックした時に、以下のシェアの処理が実行される。

share('tweet');
window.open(
  'http://twitter.com/intent/tweet?text=' +
  encodeURIComponent($('#share').attr('data-text')) + 
  encodeURIComponent(' ' + $('#share').attr('data-hashtag')) +
  '&url=' + $('#share').attr('data-url')
  , 'tweetwindow'
  , 'width=550, height=450, personalbar=0, toolbar=0, scrollbars=1, resizable=1');
return false;

まず、share関数を呼んで集計用のAPIにポイントを送信。
その後、#shareの各data属性の値を使って、ツイートウィンドウを表示。

ちなみに、#shareはフォームタグ配下のinputタグである。
何故、送信していないフォームを使っているのか、inputタグにシェア情報が含まれているのか、よくわからない…。

シェアするURLは、#shareのdat-url属性の値から取得できる。
シェア画面の詳細は後述。


<シェア画面>
※URLは一例

○URLについて
・結果画面のresultshareに変わっただけ。

○画面表示時の処理
・TOPへ戻るボタン(#retryButton)をクリックした時の処理をセットする
 ・トップページに遷移する
#submitButtonをクリックした時の処理をセットする
 ・#keywordの文字列を、フォーム(#frm)のinputタグ(#text)にセットする
 ・フォーム送信を行う

#submitButton#keywordも存在しないため、2番目は記事執筆時点では意味がない処理。
#retryButtonも実際のボタン名と一致してないし、使い回し感が隠しきれていない…。

ちなみに、フォームは、トップページと同様のものが存在している。
記事執筆時点では、意味をなしていないが…。



以上です。
全体的に突貫工事だな〜という印象。

全画像見た中で未参戦なのは、
・桜Trickの一部のキャラクター
・スロウスタート
・ゆるキャン
全員すでに、公式の画像で登場済みなので、特に面白みもなく。

あとは、以下のコードが気になった。
<script src="/collect/"></script>

<script src="/collect/c/301/22/"></script>

アクセスしてもHTTP 200で何も返ってこない不思議。

コメント

このブログの人気の投稿

わたてん!(私に天使が舞い降りた!)の聖地巡礼をしてきた

2017年の百合アニメを振り返る

『うらら迷路帖』7巻の感想と、総評