MAY
17

id:amachangさんによる紹介記事を読んで知ったXPathGraphを使って、自分のiKnowの学習中アイテム数と学習完了アイテム数を表示するグラフを描いてみた。木曜の1限が休講になって、ボケっとしているうちに思いついたので勢いで書いたのだが、グラフが描かれるまで待ってたのでエントリが遅くなってしまった。

さて、XPathGraphはURLで指定したデータソースに対して、1日1回XPath式を実行し、得られる数字をグラフにしてくれるというサービス。
iKnowの学習中アイテム数は、Flashで作成されたブログパーツが使用しているXMLファイルから取得できることはiKnowLastAccessTimeCheckerを書いた時に確認済。これを使えばすぐ終わるかなと考えていたのだが…、XPathGraphは困ったことに、XMLファイルを解さないらしい。XPathなのに。…XPathなのに。その訳を調べてみると、どうやらXPathGraphはXPathの処理系にHTML::TreeBuilder::XPathとかいうHTML処理用?の奴を使っているらしく、XMLでもHTMLとして処理しようとする為らしい。仕方ないのでYahoo pipesという米Yahoo!のサービスと組み合わせてみようとしたところ、今度はiKnowのXMLファイルにXML宣言が無いせいでパースエラー。/(^o^)\ナンテコッタイ

という訳で最終的にはpipeにあたるものをphpで自作。要はXMLからデータを取ってきて、HTML化すれば良いわけだから、iKnowLastAccessTimeCheckerの時と同じ要領。

<?php
function getScores($id){

    $req = 'http://www.iknow.co.jp/assets/user/' . $id . '/iknow_badge.xml';

    $iknow = @simplexml_load_file($req);
    if($iknow===false){
        echo('パースエラー');
        exit();
    }

    $studying = $iknow->history->fragment->score[0];
    $finished = $iknow->history->fragment->score[1];

    return array("studying"=>$studying, "finished"=>$finished);
}

?>

<?php
    $id = htmlspecialchars($_GET['id']);
?>

<!DOCTYPE html PUBLIC '-/W3C/DTD XHTML 1.0 Strict/EN'
    'http:/www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http:/www.w3.org/1999/xhtml' xml:lang='ja' lang='ja'>
    <head>
        <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> 
    </head>
    <body>
        <p>

<?php
    if(!empty($id) && (strpos($id,'/')===false)){
        $scores= getScores($id);
        echo('<ul>');
            echo('<li class="studying">');
                echo($scores["studying"]);
            echo('</li>');
            echo('<li class="finished">');
                echo($scores["finished"]);
            echo('</li>');
        echo('</ul>');
    }
?>

        </p>
    </body>
</html>

これをデポに設置したうえで、XPathGraphから以下のようにidをパラメータとして渡して呼び出し。

http://depot.sharplab.net/php/iknow/PipeToXPathGraph.php?id=shiroica

XPathの方はこれだけ。

//li[1]

さて、出来たグラフ。まだ二点分のデータしかない(5/17時点)けど、まぁ動作しているのが確認できる。

shiroicaのiKnow学習中アイテム数

そして学習完了アイテム数。

shiroicaのiKnow学習完了アイテム数

これで進捗状況が一目で分かるようになった。さぁがんばれ自分。