muxtape mp3 link

追記:2008-04-03

結婚しました

Twitter / 未承諾広告※ : 結婚しました

じゃなかった、

s/muxtape/kettle/ 勃起

Twitter / 未承諾広告※ : s/muxtape/kettle/ 勃起

だそーです。勃起

var muxtape = unsafeWindow.kettle;

追記:おしまい

うしろにあるのが$x関数とかいうやつかな?xpath使ってんなー、シメシメ。
実際の本体はえらく少ないのですな。$x('//li[@class="song"]').forEach(function(e)のうしろ8行だけか。なにやってるのかわからんな。muxtapeのユーザーページのhtmlを見ないとダメか。

  var hex = e.id.replace(/song/, '');
  var song_url = muxtape.ladles['player' + hex].song_url;

この2行だなー。

// ==UserScript==
// @name           muxtape mp3 link
// @namespace      http://d.hatena.ne.jp/youpy/
// @include        http://*.muxtape.com/
// ==/UserScript==

var muxtape = unsafeWindow.muxtape;
var ICON = '<img src="data:image/gif,GIF89a%0A%00%0A%00%B3%0F%00%F8Cj%D2%D2%D2%EA%EA%EA%F8%F8%F8%FFg%89%F9%F9%F9%FDFY%DC%0B8%FD%F5%F8%F0%27S%FE%90%A6%FBLs%FD%FD%FD%FEWz%F57%5E%FF%FF%FF!%F9%04%01%00%00%0F%00%2C%00%00%00%00%0A%00%0A%00%00%04%3A%104%E9%DCZ%EE9%C5%02%FB%8C%E2%24%1C%F0!%081*(%83%A6%C9%D6%CC%D7U%11%F8%DC%5C%09Y%0C%C0Aaq%F0%05%8E%81A%A3%A8(%08%9E%82%C2%B2%E80X%AD%87C%04%00%3B" >';

$x('//li[@class="song"]').forEach(function(e) {
  var hex = e.id.replace(/song/, '');
  var song_url = muxtape.ladles['player' + hex].song_url;
  var a = document.createElement('a');
  a.innerHTML = ICON;
  a.href = song_url;
  e.appendChild(a);
});

function $x(exp, context) {
  if (!context) context = document;
    var resolver = function (prefix) {
      var o = document.createNSResolver(context)(prefix);
      return o ? o : (document.contentType == "text/html") ? "" : "http://www.w3.org/1999/xhtml";
    }
  var exp = context.createExpression(exp, resolver);

  var result = exp.evaluate(context, XPathResult.ANY_TYPE, null);
  switch (result.resultType) {
    case XPathResult.STRING_TYPE : return result.stringValue;
    case XPathResult.NUMBER_TYPE : return result.numberValue;
    case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
    case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
      result = exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
      var ret = [];
      for (var i = 0, len = result.snapshotLength; i < len ; i++) {
        ret.push(result.snapshotItem(i));
      }
      return len != 0 ? ret : null;
    }
  }
  return null;
}

htmlの曲のとこ。(http://taizooo.muxtape.com)

			<li class="song" id="song07ab217bad39ce91c5e08f529c6301ec">
			<div class="name">Mitsuyoshi Azuma and The Swinging Boppers - 俺の家は会社</div>
			<div class="info">
				<strong>3:06</strong>
				<span class="caption">12:52 pm March 28th</span>

								<span class="loaded"></span>
			</div>
			<div class="clock"></div>
		</li>

muxtapeなんとか、なんてどこにもないがな。こりゃなんだろ?

var muxtape = unsafeWindow.muxtape;

と、

  var song_url = muxtape.ladles['player' + hex].song_url;

firebugで開いてみるか。ウーム、あとでだ。


追記:unsafeWindow???

ページ内の window オブジェクトは GM では unsafeWindow としてアクセスできる。
だからそのサイトのスクリプトを置き換えたりすることもできる。
LDR 拡張系 user.js はコレ

http://lowreal.net/2006/shibuya-js-2-lt:titile

unsafeWindow は unsafeWindow という名の通り、安全ではないオブジェクトです。サイト内スクリプトが触れる window オブジェクトをいぢくるわけですから、unsafeWindow 以下のオブジェクトに GM_xmlhttprequest などを渡してしまうと (単に引数に GM_* を渡すだけでも、コールスタックから見える状態になってしまう場合がある) 、脆弱性の引き金になります。unsafeWindow を使って書いたものを公開する場合は慎重になるべきです。

このため、unsafeWindow オブジェクトは常に「unsafeWindow」としてアクセスするように心がけ、可能な限り他の名前をつけない (代入しない) ようにし、関数の引数に GM_* は絶対に渡さないようにすべきです。

http://lowreal.net/2006/shibuya-js-2-lt:titile

ダーメだ、わかんねーよーだ