仕事で着うたフルに歌詞があるかを判定して欲しいと依頼を受けた。
公開された情報も何もないから、色々解析してみたあの頃…。
読んでみるとDoCoMoの着うたフルの音楽を読み込むと、一定の法則性があることがわかる。
バイナリを解析するのが一番いいんだけど、
UTF-8で読めば曲タイトルや歌詞の一部が読めるくらいには内容を保っている。
でも中身を取り込めるほど、完全に読めるわけではない。
結論として、歌詞情報等『各情報の有無判定だけなら可能』なので、その判定方法。
公式ではないので、使うのは自己責任で!
と言いたいが、
ドコモは公式に2016年11月にiモードケータイの出荷終了し、着うたサイトもなくなってきたこの頃、最早要らぬ技術。
解析方法
utf-8で読んでみればわかるんだけど、XMLぽい感じで情報が保存されている。
『ぽい』としたのは完全に読めているわけではないから。
そこで作成した処理が下記。
// $song_path 着うたファイル『XXX.3gp』 function SongInData($song_path) { $return = array(); // 着うたファイル有無 if(!file_exists($song_path)){ return $return; } // 情報と対になるキーワード $arr_type = array( 'jacket' => 'fmji', // 保存可能ジャケット画像 'lyrics' => 'fmli', // 保存可能歌詞 'entirety' => 'fulm', // まるごと着信音 'eulogy' => 'fmsp', // オススメ着信音設定 ); $contents = @file_get_contents($song_path); $contents = mb_convert_encoding($contents,'SJIS','utf-8'); // ※1 サイト次第 foreach($arr_type as $key => $val) { $return[$key] = true; if(!strstr($contents,$val)){ $return[$key] = false; } } return $return; }
その情報があるかないかを出す仕組み。
※1については、FOMAの絵文字を出すために、SJISサイトが少なくないから書いた1文なのでUTF-8サイトなら不要。
決まったキーワードの後ろに決まった内容が登録されている。
解っている情報だけ書くと
『fmji』の後ろには『保存可能ジャケット画像』
『fmli』の後ろには『保存可能歌詞』
『fulm』の後ろには『まるごと着信音』
『fmsp』の後ろには『オススメ着信音設定』
の情報が登録されている様子。
コメント