• ベストアンサー

ユーチューブをホームページに貼り付ける方法

ユーチューブで検索した結果を自分のホームページに貼り付ける方法って、 あるのでしょうか? 現在上・下2段のフレームで、下の段に抽出結果をオンタイムで表示できたら、一番好ましいんですが・・・。 もし希望する事ができたとしても、主催者側(ユーチューブ)はペナルティーを 課すことがあるのでしょうか? ご存知の方、回答をよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

<続き> まずDOC宣言 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> HTML4.0 STRICT)にしてrますが、xhtmlでもだいじょうぶそう (XHTMLにするならタグは適切に変えてください) 次に文字コード <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> GoogleAPIを素直に使うためUTF-8で作成するのが無難です。 CSS定義の部分は、とりあえずそのままコピーして、 次からがスクリプト(<head>に全scriptを定義しています) <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAAG93o66s6C1e8nCJDkjmJ0xSVVYxLupw9AvipHbcBrNMoQN8XSBRA6NK6XyYISfT41Z7mY_whiu7HMg"></script> のkeyの値は、↓からあなたのサイトのGoogleAPIキーを取得してください。(無償です) http://code.google.com/intl/ja/apis/ajaxfeeds/signup.html http://code.google.com/intl/ja/apis/maps/signup.html とか、キーはどのAPIでも共通のようです。 以下はそのままコピーしてください。 Google提供のYouTube JavaScript Player API で使うプレーヤー Swfobject2.0の準備です。フラッシュ動画も再生できます。(解説は参考サイトへ) <script type="text/javascript"> google.load("feeds", "1"); </script> <script src="http://www.google.com/jsapi"></script> <script> google.load("swfobject", "2.1"); </script> 次がjQUERYライブラリの読み込みです。 まず↓よりjQUERYのバージョン1.3.2以上をダウンロードして、ご自身の サイトに設置してください。 入手先 http://docs.jquery.com/Release:jQuery_1.3.2 設置したら、 <script type="text/javascript" charset="utf-8" src="/jslib/jquery-1.3.2.min.js"></script> を自分のサイトに合わせてsrc部分を変えて下さい。 この下のscript部分が本体ですから、そのままコピーしてください。 <script type="text/javascript" charset="utf-8"> <!-- var playseq; var pageset; $(document).ready(function(){ $("input[type='button']").click(function(){ pageset=0; Go_Search(1); }); }); function onYouTubePlayerReady(playerId) { for(var i=1;i<playseq+1;i++){ if(playerId=="ytplayer"+i){ var ytplayer = document.getElementById("myytplayer"+i); ytplayer.playVideo(); } } } function Go_Search(start){ playseq=0; var kensaku_key =document.getElementById("kensaku_key").value; var url='http://gdata.youtube.com/feeds/api/videos?'; $.ajax({ type: "GET", url:url, data:{ "vq":kensaku_key, "orderby":"relevance_lang_ja", "format":"5", "racy":"include", "alt":"json-in-script", "max-results":"25", "start-index":start }, dataType:"jsonp", success: function(data,datatype){ dataout(data); }, error:function(XMLHttpRequest, status, errorThrown){   alert(XMLHttpRequest.url + ":"+ status); } }); } function NaviMenuAdd(pageset,pages,itemPerPage){ var start=pageset*10; pages=pages+start; var nextguide=$(document.createElement("span")); for(var i=start;i<pages;i++){ var startItem = i*itemPerPage +1; var nexta =$(document.createElement("a")); nexta.attr({href:"javascript:void(0);"}); nexta.text((i+1)+"頁目"); nexta.bind("click",{start:startItem},function(event){ event.preventDefault(); Go_Search(event.data.start); }); nextguide.append(nexta); } return nextguide; } function dataout(data){ $('#Result').empty(); var hits= parseInt(data.feed.openSearch$totalResults.$t); var itemPerPage = parseInt(data.feed.openSearch$itemsPerPage.$t); var pages=(hits % itemPerPage==0)?parseInt(hits/itemPerPage):parseInt(hits/itemPerPage)+1; var currentItem = parseInt(data.feed.openSearch$startIndex.$t); var currentPage =parseInt(currentItem/itemPerPage); $('#Result').append('<hr><span><検索結果> ' + hits +'件</span>'); //Page Navigation Add var nextguide; if (pages<=10){ var pages=Math.min( (hits % itemPerPage==0)? parseInt(hits/itemPerPage): parseInt(hits/itemPerPage)+1,10); nextguide = NaviMenuAdd(pageset,pages,itemPerPage); }else{ nextguide = NaviMenuAdd(pageset,10,itemPerPage); var nextp =$(document.createElement("a")); nextp.attr({href:"javascript:void(0);"}); nextp.text(">>"); nextp.bind("click",function(event){ event.preventDefault(); pageset=pageset+1; Go_Search(pageset*10*itemPerPage+1); }); nextguide.append(nextp); if (pageset>0){ var prevp =$(document.createElement("a")); prevp.attr({href:"javascript:void(0);"}); prevp.text("<<"); prevp.bind("click",function(event){ event.preventDefault(); pageset=pageset-1; Go_Search(pageset*10*itemPerPage+1); }); nextguide.prepend(prevp); } } $('#Result').append(nextguide); $('#Result > span > a').css({margin:"5px",color:"black",background:"#cff"}); if (pageset>0){ $('#Result > span > a:eq('+ (currentPage%10+1) + ')').css("background","yellow"); }else{ $('#Result > span > a:eq('+ currentPage%10 + ')').css("background","yellow"); } //Contents Write var dl=$('<dl class="entry"></dl>'); if(data.feed.entry){ for(var i=0;i<data.feed.entry.length;i++){ var dt=$('<hr><dt><a class="playlink" href="' + data.feed.entry[i].media$group.media$content[0].url + '">' + 'No.' + (currentItem + i) + ' ' + data.feed.entry[i].title.$t + '</a></dt>'); dl.append(dt); var dd=$('<dd></dd>'); var thumbnail_img = $('<img class="thumbnail"' + 'src="' + data.feed.entry[i].media$group.media$thumbnail[0].url + '">'); dd.append(thumbnail_img); var area =$('<div></div>'); var play_area=$('<div class="playarea"></div>'); area.append(play_area); var content_area=$('<div class="content"></div>'); var content_area_str =data.feed.entry[i].content.$t + '<br>' + 'Auther : ' + data.feed.entry[i].author[0].name.$t +'<br>' + 'Updated : ' + data.feed.entry[i].updated.$t + '<br>'; if(data.feed.entry[i].yt$statistics){ content_area_str +='ViewCount : ' + data.feed.entry[i].yt$statistics.viewCount +'<br>'; } if(data.feed.entry[i].gd$rating){ content_area_str +='Rating : ' + data.feed.entry[i].gd$rating.average; } content_area.append(content_area_str); area.append(content_area); // IE CSS Hack for Floating Div height area.append('<div style="width:1px;height:1px;line-height:1px;font-size:1px;display:block;clear:both;"></div>'); dd.append(area); dl.append(dd); } $('#Result').append(dl); $("a.playlink").bind("click", function(){ var play_url=$(this).attr("href"); var target_dd=$($(this).parent("dt").get(0)).next("dd").get(0); if(!$(target_dd).attr("playseq")){ playseq=playseq+1; $(target_dd).css({height:"220px"}); $(target_dd).attr("playseq",playseq) var target_area=$(target_dd).find(".playarea").get(0); $(target_area).append('<input class="Stop_button" type="button" value="終了">'); $("input.Stop_button").bind("click", function(){ swfobject.removeSWF($(this).next().get(0).id); $($(this).parents("dd").get(0)).removeAttr("playseq"); $(($(this).parents("dd").get(0))).css("height","100%"); $($(this).parent(".playarea").get(0)).empty(); }); $(target_area).append('<div id="ytapiplayer' + playseq + '" style="margin-left:10px;">x</div>'); swfobject.embedSWF(play_url+'&color1=0x2b405b&color2=0x6b8ab6&border=1&enablejsapi=1&playerapiid=ytplayer' + playseq,"ytapiplayer"+ playseq, "250", "200", "8", null, null, {allowScriptAccess:"always"},{id:"myytplayer"+ playseq}); } return false; }); //Page Navigation Add $('#Result').append('<hr style="clear:both;">'); $('#Result').append(nextguide.clone(true)); }else{ alert("これ以上表示できません"); pageset=pageset-1; Go_Search(pageset*10*itemPerPage+1); } } // --> </script> これで動作するはずですが、本体の解説は、また機会があれば.... 補足 <script type="text/javascript"> google.load("feeds", "1"); </script> は、ごみ(不要)だったかも

参考URL:
http://code.google.com/intl/ja/apis/youtube/js_api_reference.html,http://code.google.com/p/swfobject/
hizirida
質問者

お礼

もの凄く参考になりました。 自分なり理解し作っては見たんですが、 どうしても文字化けしてしまいます。 エンコードで日本語を指定すると普通に動くんですが、 何か誤りがあるのでしょうか? 作成したソースをコピペいたします。 ご意見いただけると助かります。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP"> <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 http-equiv="Cache-Control" content="no-cache" /> <meta http-equiv="Expires" content="0" /> <title>YouTube Search</title> <style type="text/css"> <!-- body {background-color:#E0FFFF;} #Result {background-color:#cff;} #Result dl.entry {background-color:#cfc;margin-top:5px;margin-left:10px;} #Result dt {margin-top:5px;} #Result dd {margin-left:0px;} #Result dd > img.thumbnail {float:left;} #Result dd > div {margin-left:130px;} #Result dd > div > div.playarea {background-color:#cf9;float:right;height;100%;width:50%;padding-left:10px;} // --> </style> <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAA9YcQyJ3Q07UwV5nChqoxRBScuRZdM3ckXa6bfH24wvjjpfo4RRT8sE26cEGOoCtUTjLFsFMtrVbIpA"></script> <script type="text/javascript"> google.load("feeds", "1"); </script> <script src="http://www.google.com/jsapi"></script> <script> google.load("swfobject", "2.1"); </script> <script type="text/javascript" charset="utf-8" src="/douga/jquery-1.3.2.min.js"></script> <script type="text/javascript" charset="utf-8"> <!-- var playseq; var pageset; $(document).ready(function(){ $("input[type='button']").click(function(){ pageset=0; Go_Search(1); }); }); function onYouTubePlayerReady(playerId) { for(var i=1;i<playseq+1;i++){ if(playerId=="ytplayer"+i){ var ytplayer = document.getElementById("myytplayer"+i); ytplayer.playVideo(); } } } function Go_Search(start){ playseq=0; var kensaku_key =document.getElementById("kensaku_key").value;

hizirida
質問者

補足

続き01 var url='http://gdata.youtube.com/feeds/api/videos?'; $.ajax({ type: "GET", url:url, data:{ "vq":kensaku_key, "orderby":"relevance_lang_ja", "format":"5", "racy":"include", "alt":"json-in-script", "max-results":"25", "start-index":start }, dataType:"jsonp", success: function(data,datatype){ dataout(data); }, error:function(XMLHttpRequest, status, errorThrown){   alert(XMLHttpRequest.url + ":"+ status); } }); } function NaviMenuAdd(pageset,pages,itemPerPage){ var start=pageset*10; pages=pages+start; var nextguide=$(document.createElement("span")); for(var i=start;i<pages;i++){ var startItem = i*itemPerPage +1; var nexta =$(document.createElement("a")); nexta.attr({href:"javascript:void(0);"}); nexta.text((i+1)+"頁目"); nexta.bind("click",{start:startItem},function(event){ event.preventDefault(); Go_Search(event.data.start); }); nextguide.append(nexta); } return nextguide; } function dataout(data){ $('#Result').empty(); var hits= parseInt(data.feed.openSearch$totalResults.$t); var itemPerPage = parseInt(data.feed.openSearch$itemsPerPage.$t); var pages=(hits % itemPerPage==0)?parseInt(hits/itemPerPage):parseInt(hits/itemPerPage)+1; var currentItem = parseInt(data.feed.openSearch$startIndex.$t); var currentPage =parseInt(currentItem/itemPerPage); $('#Result').append('<hr><span><検索結果> ' + hits +'件</span>'); //Page Navigation Add var nextguide; if (pages<=10){ var pages=Math.min( (hits % itemPerPage==0)? parseInt(hits/itemPerPage): parseInt(hits/itemPerPage)+1,10); nextguide = NaviMenuAdd(pageset,pages,itemPerPage); }else{ nextguide = NaviMenuAdd(pageset,10,itemPerPage); var nextp =$(document.createElement("a")); nextp.attr({href:"javascript:void(0);"}); nextp.text(">>"); nextp.bind("click",function(event){ event.preventDefault(); pageset=pageset+1; Go_Search(pageset*10*itemPerPage+1); }); nextguide.append(nextp);

その他の回答 (2)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

<スクリプトをHIMLに埋め込むってことなんでしょうか?> はいそうです。HTMLだけでは困難(固定的なものならできるかもしれませんが) javascriptの埋め込みが必須です。(よってjavascriptの実行を許可してない ユーザーは無視しています。) <上部の広告はしっかり出ましたが、これは削除してよいものなのでしょうか?> 広告部分は、全く関係ありません。無視してください。私の借りてる無料サイト の制約です。 <付随する何か必要なツール?ファイル等必要なんでしょうか?> はい、jQueryライブラリーとか、GoogleAPIの利用キーとかが必用です。 (全部無償です。) 私のサンプルのHTMLの<BODY>部分は、 <body> <img src="http://www.youtube.com/img/pic_youtubelogo_123x63.gif" style="float:right"> <h3>Google YouTube Search By Google DATA API</h3> 検索キーワード:<input id="kensaku_key" type="text" style="width:30%;"> <input type="button" value="検索"> <div id="Result"></div> </body> のみです。 さらに、 検索キーワード:<input id="kensaku_key" type="text" style="width:30%;"> <input type="button" value="検索"> <div id="Result"></div> が必要な部分で、 検索キーワード:<input id="kensaku_key" type="text" style="width:30%;"> が検索キーワードを入力する部分、 <div id="Result"></div> が結果表示領域です。 これをあなたのページに組み込めるのですが、 レイアウトを崩さないようにするにはCSSも若干工夫してください サンプルのCSSは、 <style type="text/css"> <!-- body {background-color:#E0FFFF;} #Result {background-color:#cff;} #Result dl.entry {background-color:#cfc;margin-top:5px;margin-left:10px;} #Result dt {margin-top:5px;} #Result dd {margin-left:0px;} #Result dd > img.thumbnail {float:left;} #Result dd > div {margin-left:130px;} #Result dd > div > div.playarea {background-color:#cf9;float:right;height;100%;width:50%;padding-left:10px;} // --> </style> となっています。背景色や文字色はどうでもいいですが、 領域の大きさや配置を調整する時はよく考慮してください。 肝心のスクリプト部分は、汎用的なクラスライブラリー的に作っていませんが、 そのままコピーすれば、なんとか実行できると... 若干、解説を続けます。 (続く...)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

自分のサイト用のオリジナルなページにいちから実装するのは 結構ハードルが高いですよ。 ユーチューブの検索は Google DATA APIというAPIを使い、 プレーヤーもそこのPlayer APIを使っちゃいましょう。 http://code.google.com/intl/ja/apis/youtube/overview.html http://code.google.com/intl/ja/apis/youtube/reference.html に解説されてます。 肝となる処理は、 http://gdata.youtube.com/feeds/api/videos? にAJAXでGET要求して、結果をJSONでかえしてもらい、 DOM操作で結果を成形して、結果リストとplayerのコンテナーを作る。 結果リストがクリックされたら、DOM操作でコンテナー内に playerオブジェクトを作り、検索結果の動画のURL等をembedして 再生させる。 といったところです。 サンプルの余分な部分を取り去っていくともっとシンプルな形が見えてき ます。jQuery使っているから短く書けると思います。

hizirida
質問者

お礼

ご回答ありがとうございます。 記載されてますリンク先は英語で理解できませんでした。 用はスクリプトをHIMLに埋め込むってことなんでしょうか? っと思い参考サンプルを私のhtmlにそのまま埋め込んでみたんですが、 サンプルみたいに抽出できませんでした。 また、上部の広告はしっかり出ましたが、これは削除してよいものなのでしょうか? htmlやスクリプトだけの問題ではなく、付随する何か必要なツール? ファイル等必要なんでしょうか? ご回答よろしくお願いします。

関連するQ&A