<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>atl*weblog &#187; program</title>
	<atom:link href="http://weblog.atl-r.net/category/program/feed/" rel="self" type="application/rss+xml" />
	<link>http://weblog.atl-r.net</link>
	<description>だるまんの覚書や感想文、日々の事を書いてます！！！！</description>
	<lastBuildDate>Thu, 18 Feb 2010 16:07:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>iPhone appのリンクをクリックしてもクソ重いiTunesを起動しないで情報だけ見るGreasemonkey</title>
		<link>http://weblog.atl-r.net/program/itunes_greasemonkey/</link>
		<comments>http://weblog.atl-r.net/program/itunes_greasemonkey/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 01:59:45 +0000</pubDate>
		<dc:creator>daruman</dc:creator>
				<category><![CDATA[program]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://weblog.atl-r.net/?p=3027</guid>
		<description><![CDATA[				
				前回までの記事の通りiPhoneについてあれこれしてたんだけど、その途中色々調べている際にどうにもiTunesが起動するappへのリンクがうっとおしい。
				というわけでiTunesが起動するリンク [...]]]></description>
			<content:encoded><![CDATA[				<p class="img_R"><img src="http://weblog.atl-r.net/wp-content/uploads/2009/11/p3027_01.png" alt="iTunesBtn" title="iTunesBtn" width="450" height="111" class="alignnone size-full wp-image-3053" /></p>
				<p>前回までの記事の通りiPhoneについてあれこれしてたんだけど、その途中色々調べている際にどうにもiTunesが起動するappへのリンクがうっとおしい。<br />
				というわけでiTunesが起動するリンクをどうにかするGreasemonkeyを作ってみる。</p>
				<p><span id="more-3027"></span></p>
				<h2>既にあった、終了！</h2>
				<p>で、本題なんだけど</p>
				<p><img width="16" height="16" alt="" src="http://favicon.hatena.ne.jp/?url=http://gist.github.com/108045" /><a href="http://gist.github.com/108045" title="gist: 108045 - GitHub" class="topic">gist: 108045 &#8211; GitHub</a></p>
				<p>と、既に<a href="http://efcl.info/" title="Web scratch">azuさん</a>がそのまんまのGreasemonkeyを作っていたりする。</p>
				<pre><code class="prettyprint">// ==UserScript==
// @name from iTunes app store to appspot.com
// @namespace http://web.zgo.jp/
// @include http://*
// ==/UserScript==
(function(){
	window.addEventListener(&quot;load&quot;, function(e){
		var aTags = document.getElementsByTagName(&quot;a&quot;);
		var urls = /http:\/\/itunes\.apple\.com\/WebObjects\/MZStore\.woa\/wa\/(.*)$/ig;
		for (var i=0; i&lt;aTags.length; i++) {
			var href = aTags[i].href;
			aTags[i].href = href.replace(urls, &quot;http://app-store.appspot.com/?url=$1&quot;);
		}
	}, false);
})();
</code></pre>
				<p>gitはまださっぱりわからないけど、今度使ってみたいな！</p>
				<h2>ちょっと手を加えてみる</h2>
				<p>ただこれだとアフィ付きリンクがうまくいかないのでちょこっと修正してみる。<br />
				あと全部のhref属性に片っ端からreplaceをかけるのでちょっと重い（気がする）、なんでその前にちょろっとreplaceするかどうかの処理を入れてやる。</p>
				<pre><code class="prettyprint">(function(){
	window.addEventListener(&quot;load&quot;, function(e){
		var aTags = document.getElementsByTagName(&quot;a&quot;);
		var urls_def = /http:\/\/itunes\.apple\.com\/WebObjects\/MZStore\.woa\/wa\/viewSoftware\?id=(.*)$/ig;
		var urls_aff = /http:\/\/click\.linksynergy\.com\/fs-bin\/stat\?id=.+?&amp;offerid=.+?&amp;type=.+?&amp;subid=.+?&amp;tmpid=.+?&amp;RD_PARM1=http%253A%252F%252Fitunes\.apple\.com%252FWebObjects%252FMZStore\.woa%252Fwa%252FviewSoftware%253Fid%253D(.*)%2526mt.*$/ig

		for (var i=0; i&lt;aTags.length; i++) {
			var href = aTags[i].href;
			if ( href.indexOf(&quot;WebObjects&quot;) == -1 ) continue;
			var urls = href.indexOf(&quot;linksynergy&quot;) != -1 ? urls_aff : urls_def;
			aTags[i].href = href.replace(urls, &quot;http://app-store.appspot.com/?url=viewSoftware?id=$1&quot;);
		}
	}, false);
})();</code></pre>
				<p>はたしてWebObjectsの有無で本当に確認できているのか実はよく分かってないが、今のところ問題は起きてない。<br />
				パラメータの順番変えられるだけで動かなくなる微妙正規表現だけど、まぁこれでいっか…。</p>
				<h2>AppStore for Webも使えるように</h2>
				<p>さて、これを先日のiPhone記事でも紹介した<a href="http://namara.moe.hm/AppStore/">AppStore for Web</a>に飛ぶようにしてみる。<br />
				といってもここまで出来てれば簡単で、replaceするアドレスを</p>
				<p><code>http://namara.moe.hm/AppStore/view.php?country=jp&amp;id=[appのid]</code></p>
				<p>にすればおｋなんだけど、折角なんで一つですむようにしてみる。</p>
				<pre><code class="prettyprint">(function(){
	window.addEventListener(&quot;load&quot;, function(e){

		var USE_SERVICE_NUM = 0; //0か1かで使用サービス切り替え
		var USE_SERVICE = new Array();
		USE_SERVICE[0] = &quot;http://namara.moe.hm/AppStore/view.php?country=jp&amp;id=&quot;;
		USE_SERVICE[1] = &quot;http://app-store.appspot.com/?url=viewSoftware?id=&quot;;

		var aTags = document.getElementsByTagName(&quot;a&quot;);
		var urls_def = /http:\/\/itunes\.apple\.com\/WebObjects\/MZStore\.woa\/wa\/viewSoftware\?id=(.*)$/ig;
		var urls_aff = /http:\/\/click\.linksynergy\.com\/fs-bin\/stat\?id=.+?&amp;offerid=.+?&amp;type=.+?&amp;subid=.+?&amp;tmpid=.+?&amp;RD_PARM1=http%253A%252F%252Fitunes\.apple\.com%252FWebObjects%252FMZStore\.woa%252Fwa%252FviewSoftware%253Fid%253D(.*)%2526mt.*$/ig

		for (var i=0; i&lt;aTags.length; i++) {
			var href = aTags[i].href;
			if ( href.indexOf(&quot;WebObjects&quot;) == -1 ) continue;
			var urls = href.indexOf(&quot;linksynergy&quot;) != -1 ? urls_aff : urls_def;
			aTags[i].href = href.replace(urls, USE_SERVICE[ USE_SERVICE_NUM ] + &quot;$1&quot;);
		}
	}, false);
})();</code></pre>
				<p>もし増やしたいサービスが増えた時楽なように配列にしてみた。<br />
				正規表現はappのidを抜き出す形になるんで、そのidを最後に追加出来るようにサービスのurlを加工して、配列servicesに追加してやりゃおｋ。<br />
				あとは変数useServiceNumをそのサービスのkeyにしてやりゃいけるかな。</p>
				<h2>Twitterの短縮URLに対応…せず</h2>
				<p>実はこのグリモンが欲しい理由の一つに、twitterのリンク踏んだらappリンクでしたのわー！というケースをどうにかしたいのもあったんだけど、twitterは短縮url使ってるんでここまでの修正じゃ動いてくれない。既に短縮URLを展開表示してくれるFirefox addonやグリモンがあるので、それを利用してる人には問題ないんだけど、個人的にはiTunesが立ち上がらないようにしたいだけなので、ちょろっと機能追加･･･しようと思ったんだけど、結構大変なんで諦めた！</p>
				<p>何が大変って短縮URLを展開する際に外部サービスのAPI使うから、レスポンス待ちとかを複数リンク分管理したり、他のグリモンとのうんぬんを考えると面倒くっせーとなってしまった。<br />
				なんで、以下のを利用すればいいと思う。</p>
				<p><img width="16" height="16" alt="" src="http://favicon.hatena.ne.jp/?url=https://addons.mozilla.org/en-US/firefox/addon/9549?version=0.4.1" /><a href="https://addons.mozilla.org/en-US/firefox/addon/9549?version=0.4.1" title="Long URL Please :: Add-ons for Firefox" class="topic">Long URL Please :: Add-ons for Firefox</a></p>
				<p><img width="16" height="16" alt="" src="http://favicon.hatena.ne.jp/?url=http://userscripts.org/scripts/show/43826" /><a href="http://userscripts.org/scripts/show/43826" title="Short URL Expander for Greasemonkey" class="topic">Short URL Expander for Greasemonkey</a></p>
				<p>グリモンのほうは俺の環境ではなぜか動かなかった＞＜</p>
				<h2>完成品</h2>
				<p>ちなみに今回の改変はオリジナル作者の<a href="http://efcl.info/" title="Web scratch">azuさん</a>にTwitterで了解を得ております、ありがとうございます。</p>
				<p>完成品（クリックするとグリモンインストール開始します）<br />
				<a href="http://weblog.atl-r.net/wp-content/uploads/2009/11/fiastb.user.js">from iTunes app store to browser</a></p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.atl-r.net/program/itunes_greasemonkey/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
