ラベル YouTube Data API の投稿を表示しています。 すべての投稿を表示
ラベル YouTube Data API の投稿を表示しています。 すべての投稿を表示

2010-08-11

OpenSocial Pages は osapi.http に対応しました。gadgets.io.makeRequest 以上の大きなメリットがあります。

こんにちは。Nobuhiro Nakajima です。

OpenSocial Pages for Google Apps で osapi.http API を使えるようにしました。

osapi.http は gadgets.io.makeRequest メソッドに相当するものです。さらに osapi.http は、バッチリクエストにも対応するため、gadgets.io.makeRequest メソッド以上のメリットがあります。
  • 1回の API 呼び出しで、複数の外部サーバにまとめてリクエストできます
  • 1回の API 呼び出しで、SNS のデータと外部サーバのデータをまとめてリクエストできます
次の例は Viewer のプロフィール情報と YouTube からマイ動画のリストを、まとめて取得するものです。
function init() {
  var batch = new osapi.newBatch()
    .add('viewer', osapi.people.getViewer())
    .add('videos', osapi.http.get({
      href: 'http://gdata.youtube.com/feeds/api/users/nakajiman1/uploads?alt=json',
      format: 'json'
    }));
  batch.execute(function(r) {
    gadgets.log(r.viewer.displayName); // Nobuhiro Nakajima
    gadgets.log(r.videos.status); // 200
    gadgets.log(r.videos.content); //  Object { version="1.0",  more... }
  });
}
gadgets.setLogLevel(gadgets.log.INFO);
gadgets.util.registerOnLoadHandler(init);
従来は Viewer のプロフィール情報は opensocial.newFetchPersonRequest メソッドと gadgets.io.makeRequest メソッドを別々に呼び出して、非同期のコールバックのタイミングを制御して、レスポンスをまとめる必要がありました。

が、osapi.http を使えばそんな必要はなく、Gadgets(=Apps) のソースコードをシンプルにより分かりやすく記述することができます。

OpenSocial Pages がサポートする osapi.http のオプションやフィールドは、OpenSocial Pages ドキュメントの Core Gadgte SpecCore Data Spec に記載しておきました。

2009-08-20

opensocial-jquery と Google Gadget Editor を使って iGoogle production でガジェットを開発しよう

おはようございます。なかじまんです。

2009年8月12日 米国の iGoogle は OpenSocial に正式対応しました。残念ながら日本はまだですが、近いうちに対応することが予想できます。なので、今後 iGoogle に向けた OpenSocial ガジェット (アプリ) の開発も広がってくるでしょう。

もちろん opensocial-jquery も iGoogle を熱烈サポートしていきます。なんたって最終的には全世界がターゲットになるのですからね。そこで iGoogle を使った opensocial-jquery のチュートリアルを用意しました。Google アカウントさえあれば WEB ブラウザ 1つだけで体験できる構成にしています。

それではチュートリアルをはじめます。

はじめに iGoogle (米国) http://www.google.com/ig?hl=en にログインしてください。



続けて iGoogle に Developer Gadget を追加してください。



続けて iGoogle に Google Gadget Editor を追加してください。そして Hello, world! ガジェットのソースコードが表示されるのを確認してください。



Google Gadget Editor で File メニューから Save を選択してください。続けて playground.xml と入力して OK ボタンをクリックし、Hello, world! ガジェットを保存してください。



playground.xml の URL を確認します。playground.xml のリンクを開いてください。



このときの playground.xml の URL を手元に控えてください。次のような URL になるはずです。数値の部分は各自によって異なります。

http://hosting.gmodules.com/ig/gadgets/file/(数値)/playground.xml

Developer Gadget で、手元に控えた playground.xml の URL を入力して Add ボタンをクリックし、iGoogle にガジェットを登録してください。



iGoogle に playground.xml として保存したガジェットが表示されます。



iGoogle が playground.xml をキャッシュしないように cached チェックボックスを OFF にします。



Google Gadget Editor で playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="hello world example" />
<Content type="html"><![CDATA[
<form name="form">
<input type="text" name="q" />
<select name="c" />
<option value="10">10 results</option>
<option value="20">20 results</option>
<option value="30">30 results</option>
</select>
<input type="submit" value="Search">
</form>

]]></Content>
</Module>
ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして、検索ボックスが表示されるのを確認してください。

※ playground.xml に HTML を記述すると、そのままガジェットで表示されます。



Google Gadget Editor で playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="hello world example" />
<Content type="html"><![CDATA[
<form name="form">
<input type="text" name="q" />
<select name="c" />
<option value="10">10 results</option>
<option value="20">20 results</option>
<option value="30">30 results</option>
</select>
<input type="submit" value="Search">
</form>
<script src="http://scripts.lrlab.to/opensocial-jquery-1.0.4.min.js"></script>
<script>
jQuery(function($) {
$(document.form).submit(function() {
alert(this.q.value + ' ' + this.c.value);
return false;
});
});
</script>

]]></Content>
</Module>
ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そしてSearch ボタンをクリックし、入力内容が alert 表示されるのを確認してください。

※ opensocial-jquery は http://scripts.lrlab.to/opensocial-jquery-1.0.4.min.js のアドレスで配信しています。詳しくは opensocial-jquery on the cloud を見てください。
※ playground.xml に JavaScript を記述すると、そのままガジェットで実行されます。



Google Gadget Editor で playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="hello world example" />
<Content type="html"><![CDATA[
<form name="form">
<input type="text" name="q" />
<select name="c" />
<option value="10">10 results</option>
<option value="20">20 results</option>
<option value="30">30 results</option>
</select>
<input type="submit" value="Search">
</form>
<div id="videos"></div>
<script src="http://scripts.lrlab.to/opensocial-jquery-1.0.4.min.js"></script>
<script>
jQuery(function($) {
$(document.form).submit(function() {
var url = 'http://gdata.youtube.com/feeds/videos';
var data = { alt: 'json',
vq: this.q.value,
'max-results': this.c.value
};
$.getJSON(url, data, function(json) {
$.each(json.feed.entry, function() {
$('<img />')
.attr('src', this.media$group.media$thumbnail[0].url)
.appendTo('#videos');
});
});

return false;
});
});
</script>
]]></Content>
</Module>
ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして Search ボタンをクリックし、入力内容にしたがって YouTube から動画を検索し、サムネイルがリスト表示されるのを確認してください。

※ opensocial-jquery は jQuery の Ajax API をクロスドメイン対応に拡張します。
※ YouTube の動画検索は YouTube Data API を使っています。



Google Gadget Editor で playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="hello world example">
<Require feature="dynamic-height" />
</ModulePrefs>

<Content type="html"><![CDATA[
<form name="form">
<input type="text" name="q" />
<select name="c" />
<option value="10">10 results</option>
<option value="20">20 results</option>
<option value="30">30 results</option>
</select>
<input type="submit" value="Search">
</form>
<div id="videos"></div>
<script src="http://scripts.lrlab.to/opensocial-jquery-1.0.4.min.js"></script>
<script>
jQuery(function($) {
$(document.form).submit(function() {
var url = 'http://gdata.youtube.com/feeds/videos';
var data = { alt: 'json',
vq: this.q.value,
'max-results': this.c.value
};
$.getJSON(url, data, function(json) {
$.each(json.feed.entry, function() {
$('<img />')
.attr('src', this.media$group.media$thumbnail[0].url)
.appendTo('#videos');
});
});
$(window).adjustHeight();
return false;
});
});
</script>
]]></Content>
</Module>
ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして Search ボタンをクリックし、サムネイルの数に応じて、ガジェットの高さが自動調整されるのを確認してください。

※ playground.xml に <Require feature="dynamic-height"> を記述すると、jQuery.fn.adjustHeight がロードされます。



Google Gadget Editor で playgorund.xml を赤字のとおり修正してください。そして File メニューから Save を選択して、ガジェットを保存してください。
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="hello world example">
<Require feature="dynamic-height" />
</ModulePrefs>
<Content type="html"><![CDATA[
<style>
#videos img { margin: 2px; width: 80px; hegith: 60px; }
</style>

<form name="form">
<input type="text" name="q" />
<select name="c" />
<option value="10">10 results</option>
<option value="20">20 results</option>
<option value="30">30 results</option>
</select>
<input type="submit" value="Search">
</form>
<div id="videos"></div>
<script src="http://scripts.lrlab.to/opensocial-jquery-1.0.4.min.js"></script>
<script>
jQuery(function($) {
$(document.form).submit(function() {
var url = 'http://gdata.youtube.com/feeds/videos';
var data = { alt: 'json',
vq: this.q.value,
'max-results': this.c.value
};
$.getJSON(url, data, function(json) {
$.each(json.feed.entry, function() {
$('<img />')
.attr('src', this.media$group.media$thumbnail[0].url)
.appendTo('#videos');
});
});
$(window).adjustHeight();
return false;
});
});
</script>
]]></Content>
</Module>
ブラウザの更新ボタンをクリックし、ガジェットをリロードしてください。そして Search タンをクリックし、CSS が適用されるのを確認してください。

※ playground.xml に CSS を記述すると、そのままガジェットで適用されます。



これでチュートリアルはおしまいです。

これ以降は opensocial-jquery のドキュメント を参照してください。その中で質問や要望が出てきましたら、お気軽にコメントください。

2008-04-24

YouTube フィードのジオタグには2とおりの表現がある?

YouTube Data API を使って、動画の位置情報であるジオタグを取得しようと調べたのですが、そのジオタグは、フィードの中で 2とおりの表現があるようです。1つはタグ(フィードでいうカテゴリ)を使った方法で、もう1つは GeoRSS を使った方法です。

タグを使って、位置情報を表現したフィードは、次のとおりです。"geotagged" というタグが目印になっていて、"geo:lat=" と "geo:lon=" というタグで緯度と経度を表現しています。

この方法で、動画に位置情報を付与しようとした経緯を調べてみたのですが、何も分かりませんでした。が、Youtube サイトから "geotagged" で検索すると、それなりの件数がヒットします。ざっと目を通してみた範囲では、それなりの位置情報が付与されています。
<entry>
<category
scheme="http://gdata.youtube.com/schemas/2007/keywords.cat"
term="geotagged" />
<category
scheme="http://gdata.youtube.com/schemas/2007/keywords.cat"
term="geo:lon=139.684548" />
<category
scheme="http://gdata.youtube.com/schemas/2007/keywords.cat"
term="geo:lat=35.706569" />
</entry>
GeoRSS を使って、位置情報を表現したフィードは、次のとおりです。この表現は Youtube Data API のリファレンスにも記載がありますので、公式なものです。

また GeoRSS が付与された動作の再生ページを開くと、その "統計 & 情報" の "収録日 & 場所" に Google マップが表示されますので、単なるメタデータだけでなく、サービスの一環として統合されていることがわかります。
<entry>
<georss:where>
<gml:Point>
<gml:pos>10.309514999389648 123.90380859375</gml:pos>
</gml:Point>
</georss:where>
</entry>
「Google Earth」、ジオタグ付きYouTubeビデオをサポート:ニュース - CNET Japan
同オプションは、2007年6月中旬にソフトローンチされたが、今回のリリースまでは実際にはそれを使用しても何も起こらなかった。うれしいことに、アップロードしたクリップの「date and map options」設定により、自分の古いビデオに地図上の位置を加えることができる。
という時期から逆算し、動画をアップロードするときと、アップロードした後も位置情報を編集できるということなので、現在そして今後は、2つ目の GeoRSS を使って位置情報を取得するのが正解ということになりますね。

1つ目のタグを使った方法は、公式な仕様なんでしょうか(だった?)。それとも自主的なルールがあったのでしょうか。謎が残りますね。う~ん。

2008-03-15

再び BLOGRANGER TG tube サムネイルがぐるぐる回転します

マッシュアップレシピ BLOGRANGER TG tube 地図とタグと動画のビミョーな関係
以前の BLOGRANGER TG touch では、タグマップ API を使い、そのタグをキーワードに Google ニュースを検索することで、タグに関連するニュースを探すというマッシュアップを手軽に実現できました。今回も、同じパターンを使って、タグに関連する動画を YouTube を使って探すというマッシュアップを実現してみました。
以前に作った BLOGRANGER TG tube を少し改造してみました。

BLOGRANGER TG tube とは、今現在のブログ界の様子を表す仮想地図をスクロールしながら、ブログ界の話題と繋がりのある動画をビジュアルに探すことを目的とした HTML/Ajax ベースのマッシュアップアプリケーションです。



BLOGRANGER TG API を使って仮想地図を表示します。そして、その仮想地図の中央付近の話題と繋がりのある動画を YouTube Data API を使って検索し、その動画のサムネイルをグルっと一周する円として表示します。さらに、その動画のサムネイルをクリックすると、その動画を Flash Player を使って再生します。

BLOGRANGER TG tube は jQuery を使って API を繋ぎ合わせ、jQuery プラグインを使ってビジュアルな表現を実現しています。そのソースコードや実装の説明は、次のとおりまとめてありますので、参考になればと思います。
Jquery in ActionJquery in Action
Bear Bibeault Yehuda Katz

Learning  jQuery: Better Interaction Design and Web Development With Simple Javascript Techniques Ajax: The Definitive Guide (Definitive Guide) Restful Web Services

by G-Tools

2007-12-10

jQuery 1.2.1 で script 要素を append すると意図しないパラメータが勝手に付いてしまう

次のコードは YouTube Data API (JSONP) を使って、動画をキーワード検索するものですが、jQuery 1.2.1 と 1.1.2 でその実行した結果がぜんぜん違うのです。かなり焦りました。
jQuery(function($) {
var script = $(document.createElement('script'))
.attr('type', 'text/javascript')
.attr('charset', 'UTF-8')
.attr('src', 'http://gdata.youtube.com/feeds/videos?' +
jQuery.param({
vq: 'jQuery',
alt: 'json-in-script',
callback: 'fn'
})
);
$('head', document).append(script);
});
jQuery 1.2.1 だと script 要素の src 属性が、次のような URL になります。なんか意図しないパラメータが勝手に付いています。
http://gdata.youtube.com/feeds/videos?
vq=jQuery&alt=json-in-script&callback=fn&_=1197287049812
このままの URL で YouTube Data API にリクエストすると、次のように 400 Bad Request となってしまいます。
HTTP/1.x 400 Bad Request
Content-Type: text/plain; charset=UTF-8
Transfer-Encoding: chunked
Cache-Control: private
Date: Mon, 10 Dec 2007 11:44:12 GMT
Server: GFE/1.3

Invalid parameter: '_'.
jQuery 1.1.2 だと script 要素の src 属性が、次のような期待どおりの URL になります。
http://gdata.youtube.com/feeds/videos?
vq=jQuery&alt=json-in-script&callback=fn
jQuery 1.2.1 のソースコードを見ると、domManip メソッドの中で evalScript メソッドを呼び出して、スクリプトを評価するタイミングが追加になっていて、script 要素の src 属性が有効のとき、$.ajax メソッドを使って、script をロードしようと試みまています。
function evalScript(i, elem){
var script = jQuery.nodeName(elem, "script");
if ( script ) {
if ( elem.src )
jQuery.ajax({ url: elem.src, async: false, dataType: "script" });
else
その $.ajax メソッドの中でブラウザのキャッシュを無効にするため、src 属性の値に現在日時(ミリ秒)を値とする "_" というパラメータを付与しています。なんてこった!

そろそろ jQuery 1.2.1 に移行しようとしたときの出来事だったので、デバナを挫かれた感じがして、まだしばらく様子を見ようかなぁと、気持ちが戻ってしまいました。ビミョーに互換性が維持されてないのね。

ニコニコ動画+YouTube―動画共有サイトを楽しく活用する本ニコニコ動画+YouTube―動画共有サイトを楽しく活用する本
メディアバックアップ研究会

ニコニコ動画ファンブック 完全保存版!!!―超人気動画サイトの裏までわかる! (100%ムックシリーズ) エアーマンが倒せない 2ちゃんねる公式ガイド2006 同人音楽を聴こう! (三才ムック VOL. 167) コンティニューvol.36

by G-Tools

マッシュアップレシピ BLOGRANGER TG tube 地図とタグと動画のビミョーな関係

以前の キーボードを前提としない Wii でも使えるという BLOGRANGER TG は iPod touch でも使えるか?マッシュアップレシピ BLOGRANGER TG touch の Google ニュース和え のエントリでは、Google Maps と BLOGRANGER TG を題材に iPod touch のスクロールの不都合に注目しましたが、今回は少し視点を変えて、BLOGRANGER TG のタグマップ API に注目してみようと思います。

以前の BLOGRANGER TG touch では、タグマップ API を使い、そのタグをキーワードに Google ニュースを検索することで、タグに関連するニュースを探すというマッシュアップを手軽に実現できました。今回も、同じパターンを使って、タグに関連する動画を YouTube を使って探すというマッシュアップを実現してみました。

その名も BLOGRANGER TG tube です。またまたベタですみません。

タグに関連する動画のサムネイルを、タグの周囲に表示するようにしました。動画のサムネイルは、タグをキーワードとして YouTube Data API を使って検索しています。

仮想地図に表示されたタグに対して、その検索を3秒ごとに繰り返して、次々とサムネイルを表示していきます。仮想地図をスクロールすると、そのスクロール先で表示されたタグのサムネイルを繰り返し表示します。

サムネイルをクリックすると、その動画の YouTube の再生ページを開きます。また、タグ自体をクリックすると YouTube の検索結果ページを開きます。

コーギー川柳 2008年カレンダーコーギー川柳 2008年カレンダー

THE DOGウェルシュ・コーギー 2008年カレンダー コーギースタイル Vol.18 (タツミムック) Just Corgis 2008 Calendar (Just) Just Pembrook Corgis 2008 Calendar (Just) 犬川柳 最強コーギー最強列伝

by G-Tools

よくある公開 API というと、その API 自体で何か完結した機能を提供しているのが、一般的なんじゃないかという感想があるのですが、この BLOGRANGER TG のタグマップ API は例外的で、ブログ界の様相?を表す仮想地図にタグを表示し、そのタグの記事数、類似度、話題の広さを把握できますが、

この API 自体が何か完結したものなのかどうか、人によって様々な見方ができるような、そういう位置づけ API なんじゃないかという気がします。ということは、このタグマップ API は、他のサービスや API とマッシュアップしたり、されたりすることで、その価値が高まる API といえるのかもしれません。

タグマップ API の特徴を1つ挙げるとすると、前述のとおり、ブログ界の様相?を表すタグ群でしょう。タグは、キーワードとも読み替えることができるので、このタグを使って様々なサービスや API との連携ができます。

後は、ちょっとしたアイディアを膨らまして、それを実現するコードを書くだけ?ですね。

BLOGRANGER Hacks (BLOGRANGER TG API)
http://ranger.labs.goo.ne.jp/hacks/

YouTube Data API
http://code.google.com/apis/youtube/overview.html

猫川柳 2008年カレンダー猫川柳 2008年カレンダー

2008年カレンダー 日本の猫 ねこのきもちカレンダー2008 2008年卓上カレンダー 岩合光昭  むれねこ ビッグコミック オリジナル 2008年 猫カレンダー 猫川柳 望郷編

by G-Tools