f8g

iTunesで聴いてる曲をYouTubeから探してTumblrにpost

やってることは以前のと大して変わらず。
http://d.hatena.ne.jp/arikui/20071015/1192378488
ビデオ探すのはHTMLをテキスト処理なので、YoutubeのHTMLが変わったら使えません。API使うの登録とか面倒そうだし。
user_id, passwordを変更して実行。

/* tumblr account */
var user_id  = "email@adress"; // email address
var password = "password";
/******************/

var iTunes_OnPlayerPlayEvent, iTunes_OnAboutToPromptUserToQuitEvent, iTunes_OnQuittingEvent;

new Application(user_id, password);

function Application(user_id, password){
	var self = this;
	var xmlHttp = WSH.CreateObject("MSXML2.XMLHTTP");
	var iTunes = WSH.CreateObject("iTunes.Application", "iTunes_");

	self.url = "";

	self.init = function(){
		self.addEvent();
		self.listen();
	};

	self.data = function(data){
		var _data = [];

		for(var x in data){
			_data.push(x + "=" + encodeURIComponent(data[x]) );
		}

		return _data.join("&");
	};

	self.get = function(q){
		var url = "http://jp.youtube.com/results?search_query="+q;
		xmlHttp.open("get", url, false);
		xmlHttp.send();

		var ResponseText = xmlHttp.ResponseText.replace(/\n/g, "");

		try{
			var v_data  = (/<div\sclass="vllongTitle">[^<]+<span[^>]+[^<]+<\/span>\s+<a\s([^>]+)/).exec(ResponseText)[1];
			var v_url   = "http://jp.youtube.com" + (/href="([^"]+)"/).exec(v_data)[1];
			var v_title = (/title="([^"]+)"/).exec(v_data)[1];
		}
		catch(e){
			return false;
		}

		return {
			url  : v_url,
			title: v_title
		};
	};

	self.post = function(data){
		var url = "http://www.tumblr.com/api/write";
		var send_data = self.data({
			email   : user_id,
			password: password,
			type    : "video",
			embed   : data.url,
			title   : data.title,
			caption : data.title
		});

		xmlHttp.open("post", url, false);
		xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		xmlHttp.send(send_data);

		return xmlHttp.ResponseText;
	};

	self.listen = function(){
		while(true){
			WScript.Sleep(1000);
		}
	};

	self.addEvent = function(){
		iTunes_OnPlayerPlayEvent = function(track){
			var v_data = self.get(track.Name + "+" + track.Artist);

			if(!v_data) return;
			if(self.url == v_data.url) return;

			self.url = v_data.url;
			self.post(v_data);

			WSH.Echo(track.Name + "/" + track.Artist);
		};

		iTunes_OnAboutToPromptUserToQuitEvent = function(){
			WSH.Echo("AboutToPromptUserToQuitEvent");
			WScript.Quit();
		};

		iTunes_OnQuittingEvent = function(){
			print("QuittingEvent");
			WScript.Quit();
		};
	};

	self.init();
}

本当は、関連ビデオをポストしてった方が面白いのかもしれない。
追記: 早速YoutubeのHTMLが変わっていた。とりあえずコードの方は直したけど、正規表現は難しいですね。