ついでに精神と時の部屋とは
自分があまり関係ないミーティング中や勉強会でコードを書くと非常に進む現象に精神と時の部屋と名付けよう。
— そーだい@初代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
0 件のコメント:
コメントを投稿