ついでに精神と時の部屋とは
自分があまり関係ないミーティング中や勉強会でコードを書くと非常に進む現象に精神と時の部屋と名付けよう。
— そーだい@初代ALFさん (@soudai1025) 2013年2月5日
のことです。
あとは電車の中とかもすごく進みますね!!
で今日はFlashが使えない端末を救う?GoogleのSwiffyについて。
FlashをSVGに変換、再生出来るようになります。
Swiffyの詳しい内容はこちらのサイトに纏まってます。
Google Swiffy 覚書
つまり
swiffyobject = {...略};
の{...略}の部分のJSONを差し替えて行けば自由にコンテンツを再生できます。
ただ元データが吐き出しが丸々のhtmlですので加工が大変です。
これを以下のPHPのバッチで加工することも出来ます ※2013/02/19現在
//Swiffyの生ファイルたちを置いた場所
$path = "old_swiffy/";
//SwiffyのJSONを抽出したfileの生成場所
$new_path = "new_swiffy/";
if ($dir = opendir("$path")) {
while (($file_name = readdir($dir)) !== false) {
if ($file_name != "." && $file_name != "..") {
make_json($file_name);
}
}
closedir($dir);
}
function make_json($file_name){
//コマンドラインで実行することを前提
//functionのスコープの外からglobalを使って参照
global $path;
global $new_path;
$file = "$path/$file_name";
//Linuxのコマンドを使って整形
$data = `head -n 10 $file | tail -n 1`;
//保存
file_put_contents($new_path . $file_name, $data);
return;
}
でもこれだとruntime.jsのバージョンが変わったりするとFlashの再変換が必要だったり、コンテンツを追加する度に手間です。
なのでサイト表示の際に自動的に抽出&runtime.jsのバージョン確認を出来るようにしました。
ここではhtmlをObjectで扱えるライブラリを使います。
simple_html_dom
英語ドキュメントが嫌な方はこちら
PHPでjQueryチックにWebサイトをクローリングする方法
こちらを使って書いたPHPのコードがこちら。
//$html_file_pathはURLでもfileのpathでも良い
function get_swiffy_data($html_file_path) {
//ライブラリの読み込み
require_once 'simple_html_dom.php';
//最新バージョンの情報を保存する場所
$swiffy_version_path = 'hoge/swiffy_version.txt';
$swiffy_version = file_get_contents($swiffy_version_path);
//simple_html_dom.phpの関数
$html_Objects = file_get_html($html_file_path);
//読み込まれるJavaScriptの抽出
$element = $html_doc->find('script', 0);
$parse_url = parse_url($element->src);
if ($swiffy_version != $parse_url['path']) {
$path_parts = pathinfo($parse_url['path']);
// 保存先フォルダの作成する。
$file_path = $path_parts['dirname'];
if (!file_exists($file_path)) {
mkdir($file_path, 0775, true);
}
file_put_contents($swiffy_version_path, $parse_url['path']);
file_put_contents($parse_url['path'], file_get_contents($element->src));
}
//読み込まれるJavaScriptの抽出
$result['js_path'] = $parse_url['path']);
//Jsonを抽出
$element = $html_doc->find('script', 1);
$result['swiffy_json'] = $element->innertext;
return $result;
}
仕組みとして最新のjs情報と比較して無かったらGoogleから取得しています。
ここでは例としてjsの最新情報をtextに保存してます。
parse_url()とpathinfo()はPHPの標準関数です。
名前の通り、それぞれURLとfileのpathを細かくparseしてくれます。
とても便利なのですがよく同じ用途でexplode()を使っているのを見かけます。
なんかの参考になればと思います。
個人的には標準関数を使ったPHPっぽい感じのコードかなと思いますw
