コードを舐める日々

でざいんがいいかんじです

MT4でPHPプログラムを動かす方法(youtubeサンプル)

Movabletype4を使ってあるサイトのリニューアルを図っている。
そこで今まで気がつかなかった部分があった。
MT4からブログ記事以外でウェブページの新規作成が可能になり、ウェブサイトの中にブログという記事を加えたりすることが可能になっている。
しかし、ウェブページの中に記載するのが本文のみで下記のようなPHPプログラムを記載すると変な表示になってしまう。

<?php
$name = "makotoworld";
if(isset($name)){
    echo "My name is ".$name.".";
}else{
    echo "Who are you?";
}
?>

その解決策のメモ。

MT4のダッシュボード(管理画面にログイン後ね)にあるブログ管理にて拡張子をhtmlからPHPに変換。
ただそれだけ汗
いや、他にも対処しなきゃいけないらしい汗
うちのサーバなら問題なかったがあとで書く。

これで、youtubeなどにアップしてyoutubeなどが提供しているWebAPIを利用して自動的に解析して表示するプログラムができそう。
というわけで、youtubeに自分のアカウントがあって猫や犬の動画をアップしていることを前提に、それらの動画にあったタグがつけられていることとする。(猫なら「ねこ」タグ、犬なら「いぬ」タグ)
タグによって犬チャンネル、猫チャンネルという風に表示できるプログラム。
こんな感じのプログラムを下記に書いてみる。
さっと書いたので、おかしい部分があればコメントよろしくです。

<?php
//youtube DEVID&Tag
//ここにはyoutubeにUPした時につけたタグを設定する。
define("TagNameCAT", "ねこ");
define("TagNameDog", "いぬ");
define("DEVID", "デベロッパーキー");//outubeのデベロッパーキーも取得して設定。
$channel = "makotoworld";//自分の動画を表示したいならばyoutubeのIDを入れる。

//GET
if($_GET["key"] == "" && $_GET["id"] == ""){
    channel_menu();
}elseif($_GET["id"]) != ""){
    $id = $_GET["id"];
    $key = "";
    movie_player($id);
}else{
    $key = $_GET["key"];
    $id = "";
    channelPrint($key);
}

//channel_menu関数
//youtubeのIDがmakotoworldのチャンネルに「ねこ」と「いぬ」のタグがある場合
function channel_menu(){
echo <<<EOF
<li><a href="index.php?key=1">ねこ</a></li>
<li><a href="index.php?key=2">いぬ</a></li>
EOF;
}

//GET処理関数
//GET取得した値に合わせてタグ名を割り当てる。
//GETに直接タグ名を加えたりするとなんかセキュリティ面でよくないかなと思って。
function key_select($key){
    switch($key){
        case 1:
            $key = TagNameCAT;
            break;
        case 2:
            $key = TagNameDog;
            break;
        default:
            $key = "";
            break;
    }
    return($key);
}

//youtubeAPI 動画情報処理関数
function url_code($key, $channel){
    $key = urlencode($key);
    $url = "http://gdata.youtube.com/feeds/api/videos?author=".$channel."&vq=".$key;
    $xmldata = simplexml_load_file($url);
    return($xmldata);
}

//デバッグ用関数
//デバッグに使う。
function debug_dump($str){
    echo '<table width="100%"><tr><td><pre>';
    echo var_dump($str);
    echo '</pre></td></tr></table>';
}

//youtube channelPrint関数
//指定したIDのチャンネル内のタグ内容に沿って表示
function channelPrint($str, $channel){
    $keyword = key_select($str);
    $data = url_code($keyword, $channel);
    //debug_dump($data);
    echo <<<EOF
    <a href="index.php">チャンネルいちらんへ</a><br />
    見たい内容をクリックすると見れます。<br />
EOF;
    //動画のtitle,content,img表示
    foreach ($data->entry as $entry) {
        echo $entry->title."<br />";
        $id = $entry->id;
        $id_URL = "http://gdata.youtube.com/feeds/api/videos/";
        $id = ereg_replace($id_URL, "",$id);
        echo '<a href="index.php?id='.$id.'" >';
        $img_URL = '<img src="http://img.youtube.com/vi/'.$id.'/2.jpg" width="240px" id="img"/></a>';
        echo $img_URL;
        echo $entry->content."<br />";
    }
    echo "<br />";
}

//youtubeAPI 動画プレーヤー摘出関数
function channel_code($id){
    $url = "http://gdata.youtube.com/feeds/api/videos/".$id;
    $xmldata = simplexml_load_file($url);
    return($xmldata);
}
//movie_player関数
function movie_player($id){
    //xml処理
    $data = channel_code($id);
    //player処理
    echo "<h2>".$data->title."</h2>";
    echo '<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/'.$id.'"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/'.$id.'" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object><br /><br />';
    echo $data->content."<br />";
    echo "<a href="index.php">チャンネルいちらんへ</a><br />"
}
?>