• このページの主な内容

    YouTubeでは外部のプログラムから、YouTubeのコンテンツにアクセスする機能を提供しており、ホームページやブログなどから、スクリプトを使ってYouTubeにアクセスして、自動的に、ファイルが更新できるページを作ることも可能で、テストしてみました。

    APIを利用するための DEV_ID の取得方法。XML_Unserializer を使ったサンプルPHPスクリプトを公開しています。また、Ajax リクエストによるYouTubeの表示サンプルも公開しています。

    このスクリプトは、私自身と、友人へのちょっとした説明のための備忘です。

  • You Tubeについて、

    無料で利用できる動画共有サイト

    共有や、自分のブログ等に、動画を簡単に貼り付けることが出来る。

    You Tubeについてもっと詳しく知る。

  • YouTubeAPIを利用する準備

    1. DEV_IDを取得する

      APIは、DEV_IDがないと、利用することが出来ません。取得に費用はかかりませんが、少し手間がかかります。

    2. 次に、APIからのレスポンスをhtmlで表示するためのツール。

      APIのレスポンスはXML。

      レスポンスxmlを表示してみる。

      xml形式のファイルを人間が読むのは、少し味気ないのでhtmlで表示できるようにします。

      • このページでは,XML_Unserializerというクラスを使いました。
        xml形式のファイルを、読み込んでPHPで扱いやすい「配列」に格納するために使いました。

        使い方を詳しく知りたい時には、XML_Unserializer クラス概要が参考になるかもしれません。

        方法はたくさんあります。XML_Unserializerを使わないと表示できないというものではありませんから、自分がわかりやすい方法を探しましょう。

    • Remark

      XMLをパースできるツールを使うと、APIはとても簡単に利用することが出来た。

      xmlをパーすするツールは、PHPに限らず、JKL.ParseXML/ajax通信処理ライブラリもある。特別な環境がなくてもAPIクライアントを作成することが出来ると思えた。

    • 気になった点

      外部との通信が必要になる為、レスポンスに時間がかかったり、場合によっては、ブラウザに表示が出来ないといったことも発生した。
      私自身このページを公開してみて、レスポンスの劣悪さに、ガッカリしました。恐らく公開数日間はこのドキュメントをまともに閲覧できた人は、とてもラッキーな人だと思いました。

      ※ただし、このレスポンスの悪さは、Youtubeを名指しているものではなく、他のAPIも、このページで使っていた事を付け加えておきます。

    • 学んだ点

      Flashや、GoogleMapsなどの巨視ビューなどで脚光を浴びたAjaxといった非同期通信技術は、外部と通信しながら、表示する場合には、検討する必要がありそうだ。という点。 このようなことから、Ajaxを使った。YouTube API Ajax を作りましたので、ご参考まで AjaxでYouTube API

      Ajaxについてもう少し詳しく知る

      |Ajax impact| prototype| Yahoo Developer network| ZK - #1 Ajax project|

    Sample

    ※表示されている情報は、合法的なものとは限りません。テレビ等のコピーも氾濫しています。
  • XML_UnserializerでXMLを配列に格納

  • このページを表示するために、使用したスクリプト

    <?php
    require_once 'Unserializer.php';
    $xml = file_get_contents("http://www.youtube.com/api2_rest?method=youtube.videos.list_by_tag&dev_id=***********&tag=japan");
    $param = array( 'complexType' => "array", );
    $Unserializer =& new XML_Unserializer($param);
    $Unserializer->setOption('parseAttributes', TRUE);
    $status = $Unserializer->unserialize($xml);
    if (PEAR::isError($status)) {
    die($status->getMessage());
    }
    $products=$Unserializer->getUnserializedData();
    //配列の表示用
    ob_start();
    echo "<pre>";
    var_dump( $products );
    $array_view = ob_get_contents();
    ob_end_clean();
    $result = "";
    foreach($products['video_list']["video"] as $list){
    $url = $list["url"];
    $img = $list["thumbnail_url"];
    $result .="<a class=\"thumbnail-link\" href=\"$url\"><img src=\"$img\" /></a>";
    }
    print<<<htmldocument
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html lang="ja" xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml">

    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta http-equiv="content-script-type" content="text/javascript" />
    <meta http-equiv="content-style-type" content="text/css" />
    <meta name="author" content="Akio Tenman" />
    <meta name="keywords" content="youtube api test" />
    <link rev="made" href="mailto:webmaster@tenman.info" />
    <link rel="stylesheet" href="youtube.css" media="all" />
    <link rel="start" href="/" />
    <title>YOUTUBE API TEST</title>
    </head>
    <body>
    <div id="common">
    <div id="head">
    <h1 id="page_title">YouTube API TEST</h1>
    <p id="page_description">動画配信サイトYouTubeのAPI DEV_ID取得と表示まで</p>
    </div>
    <div id="youtube">
    ---ここに書き出しています---
    </div>
    <div id="foot">
    <address> </address>
    </div>
    </div>
    </body>
    </html>
    htmldocument;
    ?>