« livedoorReaderすげえ | Main | 商社が商社である限り起こるジレンマ »

U2B PlayerをUpgrade、リスティング広告追加

先日気まぐれに作ってみたU2B Player(ユーチューブプレイヤーと読む)ですが、satokotoさんの「ブログパーツを探せ」をはじめ、こことかこことかこことかで紹介して頂いたり、色んなところで使って頂いたりしているようです。ありがたい。で、気が向いたのでちょっとUpgradeしてみました。既に気付いている方は気付いていると思いますが、今週からU2B Playerの下にリスティング広告(アサマシ)が表示されるようになっています。となると、アフィリエイトIDやらカテゴリーやらさらにパラメータを指定しなきゃならないので、貼り付け補助用のツール(ページ)も作ってみました。下記がそれです。

U2B Player Option Tools

指定するパラメータの解説は以下の通り。
Play Mode 

 3つのモードを指定可能。

  • top:YouTube.comのトップページで紹介されているビデオ25個を表示する。
  • favorite:「ID」で指定したユーザーのお気に入りビデオを表示する。お気に入りが25個以上の場合は26個目以降は表示しない。ID指定必須。
  • uploaded:「ID」で指定したユーザーが投稿したビデオを表示する。投稿ビデオ25個以上の場合は26個目以降は表示しない。ID指定必須。
User ID  modeが「favorite」「uploaded」のとき、ユーザーIDを指定する。
Affiliate ID AmazonのアソシエイトIDを入れる。何も入れないと私のIDになります。デフォルト設定では私のIDになっています。
Category Amazonの商品のカテゴリーから選んでください。デフォルトはDVDです。

「Show U2B Player!」ボタンを押すと画面の左側でプレビューします。アソシエイトIDがデフォルトで私のIDになっているということは何も指定しないと私にアフィリエイト口銭が落ちるわけで、無料でツール配っておいて自分の収益源にするとはふてえ野郎だ、詐欺じゃねえかって声も聞かれそうですが、それってGoogle皇帝陛下のビジネスモデルじゃん?なので、こちらで把握できた利用者様のブログにはTrack Backを貼って御連絡しておきます(本記事中にて各々の記事への言及はしておりません、すいません)。適宜皆様のアソシエイトIDに変更願います。

今回は技術的にもちょっとグダグダ述べたいところがあるのでもうちっとだけ続くんじゃ(亀仙人・談)。
リスティング広告の検索の仕組みは「YouTubeの動画をブログに貼ってAmazonアフィリエイト」と同じ。「TEDDY-G脅威のテクノロジー」を使って動画に付けられたタグの重み付けをして、重要度の高いタグによるAmazonの検索結果を表示しているだけ。TEDDY-G脅威のテクノロジーは、前回と違ってJavaScriptなのでソース見るとネタバレしますが、そっとしておいてあげてください。
さて、今回それよりも大事なのは、JavaScriptによる外部スクリプトの読み込み。いつもの通り、Amazon検索にはawsearch.jsを使ってるわけですが、JavaScriptには外部スクリプトの読み込み機能がありません。そこで、PerlのUse、PHPのinclude/requireみたいなことをするには、Scriptタグを動的に生成してappendChildするのですが、本ブログでも何度もReferしている最速インターフェース研究会さんの「JSAN構想とリモートデータの取得とUser JavaScript」にある通り、JavaScriptでは読み込み終了後に処理再開したり、読み込み完了のイベントを取得して処理したりすることができません。そこで、Google Suggestや拙作Bidders検索やU2Bplayerその他諸々のJSONネタではあらかじめ関数を var hoge=function(data) {...} の形で設定しておき、読み込まれる側のスクリプトを hoge(data)={...} の形で吐き出すことで、読み込み完了と同時に関数hogeを実行するようにしてあります。しかし、awsearch.jsのようなライブラリを読み込んで実行するにはライブラリ側に hoge(data)={...} を追加で書き込んでやる必要が生じ、あまり美しくありません。そもそも、折角のライブラリの汎用性が損なわれてしまいます。この点を先の「JSAN構想とリモートデータの取得とUser JavaScript」のサンプルスクリプトでは、setTimeoutを利用して、定期的に読み込みが完了したかチェックする関数wait()を作成し、随時監視する方法を取られています。こんな感じです。

var wait=function(func) {
    try {
        eval('check=' + func);
        if (check) {
            //読み込み完了
        } else {
            setTimeout(wait(func),100);
        }
    catch (e) {
    };
}
wait ('hoge()');

然しながら、これをそのままパクッたところ、「too much recursion」と叱られてしまいました。散々悩んだ結果、setTimeoutの代わりにsetIntervalを使うことで問題解決しました。こんな感じです。

afterLoaded=setInterval ( function () {
    try {
        X=hoge();
        //読み込み完了後に実行したい処理
        clearInterval(afterLoaded);
    } catch (e) {
    }
},100);

実際のコードの方では、ムービーやらサムネイルやらを制御するオブジェクトplayU2Bのメソッド(プロパティ)playAds()を、まずは内容空のfunctionとして定義しておき、setIntervalで指定する関数の中でputAds()をawsearch.jsを使って検索結果を取得して表示するメソッドとしてoverwriteしています。putAds()はサムネイルクリックのたびに実行するよう指定しているので、awsearch.js読み込み完了までは何も起きず、読み込みが完了すると広告が表示されるようになっています。この仕組みをうまく使うと、外部JavaScriptを一発読み込むだけでprototype.jsやscriptaculous.jsなんかも同時に読み込んで色々できるんじゃないでしょうか。

色々御託を並べましたが、U2B Playerのユーザーの方で「こういう機能が欲しい!」とか言うご要望があれば、熱が冷めないうちは対応させて戴きますので、Trackback、コメント等お寄せ下さい。ちなみに、動画をDownloadできるボタン/リンクというのは考えたんだけども面白くなさそうだからつけるのやめた。

【追記】ページ内でLightBoxのように動画をオーバーレイさせて表示させる機能を追加しました。詳細解説はこちらです。
【追記2】U2B Player読み込み完了後に、ページ内のすべてのYouTubeへのリンクを、ページ内での動画オーバーレイ表示させる機能(Link2B)を追加しました。詳細解説はこちらです。

|

「WEBサービス」カテゴリの記事

「インターネット」カテゴリの記事

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/20589/9792323

Listed below are links to weblogs that reference U2B PlayerをUpgrade、リスティング広告追加:

» もうワケが解らん! [映像ブログ携帯の旅|MHzの方舟2.01]
右→にあるYouTubeの窓を見ていただきたい。 これは私のお気に入りYouTubeリストだ。 YouTubeの会員になるとお気に入り機能があるので、これを呼び出して使えるツールを使ってで張ってみた。 http://teddy-g.cocolog-nifty.com/blog/2006/04/u2b_playerupgra_8be6.html ...... [Read More]

Tracked on 2006.07.10 at 02:09 AM

Comments

こんばんは!U2Bplayer Option Toolsはプレビューしながら作成できるのでいいですね。早速記事に追記させていただきました。

ただ、ひとつ問題が。U2Bplayer Option Toolsではしっかりプレビューできるのですが、生成されるコードではFC2では表示できませんでした。
FC2は文字コードがEUCなのでこの関係かな?と思ってcharsetをutf-8で指定してみたのですがやはり無理。以前のようにプロキシ設定を外すことで表示できましたのでお知らせしておきますね。

Posted by: satokoto | 2006.04.27 at 09:32 AM

TBありがとうございます、さっそく書き換えました。ですが、広告が表示されてませんが、なにか特定の条件時に表示されるのでしょうか?

TBに気づくのが遅かった事をお詫びします。

Posted by: rpm | 2006.05.02 at 03:11 AM

>satokotoさん
有難う御座います。貼り付け用のコードがProxyをDrk7.jpさんを指定するようになっていたので修正しました。
Drk7.jpさんのXML2JSONのサービス経由の場合、データ形式上どうしてもエラーになってしまうようです。折を見て、Drk7.jpさんにも聞いてみようと思います。

>rpmさん
広告は①Amazon検索用外部ライブラリのawsearch.jsの読み込み後、②サムネイルクリック時に表示されます。よって、最初にYoutubeのムービーとサムネイルを読んだ時点では広告を表示しません(awsearch.jsの読み込みが完了していないため)。awsearch.jsをまず読み込んでからムービー表示するようにしてもいのですが…。
また、サムネイルをクリックしても、Amazonで検索結果を拾えなかった場合も広告を表示しません。
というわけで、今のところ「控え目な」広告表示となっているのですが、変更したほうがいいですかね?

Posted by: TEDDY-G | 2006.05.02 at 10:16 AM

modeをfavoriteにするとjavaがエラーになって再生できません。
modeがtopの場合のみ正常にサムネイルされます。

あと2つがエラーになります。

Posted by: kazuki | 2006.05.30 at 08:43 AM

>kazuki様
favorite或いはupdatedの場合は、ユーザーIDもあわせて指定する必要があります。Option Toolsのほうでもインプットフォーム上でエラーを表示するようにしてあります。ご確認下さい。

Posted by: TEDDY-G | 2006.06.16 at 08:38 PM

早速使わせていただいてます。
問題なく機能はうごいております。

Posted by: kuro | 2006.07.10 at 02:20 AM

はじめまして。とても可愛くカッコいいパーツで一目で気に入りました。
早速使わせて頂いています。お気に入りで、毎日眺めては悦に入ってます。

一つだけ教えていただけたら嬉しいのですが
このパーツを取り付けてから、BLOGが重くなってしまったというか…エラーがでてしまいBLOG自体が開けなくなってしまったり、表示までに時間が物凄くかかってしまったりします。
TEDDY-GさんのこのBLOGや、ほかのユーザーさんの所ではそんな事もないようなのですが、私のトコは何故こんなに重くなってしまったり開けなくなったりしてしまうのでしょうか?

初心者な質問で申し訳ございません…
理由が分かるようでしたら教えて頂けるととてもありがたいのですが…

ちなみに
favoriteで表示数は15
使用しているBLOGはJUGEMです
U2B Player Option Toolsを使ってコードを生成して貼り付けてます。

Posted by: ちぃ | 2006.07.22 at 10:00 PM

す、すいません!!
私はドリコムブログにてU2B Playerを
置かせて頂き今までとても楽しんでいたのですが、ドリコムに新たな機能(検索機能)が追加されてからというもの、U2B Playerが表示されなくなっちゃいました!(涙)。
どうしたら良いんでしょう…教えて頂けませんか?お願い致しますm(_ _)m。

Posted by: ママちゃん | 2006.10.10 at 08:14 PM

Post a comment