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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSS <div>の入れ子が反映さ...
-
Ctrl+F(検索)の窓を出したいの...
-
Flickity で画像にリンクを貼る...
-
リンクで違うページの指定箇所...
-
ウィンドウサイズを無視して、D...
-
floatさせたdivタグを折り返さ...
-
MAX関数を使ってからLEFT JOIN...
-
textareaに画像を表示したい
-
jspでcssが読み込めない
-
表示・非表示のスクリプトで、...
-
jqueryを使って無駄なspanタグ...
-
c++std::string型をTCHARに変換...
-
Javascriptで指定した日付と時...
-
JSPでの画像ファイル表示
-
デフォルト非表示にしたい。【t...
-
jqueryのsortableで一部ソート...
-
window.openで値の渡し方を教え...
-
配列の作業
-
複数枚画像を表示して一定時間...
-
div要素をランダムに表示させたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フッター上部に謎の隙間
-
CSS <div>の入れ子が反映さ...
-
オンマウス時に別画像を上に重...
-
Ctrl+F(検索)の窓を出したいの...
-
スタイルシートで画面を上下に...
-
JQuery UIを使用したドラッグ&...
-
スクロール可能なチェックボックス
-
文字を固定したいのですが…
-
floatさせたdivタグを折り返さ...
-
TABLEの高さを固定したいのですが…
-
【CSS】floatで左右に並べた...
-
すいません、このタグですが、...
-
youtubeをHPに載せたいです。
-
スライダーの枠に動画を収める...
-
メニューやヘッダー背景だけを...
-
リンクで違うページの指定箇所...
-
【html5】canvasでの文字の形の...
-
CSSを使って3カラムにしたいの...
-
positionのrelativeとabsolute...
-
左○○px、右は残りの幅(100%-左...
おすすめ情報