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=ABQIAAAAG93o66s6 …
のkeyの値は、↓からあなたのサイトのGoogleAPIキーを取得してください。(無償です)
http://code.google.com/intl/ja/apis/ajaxfeeds/si …
http://code.google.com/intl/ja/apis/maps/signup. …
とか、キーはどの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_a …
この回答への補足
続き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);
もの凄く参考になりました。
自分なり理解し作っては見たんですが、
どうしても文字化けしてしまいます。
エンコードで日本語を指定すると普通に動くんですが、
何か誤りがあるのでしょうか?
作成したソースをコピペいたします。
ご意見いただけると助かります。
<!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=ABQIAAAA9YcQyJ3Q …
<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;
No.2
- 回答日時:
<スクリプトをHIMLに埋め込むってことなんでしょうか?>
はいそうです。HTMLだけでは困難(固定的なものならできるかもしれませんが)
javascriptの埋め込みが必須です。(よってjavascriptの実行を許可してない
ユーザーは無視しています。)
<上部の広告はしっかり出ましたが、これは削除してよいものなのでしょうか?>
広告部分は、全く関係ありません。無視してください。私の借りてる無料サイト
の制約です。
<付随する何か必要なツール?ファイル等必要なんでしょうか?>
はい、jQueryライブラリーとか、GoogleAPIの利用キーとかが必用です。
(全部無償です。)
私のサンプルのHTMLの<BODY>部分は、
<body>
<img src="http://www.youtube.com/img/pic_youtubelogo_123x6 … 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>
となっています。背景色や文字色はどうでもいいですが、
領域の大きさや配置を調整する時はよく考慮してください。
肝心のスクリプト部分は、汎用的なクラスライブラリー的に作っていませんが、
そのままコピーすれば、なんとか実行できると...
若干、解説を続けます。
(続く...)
No.1
- 回答日時:
自分のサイト用のオリジナルなページにいちから実装するのは
結構ハードルが高いですよ。
ユーチューブの検索は Google DATA APIというAPIを使い、
プレーヤーもそこのPlayer APIを使っちゃいましょう。
http://code.google.com/intl/ja/apis/youtube/over …
http://code.google.com/intl/ja/apis/youtube/refe …
に解説されてます。
肝となる処理は、
http://gdata.youtube.com/feeds/api/videos?
にAJAXでGET要求して、結果をJSONでかえしてもらい、
DOM操作で結果を成形して、結果リストとplayerのコンテナーを作る。
結果リストがクリックされたら、DOM操作でコンテナー内に
playerオブジェクトを作り、検索結果の動画のURL等をembedして
再生させる。
といったところです。
サンプルの余分な部分を取り去っていくともっとシンプルな形が見えてき
ます。jQuery使っているから短く書けると思います。
ご回答ありがとうございます。
記載されてますリンク先は英語で理解できませんでした。
用はスクリプトをHIMLに埋め込むってことなんでしょうか?
っと思い参考サンプルを私のhtmlにそのまま埋め込んでみたんですが、
サンプルみたいに抽出できませんでした。
また、上部の広告はしっかり出ましたが、これは削除してよいものなのでしょうか?
htmlやスクリプトだけの問題ではなく、付随する何か必要なツール?
ファイル等必要なんでしょうか?
ご回答よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 演歌・歌謡曲 聞いているだけで楽しくなるような歌を御存知の方はいますか 5 2023/01/25 20:00
- その他(IT・Webサービス) ロリポップのレンタルサーバーを借りてます。(一般的な安いプラン) 元々はホームページでも作ろうと思っ 1 2023/05/24 19:54
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- その他(悩み相談・人生相談) ユーチューブの画像をここの質問の欄に貼り付けしたいです。スマホしか持ってません。出来ますか?やり方を 1 2022/07/27 17:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- X(旧Twitter) カギをかけているツイッターの検索について教えてください。 2 2022/11/07 17:22
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- USTREAM ユーチューブに声を変えずに出されてしまいました。 2 2023/05/27 12:37
- Excel(エクセル) Excel 行の"〇" を検索して見出し(日付)を表示させたい 1 2022/04/04 18:35
- Excel(エクセル) Excel使用前提 同じフォルダ内にあるファイルの集約等をマクロでできますか 4 2022/09/06 19:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【コーディング】途中から位置...
-
divのheight指定で画面一杯に表...
-
html スクロール要素を下から表...
-
【CSS】floatで左右に並べた...
-
★★★フッター最下部固定/スクロ...
-
CSSでdivのheightを動的に
-
TABLEの高さを固定したいのですが…
-
ロールオーバーで画像拡大、z-i...
-
文字を固定したいのですが…
-
css固定したフッターが本文と重...
-
スクロール可能なチェックボックス
-
Ctrl+F(検索)の窓を出したいの...
-
離れた場所にマウスオーバーで...
-
MAX関数を使ってからLEFT JOIN...
-
embed要素のsrc属性の値を変更...
-
javascriptテキストBOX色を元に...
-
複数のバナーをリロードする度...
-
onmouseoverの表示切り替えが上...
-
onclickで画面が固まる・・・ら...
-
チェックボックスに入っている...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSS <div>の入れ子が反映さ...
-
フッター上部に謎の隙間
-
Ctrl+F(検索)の窓を出したいの...
-
【CSS】floatで左右に並べた...
-
css固定したフッターが本文と重...
-
HTMLですCSSです 画像のように...
-
htmlのstyleのposition:relativ...
-
HTMLですCSSです この画像のよ...
-
Flickity で画像にリンクを貼る...
-
画像の特定の座標にカーソルが...
-
チェックボックスの背景色って...
-
html スクロール要素を下から表...
-
レイアウトが崩れないようにす...
-
スクロール可能なチェックボックス
-
リンクで違うページの指定箇所...
-
オンマウス時に別画像を上に重...
-
フッターの下に隙間ができてしまう
-
スタイルシート(CSS)で、高さ...
-
かなり困っています。知恵を貸...
-
離れた場所にマウスオーバーで...
おすすめ情報