さだまさしの曲のYoutube再生回数を可視化してみる

Scala勢がさだまさしでにわかに盛り上がっている。

qiita.com

なるほどさだまさし

世の中的にさだまさしの曲が、毎日どのくらい聴かれているのか気になったので、Youtubeの再生回数をMackerelで可視化してみよう。

Youtube APIで再生回数を取得する

Youtube APIを利用するには、まずGoogle Developer ConsoleAPIキーを発行しよう。

Developer Consoleでプロジェクトを作成し、"YouTube Data API v3" を有効化する。するとYouTubeからデータを取得するためのAPIキーを発行できるようになる。

APIキーには、ブラウザ用やサーバー用などいくつかの種類がある。これは、リファラーやIPアドレスによってAPIアクセスを制限するための使い分けで、ぼくはサーバー用を選択して自分が利用しているEC2インスタンスIPアドレスを通した。

APIキーさえ取得できれば、動画の再生回数は以下のURLから取得できる。

https://www.googleapis.com/youtube/v3/videos?part=statistics&id={動画のID}&fields=items%2Fstatistics&key={APIキー}

たとえば、この記事を書いている今、『関白宣言』の情報を取得すると以下の様な結果がかえる。

$ curl -X GET 'https://www.googleapis.com/youtube/v3/videos?part=statistics&id=tsXkp9FVzgg&fields=items%2Fstatistics&key={APIキー}'
{
 "items": [
  {
   "statistics": {
    "viewCount": "786716",
    "likeCount": "1436",
    "dislikeCount": "105",
    "favoriteCount": "0",
    "commentCount": "121"
   }
  }
 ]
}

このviewCountが再生回数だ。これをMackerelにポストしよう。

Mackerelのサービスメトリックへのポスト

Mackerelにはサービスメトリックという機能があって、これはホストに依存しない任意の値をポストしてグラフ化できる機能だ。

Mackerelの画面からサービスを作成すると、以下のAPIを使ってそこにメトリックをポストできる。

http://help-ja.mackerel.io/entry/spec/api/v0#service-metric-value-post

さて、YoutubeAPIから取得したviewCountをMackerelにポストしてみよう。雑にコードを書いてみた。

post_uri = URI.parse('https://mackerel.io/api/v0/services/masashi/tsdb')
https = Net::HTTP.new(post_uri.host, post_uri.port)

https.use_ssl = true
req = Net::HTTP::Post.new(post_uri.request_uri)

req["Content-Type"] = "application/json"
req["X-Api-Key"] = "{api_key}"
payload = [{
  "name" => "masashi.kanpaku",
  "time" => Time.now.to_i,
  "value" => view_count.to_i
}].to_json

req.body = payload

res = https.request(req)

こんな感じでMackerelにポストするスクリプトを作り、毎分動かしてみよう。10分くらい待つとグラフが描画されはじめる。

f:id:daiksy:20151222193615p:plain

グラフが平坦すぎる!!!!

とはいえずっとメトリックをとっていると、1時間で50回ずつくらい再生回数が伸びているのがわかった。 意外と再生されてる。

Mackerelにはグラフを1分ごとの差分値で表示する設定がある。

f:id:daiksy:20151223120027p:plain

この設定に切り替えてグラフをみてみると、、、

f:id:daiksy:20151223120049p:plain

なるほど。けっこう定期的に再生回数が伸びてる。