iTunesで聴いてる曲のビデオをSkypeに表示
前の→ http://d.hatena.ne.jp/arikui/20061208/1165532299
Skypeのムードメッセージに動画を設定できるということを最近知ったので、iTunesで聴いてる曲をDailymotionから検索して表示するスクリプト。検索に引っかかった1番目を表示させてるので、確実に聴いてる曲の動画だとはいえませんが。
使い方は前のとほとんど同じ。1行目のuser_nameはSkypeのやつです。ウィンドウが気にならなければwscriptじゃなくてcscriptで実行してもいいんじゃなかろうか。
残念ながら、動画のサムネイルは変化しません。変更させ方が分かりません。見た目あんまり格好よくない。
data:text/plain;base64,dmFyIHVzZXJfbmFtZSAgID0gInVzZXJuYW1lIjsNCnZhciBzYXZlRGlyICAgICA9ICJjOlxcaXR1bmVzIjsNCnZhciBkZWZhdWx0RmlsZSA9ICJDOlxcRG9jdW1lbnRzIGFuZCBTZXR0aW5nc1xcTkFNRVxcTXkgRG9jdW1lbnRzXFxNeSBTa3lwZSBQaWN0dXJlc1xcU2t5cGUucG5nIjsNCg0KdmFyIHZpZGVvX2RhdGEgPSB7DQoJdHlwZSAgIDogInZpZGVvIiwNCglwYXJ0bmVyOiAiZGFpbHltb3Rpb24iLA0KCXRodW1iICA6ICJwcm9maWxlOi8vIiArIHVzZXJfbmFtZSArICIvbW9vZG1lZGlhL3RodW1iIiwNCglhbHQgICAgOiAiIiwNCgl0aXRsZSAgOiAiIg0KfTsNCg0KdmFyIHNreXBlID0gV1NILkNyZWF0ZU9iamVjdCgiU2t5cGU0Q29tLlNreXBlIik7DQp2YXIgaXQgICAgPSBXU0guQ3JlYXRlT2JqZWN0KCJpVHVuZXMuQXBwbGljYXRpb24iLCAiSVRFdmVudF8iKTsNCg0Kd2hpbGUodHJ1ZSl7DQoJV1NjcmlwdC5TbGVlcCgxMDAwKTsNCn0NCg0KLyoqKioqIEV2ZW50ICoqKioqLw0KZnVuY3Rpb24gSVRFdmVudF9PblBsYXllclBsYXlFdmVudCh0cmFjayl7DQoJdmFyIHRyYWNrX2luZm8gPSBbdHJhY2suTmFtZSwgdHJhY2suQXJ0aXN0XTsNCgl2YXIgcHJvZmlsZSAgICA9IHNreXBlLkN1cnJlbnRVc2VyUHJvZmlsZTsNCgl2YXIgdXJsICAgICAgICA9ICJodHRwOi8vd3d3LmRhaWx5bW90aW9uLmNvbS9yc3MvcmVsZXZhbmNlL3NlYXJjaC8iICsgZW5jb2RlVVJJQ29tcG9uZW50KHRyYWNrX2luZm8uam9pbigiICIpKSArICIvMSI7Ow0KCXZhciBpdGVtICAgICAgID0gZ2V0SXRlbSggZ2V0RmVlZCh1cmwpICk7DQoNCgljaGFuZ2VBdmF0YXIodHJhY2ssIHNhdmVEaXIpOw0KDQoJaWYoIWl0ZW0pew0KCQlwcm9maWxlLk1vb2RUZXh0ID0gdHJhY2tfaW5mby5qb2luKCIgLyAiKTsNCgl9DQoJZWxzZXsNCgkJZXh0ZW5kKHZpZGVvX2RhdGEsIGl0ZW0pOw0KCQlwcm9maWxlLlJpY2hNb29kVGV4dCA9IEVsZW1lbnQoIm1lZGlhIiwgdmlkZW9fZGF0YSkgKyB2aWRlb19kYXRhLnRpdGxlOw0KCX0NCg0KCVdTSC5FY2hvKCB0cmFja19pbmZvLmpvaW4oIiAvICIpICk7DQp9DQoNCmZ1bmN0aW9uIElURXZlbnRfT25BYm91dFRvUHJvbXB0VXNlclRvUXVpdEV2ZW50KCl7DQoJV1NILkVjaG8oIkFib3V0VG9Qcm9tcHRVc2VyVG9RdWl0RXZlbnQiKTsNCglXU2NyaXB0LlF1aXQoKTsNCglpdC5RdWl0KCk7DQp9DQoNCmZ1bmN0aW9uIElURXZlbnRfT25RdWl0dGluZ0V2ZW50KCl7DQoJcHJpbnQoIlF1aXR0aW5nRXZlbnQiKTsNCglXU2NyaXB0LlF1aXQoKTsNCglpdC5RdWl0KCk7DQp9DQoNCi8qKioqKioqKioqLw0KZnVuY3Rpb24gZXh0ZW5kKG8sIG0pew0KCWZvcih2YXIgeCBpbiBtKXsNCgkJb1t4XSA9IG1beF07DQoJfQ0KfQ0KDQpmdW5jdGlvbiBFbGVtZW50KHRhZywgYXR0cmlidXRlcywgY2hpbGRyZW4pew0KCWNoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107DQoJdmFyIGRhdGEgPSBbXTsNCglmb3IodmFyIHggaW4gYXR0cmlidXRlcyl7DQoJCWRhdGEucHVzaCh4ICsgIj1cIiIgKyBhdHRyaWJ1dGVzW3hdICsgIlwiIik7DQoJfQ0KCXJldHVybiAiPCIgKyB0YWcgKyAiICIgKyBkYXRhLmpvaW4oIiAiKSArICI+IiArIGNoaWxkcmVuLmpvaW4oIiIpICsgIjwvIiArIHRhZyArICI+IjsNCn0NCg0KZnVuY3Rpb24gZ2V0RmVlZCh1cmwpew0KCXZhciB4bWxodHRwID0gV1NILkNyZWF0ZU9iamVjdCgiTVNYTUwyLlhNTEhUVFAiKTsNCgl4bWxodHRwLm9wZW4oIkdFVCIsIHVybCwgZmFsc2UpOw0KCXhtbGh0dHAuc2VuZCgpOw0KCXJldHVybiB4bWxodHRwLnJlc3BvbnNlVGV4dDsNCn0NCg0KZnVuY3Rpb24gZ2V0SXRlbShYTUxTdHJpbmcpew0KCXZhciBkb2N1bWVudCA9IFdTSC5DcmVhdGVPYmplY3QoIk1TWE1MMi5ET01Eb2N1bWVudCIpOw0KDQoJZG9jdW1lbnQubG9hZFhNTChYTUxTdHJpbmcpOw0KCWRvY3VtZW50LnNldFByb3BlcnR5KCJTZWxlY3Rpb25MYW5ndWFnZSIsICJYUGF0aCIpOw0KDQoJaWYoIWRvY3VtZW50LnNlbGVjdE5vZGVzKCIvL2l0ZW0iKS5sZW5ndGgpew0KLy8JCVdTSC5FY2hvKCJub3QgZm91bmQiKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXZhciBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIml0ZW0iKVswXTsNCg0KCXJldHVybiB7DQoJCXRpdGxlICAgIDogaXRlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGl0bGUiKVswXS50ZXh0LA0KCQl1cmkgICAgICA6IGl0ZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm1lZGlhOmNvbnRlbnQiKVswXS5nZXRBdHRyaWJ1dGUoInVybCIpLA0KCQltb3JlX2luZm86IGl0ZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImd1aWQiKVswXS50ZXh0DQoJfTsNCn0NCg0KZnVuY3Rpb24gY2hhbmdlQXZhdGFyKHRyYWNrLCBwYXRoKXsNCglpZih0cmFjay5BcnR3b3JrLkNvdW50IDw9IDApew0KCQlza3lwZS5TZXR0aW5ncy5BdmF0YXIgPSBkZWZhdWx0RmlsZTsNCgkJcmV0dXJuOw0KCX0NCg0KCXZhciBmb3JtYXQgPSBpbWdGb3JtYXQodHJhY2suQXJ0d29yay5JdGVtKDEpLkZvcm1hdCk7DQoNCglpZighZm9ybWF0KXsNCgkJc2t5cGUuU2V0dGluZ3MuQXZhdGFyID0gZGVmYXVsdEZpbGU7DQoJCXJldHVybjsNCgl9DQoNCgl2YXIgZmlsZSA9IHBhdGggKyAiXFxhcnR3b3JrLiIgKyBmb3JtYXQ7DQoJdHJhY2suQXJ0d29yay5JdGVtKDEpLlNhdmVBcnR3b3JrVG9GaWxlKGZpbGUpOw0KCXNreXBlLlNldHRpbmdzLkF2YXRhciA9IGZpbGU7DQp9DQoNCmZ1bmN0aW9uIGltZ0Zvcm1hdChuKXsNCglzd2l0Y2gobil7DQoJCWNhc2UgMTogIHJldHVybiAianBnIjsNCgkJY2FzZSAyOiAgcmV0dXJuICJwbmciOw0KCQljYXNlIDM6ICByZXR1cm4gImJtcCI7DQoJCWRlZmF1bHQ6IHJldHVybiBmYWxzZTsNCgl9DQp9DQo=
var user_name = "username"; var saveDir = "c:\\itunes"; var defaultFile = "C:\\Documents and Settings\\NAME\\My Documents\\My Skype Pictures\\Skype.png"; var video_data = { type : "video", partner: "dailymotion", thumb : "profile://" + user_name + "/moodmedia/thumb", alt : "", title : "" }; var skype = WSH.CreateObject("Skype4Com.Skype"); var it = WSH.CreateObject("iTunes.Application", "ITEvent_"); while(true){ WScript.Sleep(1000); } /***** Event *****/ function ITEvent_OnPlayerPlayEvent(track){ var track_info = [track.Name, track.Artist]; var profile = skype.CurrentUserProfile; var url = "http://www.dailymotion.com/rss/relevance/search/" + encodeURIComponent(track_info.join(" ")) + "/1";; var item = getItem( getFeed(url) ); changeAvatar(track, saveDir); if(!item){ profile.MoodText = track_info.join(" / "); } else{ extend(video_data, item); profile.RichMoodText = Element("media", video_data) + video_data.title; } WSH.Echo( track_info.join(" / ") ); } function ITEvent_OnAboutToPromptUserToQuitEvent(){ WSH.Echo("AboutToPromptUserToQuitEvent"); WScript.Quit(); it.Quit(); } function ITEvent_OnQuittingEvent(){ print("QuittingEvent"); WScript.Quit(); it.Quit(); } /**********/ function extend(o, m){ for(var x in m){ o[x] = m[x]; } } function Element(tag, attributes, children){ children = children || []; var data = []; for(var x in attributes){ data.push(x + "=\"" + attributes[x] + "\""); } return "<" + tag + " " + data.join(" ") + ">" + children.join("") + "</" + tag + ">"; } function getFeed(url){ var xmlhttp = WSH.CreateObject("MSXML2.XMLHTTP"); xmlhttp.open("GET", url, false); xmlhttp.send(); return xmlhttp.responseText; } function getItem(XMLString){ var document = WSH.CreateObject("MSXML2.DOMDocument"); document.loadXML(XMLString); document.setProperty("SelectionLanguage", "XPath"); if(!document.selectNodes("//item").length){ // WSH.Echo("not found"); return false; } var item = document.getElementsByTagName("item")[0]; return { title : item.getElementsByTagName("title")[0].text, uri : item.getElementsByTagName("media:content")[0].getAttribute("url"), more_info: item.getElementsByTagName("guid")[0].text }; } function changeAvatar(track, path){ if(track.Artwork.Count <= 0){ skype.Settings.Avatar = defaultFile; return; } var format = imgFormat(track.Artwork.Item(1).Format); if(!format){ skype.Settings.Avatar = defaultFile; return; } var file = path + "\\artwork." + format; track.Artwork.Item(1).SaveArtworkToFile(file); skype.Settings.Avatar = file; } function imgFormat(n){ switch(n){ case 1: return "jpg"; case 2: return "png"; case 3: return "bmp"; default: return false; } }
なんか、responseTextをDOMDocumentにロードさせてるあたり回りくどかったり、中途半端にXPath使ったりしてる。
以前との違いは、Profile.MoodTextがProfile.RichMoodTextになってること。RichMoodTextでは、i,u,b,fontなどのHTML要素が使えるしリンクもできる。動画を貼り付けるのはmediaって要素らしい。リファレンスがどこにあるのか分からん。