Node.jsでyoutube検索をやってみた備忘録です。
Vagrantで仮想環境作って試したので、ついでにそれも載せてあります。
蛇足かもしれませんが。。。
環境構築
Vagrantを利用して、仮想マシン上で開発を行う。
使用マシン: Mac OS X Yosemite (10.10.2)
Vagrant: 1.7.2
VirtualBox: 4.2
$ mkdir develop
$ cd develop
$ mkdir source # ソース置き場
$ vagrant box add chef/centos-7.0
$ vagrant init
$ vim Vagrantfile # 下記の通り編集
$ vagrant up
config.vm.box = "chef/centos-7.0" # box指定
config.vm.network "private_network", ip: "192.168.33.10" # プライベートネットワークの有効化
config.vm.synced_folder "./source", "/var/www/node_youtube" # 共有ディレクトリの指定
$ vagrant ssh # 仮想マシンにログイン
$ sudo yum groupinstall "Development Tools"
$ sudo yum install epel-release
$ sudo yum install nodejs
$ sudo yum install npm
Node.js 環境の準備
開発ディレクトリにnpm用のpackage.jsonを置く
置いたらnpm install でモジュールを導入する
package.json
{
"dependencies": {
"express": "*",
"youtube-node": "*"
}
}
Youtube APIの利用
- google developer console でプロジェクトを新規作成
- サイドバー→APIと認証→API→Youtube Data API→APIを有効にする
- 認証情報→新しいキーを作成
以上でAPIキーの生成が出来るはず。
node-youtubeの利用
参考: https://www.npmjs.com/package/youtube-node
app.js
(function() {
var Youtube = require('youtube-node');
var youtube = new Youtube();
youtube.setKey('[取得したAPIキー]');
youtube.search('検索クエリ', [最大取得数], function(error, result) {
if (error) {
console.log(error);
return ;
}
console.log(JSON.stringify(result, null, 2));
});
})();
レスポンス例
{
"kind": "youtube#searchResult",
"etag": "\"tbWC5XrSXxe1WOAx6MK9z4hHSU8/azXfax9T7cmjrWZy_1JcFELtw2w\"",
"id": {
"kind": "youtube#video",
"videoId": "ud_seyCRXso"
},
"snippet": {
"publishedAt": "2013-04-15T13:00:13.000Z",
"channelId": "UC8v9MeHJF0jYg3LOTi69HNQ",
"title": "柳田悠岐 登場曲~行くぜっ!怪盗少女/ももいろクローバー 2013.4.13",
"description": "狙い撃ち☆ (^^) 2013/4/13 ソフトバンクホークスvs千葉ロッテ 1塁側5x列23xより撮影.",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/ud_seyCRXso/default.jpg"
},
"medium": {
"url": "https://i.ytimg.com/vi/ud_seyCRXso/mqdefault.jpg"
},
"high": {
"url": "https://i.ytimg.com/vi/ud_seyCRXso/hqdefault.jpg"
}
},
"channelTitle": "joyjoytube",
"liveBroadcastContent": "none"
}
より詳しい情報を取るには
Youtube.getById(id, callback) を使う
IDは上記の取得例を利用
app.js
youtube.getById('ud_seyCRXso', function(error, result) {
if (error) {
console.log(error);
return ;
}
console.log(JSON.stringify(result, null, 2));
});
レスポンス例
{
"kind": "youtube#videoListResponse",
"etag": "\"tbWC5XrSXxe1WOAx6MK9z4hHSU8/Fpqc9d1G_XWNyEucIX_Pt4kPRwU\"",
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
},
"items": [
{
"kind": "youtube#video",
"etag": "\"tbWC5XrSXxe1WOAx6MK9z4hHSU8/acJgue7t6SoiVwq_1_iNzJieVus\"",
"id": "ud_seyCRXso",
"snippet": {
"publishedAt": "2013-04-15T13:00:13.000Z",
"channelId": "UC8v9MeHJF0jYg3LOTi69HNQ",
"title": "柳田悠岐 登場曲~行くぜっ!怪盗少女/ももいろクローバー 2013.4.13",
"description": "狙い撃ち☆ (^^)\n\n2013/4/13 ソフトバンクホークスvs千葉ロッテ\n1塁側5x列23xより撮影",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/ud_seyCRXso/default.jpg",
"width": 120,
"height": 90
},
"medium": {
"url": "https://i.ytimg.com/vi/ud_seyCRXso/mqdefault.jpg",
"width": 320,
"height": 180
},
"high": {
"url": "https://i.ytimg.com/vi/ud_seyCRXso/hqdefault.jpg",
"width": 480,
"height": 360
},
"standard": {
"url": "https://i.ytimg.com/vi/ud_seyCRXso/sddefault.jpg",
"width": 640,
"height": 480
},
"maxres": {
"url": "https://i.ytimg.com/vi/ud_seyCRXso/maxresdefault.jpg",
"width": 1280,
"height": 720
}
},
"channelTitle": "joyjoytube",
"categoryId": "17",
"liveBroadcastContent": "none",
"localized": {
"title": "柳田悠岐 登場曲~行くぜっ!怪盗少女/ももいろクローバー 2013.4.13",
"description": "狙い撃ち☆ (^^)\n\n2013/4/13 ソフトバンクホークスvs千葉ロッテ\n1塁側5x列23xより撮影"
}
},
"contentDetails": {
"duration": "PT20S",
"dimension": "2d",
"definition": "hd",
"caption": "false",
"licensedContent": false
},
"status": {
"uploadStatus": "processed",
"privacyStatus": "public",
"license": "youtube",
"embeddable": true,
"publicStatsViewable": true
},
"statistics": {
"viewCount": "26962",
"likeCount": "19",
"dislikeCount": "1",
"favoriteCount": "0",
"commentCount": "4"
}
}
]
}
items.statisticsで評価やお気に入り数が取得出来る
オプションについて
- Youtube.addParam('パラメータ名', '値')
→ 検索パラメータの指定
ex. 再生回数順に並べる
addParamの例(再生回数順に並べる)
youtube.addParam('order','viewCount');
設定可能なその他パラメータについては
https://developers.google.com/youtube/v3/docs/search/list?hl=ja#try-it
感想
割と簡単に出来ましたが、そもそもAPI的に詳細な検索が出来るようにはなってないみたいです。
もうちょっと検索条件指定できれば面白そうなのですが。。。