なるほどさだまさし。
世の中的にさだまさしの曲が、毎日どのくらい聴かれているのか気になったので、Youtubeの再生回数をMackerelで可視化してみよう。
Youtube APIで再生回数を取得する
Youtube APIを利用するには、まずGoogle Developer ConsoleでAPIキーを発行しよう。
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
さて、YoutubeのAPIから取得した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分くらい待つとグラフが描画されはじめる。
グラフが平坦すぎる!!!!
とはいえずっとメトリックをとっていると、1時間で50回ずつくらい再生回数が伸びているのがわかった。 意外と再生されてる。
Mackerelにはグラフを1分ごとの差分値で表示する設定がある。
この設定に切り替えてグラフをみてみると、、、
なるほど。けっこう定期的に再生回数が伸びてる。