Windows版のiTunesで現在聴いてる曲の情報を取得する(C#編)
iPhone/iPod touchにはIn the Moodという、現在iPhone/iPod touchで聴いてる曲の曲名などの情報をTwitterに少しカスタマイズした形式でポストできるアプリがあります。
しかし、Windows版のiTunesで曲を聴いてるときに、iTunesにも似たような機能があるだろうと思って探してみたのですが、見つかりませんでした。曲のプロパティで曲名などを個別にコピーすればできますがとても手間がかかります。
そこで、iTunesで現在聴いてる曲の情報を取得できないか調べてみました。WindowsにiTunesをインストールしていて、何か曲を聴いていることを前提とします。また、Visual Studio 2010を使いました。
- Visual Studio C#で新規にプロジェクトを作成して、ソリューションエクスプローラーで、作成したプロジェクトの[参照設定]を右クリックして[参照の追加]を選択します。
- [参照の追加]ダイアログで[COM]タブを選択します。
- [コンポーネント名]が[iTunes 1.13 Type Library]パスがiTunes.exeの項目を選択して[OK]をクリックします。
- すると、プロジェクトに、自動的にInterop.iTunesLib.dllというファイルができて、ソリューションエクスプローラーには[参照設定]にはiTunesLibが追加されます。
- C#のコードファイルの適切な位置に以下のusing文を追加します。
using iTunesLib; using System.Runtime.InteropServices;
以下のようなメソッドを追加します。文字列の組み立ての部分は好みに応じて変えてください。IntelliSenseを使用すれば、IITTrackインターフェースにどんなメンバーがあるか見ることができます。
/// <summary> /// iTunesで現在聴いてる曲の情報の文字列を取得 /// </summary> /// <returns>iTunesで現在聴いてる曲の情報の文字列</returns> private static string GetCurrentMusic() { string text = ""; iTunesApp app = new iTunesLib.iTunesApp(); IITTrack track = app.CurrentTrack; if (track != null && track.Enabled) { text = string.Format("[聴いてる♪]「{0} - {1}」 by {2}" , track.Name, track.Album, track.Artist); } Marshal.ReleaseComObject(app); return text; }
これを、コンソールアプリならConsole.WriteLine(GetCurrentMusic())で出力、WindowsアプリならTextBox.Textにセットすれば、目的の文字列が取得して表示できます。これをコピーしてツイッタークライアントのテキストボックスに貼り付けて、つぶやけば現在の聴いてる曲をTwitterなどでつぶやくことができます。
Windows版のiTunesで現在聴いてる曲の情報を取得する(Javascript編)
ブックマークレット
「Windows版のiTunesで現在聴いてる曲の情報を取得する(C#編) - IIJIMASの日記」を踏まえて、Internet Explorerで使用できるはずのJavascriptブックマークレットを作成してみました。
//iTunesで現在聴いてる曲の曲名、アルバム名、アーティスト名を文字列を作成にするブックマークレット javascript:a=new%20ActiveXObject("iTunes.Application");t=a.CurrentTrack;document.writeln("[聴いてる♪]「"+t.Name+"‐"+t.Album+"」by%20"+t.Artist);
実行してみると…通常の設定では動きません。通常セキュリティの関係で、ActiveXObjectを生成できないようになっているようです。
適当な、TXTかHTMをローカルファイルを新規作成して、それをIEで開いてる時に実行すると、実行しても大丈夫か?というようなのダイアログが出ますが、[はい]をクリックすると
iTunesで現在聴いてる曲の曲名、アルバム名、アーティスト名を文字列を表示できます。
ローカルHTMLファイル
同じことですが、一行JavascriptだとカスタマイズしづらいのでローカルHTMLを作成してもできます。これをお気に入りに入れてしまえば、ブックマークレットと同じように使用できます。これも実行確認のダイアログが出てしまいます。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <script type="text/javascript"> function getCurrentMusic(){ var iTunesApp = new ActiveXObject("iTunes.Application"); var track = iTunesApp.CurrentTrack; var name = track.Name; var album = track.Album; var artist = track.Artist; var text = "[聴いてる♪]"; text += "「"+name+" - "+album+"」 by "+artist; return text; }; function writeCurrentMusic(){ document.writeln("<textarea cols=100 rows=3>" + getCurrentMusic() + "</textarea>"); }; </script> </head> <body onload="writeCurrentMusic();"> </body> </html>
Windowsガジェット(Windows Vista/Windows 7)
ローカルHTML作成したのなら、Windows Vista以降で使えるサイドバーガジェットにしてしまえばよいのでは?と思い、作成してみました。
GetCurrentITunesTrack.gadget
GetCurrentITunesTrack.gadgetは実はGetCurrentITunesTrack.zipであり、中に最低限gadget.xmlというXMLとその中で指定されている、HTMLファイルが1つあれば、ガジェットになります。
GetCurrentITunesTrack.gadgetの中身は以下の2ファイルだけです。
gadget.xml
<?xml version="1.0" encoding="utf-8" ?> <gadget> <name>GetCurrentITunesTrack</name> <version>1.0.0.0</version> <hosts> <host name="sidebar"> <base type="HTML" apiVersion="1.0.0" src="GetCurrentITunesTrack.html" /> <permissions>Full</permissions> <platform minPlatformVersion="1.0" /> </host> </hosts> </gadget>
GetCurrentITunesTrack.html
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <title>GetiTunesCurrentMusic</title> <style type="text/css"> .blackback{ background:black; color:#D0FFFF; border-color:white; } .bodydimension{ width:550px; height:100px; } </style> <script type="text/javascript"> function getCurrentMusic(){ var text = ""; var iTunesApp = new ActiveXObject("iTunes.Application"); var track = iTunesApp.CurrentTrack; if (track!=null){ var name = track.Name; var album = track.Album; var artist = track.Artist; var text = "[聴いてる♪]"; text += "「"+name+" - "+album+"」 by "+artist; }else{ text += "iTunesで聴いている曲はありません。"; } return text; }; var timer; function writeCurrentMusic(){ clearTimeout(timer); var content=document.getElementById('content'); content.innerHTML="<textarea cols=50 rows=3 id='ta1' class='blackback'>" + getCurrentMusic() + "</textarea>"; ta1.select(); timer=setTimeout("writeCurrentMusic()",30000); }; </script> </head> <body onload="writeCurrentMusic();" class="blackback bodydimension" onclick="writeCurrentMusic();"> <div id="content"> </div> </body> </html>