過去に作ったものをrhacoに置き換えてみる(psptube編)

2008.02.18 月 19:36 permalink

借りてるサーバでアクセス解析のサービスが開始されたので早速アクセス解析を眺めていたら、予想外のものがアクセストップだった。
いままではASP型のアクセス解析(Google Analyticsとか)を使っていたから全く気がつかなかった。
アクセス数ランキング
このファイルってば、むかーしPSPで直接youtubeが見れないだろうか?と試行錯誤しながら、結局PSPに入ってるFlashのバージョンが低くて使えなかったのでそのまま「youtubewall」にしたやつのパーツの一部です。

今現在は、サムネイルこそwall状に表示されますが、クリックしても再生されません。youtubeのサイト上をPHPでスクレイピングしてflvの場所を探し出し、それをFlashに渡すような仕様なのですが、youtubeのサイトが当時とは変わっているため当然その部分が動かなくなってます。
なので、これを再度動くように、Rhacoで改修してみた。

以下、その部分のソース。

<?php
include_once("__init__.php");
Rhaco::import("generic.Flow");
Rhaco::import('tag.model.SimpleTag');
Rhaco::import("network.http.Browser");
Rhaco::import("lang.StringUtil");

Rhaco::constant("YOUTUBE_BASE_URL","http://www.youtube.com/watch?v=");

$flow = new Flow();

//yutubeの個別ID(/watch?v=以降の値)を渡す
$v = $flow->getVariable("v","3vdqWQScc7Y");

//Browserでyoutube内のページを取得
$browser = new Browser();
$page = StringUtil::encoding($browser->get(YOUTUBE_BASE_URL.$v));

//SimpleTagでスクレイピング開始
$tag = new SimpleTag();
$tag->set($page);
$scripts= $tag->getIn('script');

$lines = explode("\n",$scripts[2]->getValue());
foreach($lines as $key => $value){
    if( preg_match("/additionalStatsHonorsUrl/",$value)){
        break;
    }
    if( preg_match("/swfArgs/",$value)){
        $buf = explode('=',$value);
        $search = array('@ @','@{@','@"@','@:@','@,@','@;@','@}@');
        $match  = array('','','','=','&','','');
        $data = preg_replace($search,$match,$buf[1]);
    }
}

//出力
header("Content-type: application/xml");
$flow->setVariable("parm",urlencode($data));
$flow->write("sample_template.html");
?>

テンプレートはこんな感じ。

<?xml version="1.0" encoding="utf-8"?>
<rss>
<item title="http://www.youtube.com/get_video?{$f.escape($parm)}" />
</rss>

最後の出力部分はxmlを出力したいのですが結構ひどい感じです。
Rhacoでのうまいやり方はどんな感じなんだろか?

実行した感じはこんなんです。title要素をFlashで取得してflv表示って感じですね

Related Post

Comments

Trakbacks

trackback url for this entry:http://www.planet-ape.net/archives/573/trackback