Help us understand the problem. What is going on with this article?

Node.js で youtube検索を行う

More than 5 years have passed since last update.

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的に詳細な検索が出来るようにはなってないみたいです。
もうちょっと検索条件指定できれば面白そうなのですが。。。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away