YAPC::Asia 2014 前夜祭
スタッフの方へお願い
不適切な発言があったらピー音入れて下さい
あたし
ID:hondallica(ホンダリカ)※Lは2つです
職業:HeavyMetal Programmer年齢:100,03x歳血液型:X出身:北海道
好きな言葉:親に嫌われたら一人前だ
URL: http://sukuna.net/ https://github.com/hondallica
Hachioji.pmに出没します。
本日のセットリスト
・ヘヴィメタルとは
・サービス(hrhm.info)のご紹介
・データの集め方
・副産物
問
お客様の中にハードロック・ヘヴィメタルが好きな方はいらっしゃいますか?
ヘヴィメタルとは
ヘヴィメタルとは
・社会にちょっとなじめない人たちが
・重低音をかき鳴らしながら
・ファンタジーの世界に迷い込んだり
・世の中間違ってると叫んでいる
・聴いている人があんまりいない
・かわいい音楽
DEATH!!
本題
Hard Rock & Heavy MetalWeb Service
http://hrhm.info
YouTubeの動画探すの楽な俺得サービス
DEMO
構成
・VPS: Digital Ocean ( 安い・SSD速い)
・Web Server: Nginx (使ってみたかった
・App Server: Starman (これしか知らなかった
・WAF: Mojolicious::Lite (覚えやすかった
・WebAPI: node.js( 使ってみたかった
・SQLite: ファイルポン置きでリリースできる
構成
・自分の既存の知識で扱える構成にする
▶�インフラ構築の勉強も兼ねているので
スモールスタート
・とにかく公開することを優先
・個人サービスだし困ったら後で見直せばいい
データの集め方
必要なもの
・PC →データ収集専用機があるとよい(常時稼働)・DB →お好みで
・ちょっとしたプログラミング能力
→HTTP投げてDBに突っ込む程度で大丈夫
・狂気
→根こそぎデータ集めるぞという気持ち
ひたすらデータを集める
ひたすらScraping、WebAPI
主な情報源
・HR/HMニュースサイト
・Last.fm・SoundCloud・MusicBrainz・Bandcamp・Myspace・Facebook・Twitter
押さえておくべき2サイト
Last.fm・インターネットラジオ + SNS・ユーザーが聴いている曲情報が共有される
Last.fm・恐ろしくAPIが充実している
Last.fm・CPANモジュールあります
・Net::LastFM ・WebService::LastFM ・etc...
MusicBrainz・音楽のWikipedia・メタデータが豊富
MusicBrainz・特にMusic Brainz ID(MBID)が重要
アーティスト、アルバム、楽曲などにユニークなIDが振られている。
4bd02db1-3592-4d15-9aa5-23c9591e49ce
Last.fmやその他音楽系WebAPIでは、リクエストパラメータにMBIDを使える事が多い。
サービス間連携に超重要!
MusicBrainz・CPANモジュールあります
・WebService::MusicBrainz
MusicBrainz
さらに
MusicBrainz・このサービスのVMがダウンロードできますhttp://musicbrainz.org/doc/MusicBrainz_Server/Setup
・コマンドでマスターサーバとDB同期できる
・ローカル環境でAPI叩き放題
・DB(PostgreSQL)に直接アクセスも可
・チラ見した限りだと80万以上のアーティスト が登録されていた
集めたデータ
Band・Band Name・Country・Genre(Thrash, Death, Power...)・Status(活動中,休止中,解散...)・収集中ですがライヴ履歴も
100K〜 records
Artist・Name・Country・Age・Gender・Part(ヴォーカル,ギター,ドラム...)・History(今まで所属していたバンド)
500K〜 records
Discography・Name・Type(シングル,アルバム,ビデオ...)・Release Date
240K〜 records
Track・Title・Length・Lyric(ごく一部)
1.7M〜 records
Similar Band・Band・Similar Band・Score(関連性を独自集計) ▶�複数のWebAPIのスコア
▶�同じアーティストが所属していた
▶�一緒にライヴをやった回数
▶�独断と偏見
4.2M〜 records
同名バンド
読めないバンド
↑文字化けではありませんバンド名です
頻出ワード
Death Black Dead Blood War Life Night Time World Hell Dark Die Darkness Fire End Last Love Evil God Metal
みなさんもよく使うと思います
似ている・関連バンド(demo)http://hrhm.info/similar
DB・最初はとにかく集める
・サイトによって取れる情報が異なる
▶�いきなりきれいに構造化はできない
・HTML、JSON、XMLを生データのままDBに 格納しておく
・最低限サービス公開に使う情報を構造化
例:バンド名、アルバム名、曲名、国、
ジャンル、アーティスト名
データ収集中に生まれた
副産物
メタル系の人は
ヘビメタって言われるのを
嫌います
曲に合わせて頭振るのを
ヘッドバンギングと
言いますが
ヘッドバンキングって
書いてるのをよく見ます。何銀行だよ!?
副産物(1)Chrome拡張作りました。https://github.com/hondallica/userscript-heavymetal
副産物(1)最高にクールだろ?
副産物(2)さきほどご紹介したLast.fmのCPANモジュール
Net::LastFM
api_keyいちいち入力したくないので、引数を省略したら$ENVから読みたい。
副産物(2)依存モジュールが重そうだった。
副産物(2)完成してませんが、Net::LastFM::Liteを作ってみました。(GET系APIなら動くはず)https://github.com/hondallica/p5-Net-LastFM-Lite
副産物(2)ほぼモジュール差し替えですが
副産物(2)けっこう速くなった。
Benchmark: timing 400 iterations of lfm, lfml...lfm: 305 wallclock secs ( 1.34 usr + 0.17 sys = 1.51 CPU) @ 264.90/s (n=400)lfml: 296 wallclock secs ( 0.66 usr + 0.13 sys = 0.79 CPU) @ 506.33/s (n=400)Rate lfm lfmllfm 265/s -- -48%lfml 506/s 91% --
副産物(3)・bandcampというアーティスト直販サービス
・インディーズバンド多め
副産物(3)・APIはありますがCPANモジュールなかった
副産物(3)WebService::Bandcampリリースしました。
残念なことに
APIキーの配布が停止中
このモジュールは
APIドキュメントからリンクされてる
サンプルリクエストのキーを使って作った。
自分専用として始めた
サービスですが
現在95カ国からご利用頂いておりますアフリカ・中東・グリーンランド、北朝鮮に
メタラーのお友達がいたら宣伝をお願いします
まとめ
・自分の好きな事を形に
・データ持ってるとできることが広がる
・しょぼくても公開する事が大事 ▶�この場で話す機会がいただけた!
The End