iTunes Store で買ったものも日記にメモって行く機会が増えそうなので作ってみた。完全に自分用である。
iTunesプレビューのページに『Hatena::Diary に書く』というリンクが出るようにして、コピペしなくてもいいようにしてみたが、使いかってが微妙w
はてダの asin 記法
- アーティスト: 水樹奈々
- 出版社/メーカー: キングレコード
- 発売日: 2010/01/13
- メディア: CD
- 購入: 8人 クリック: 433回
- この商品を含むブログ (124件) を見る
今回作った Greasemonkey での出力
- アーティスト:水樹奈々
- ジャンル:J-Pop, ミュージック, アニメ
- リリース:2010/1/13
- ℗ 2010 King Record Co.,Ltd
- iTunes で見る
という感じになる HTML を吐くグリモン。
ブラウザでのiTuneプレビューのページの一番下にこっそり(?)テキストエリアを追加して、その中にはてダ用の HTML を出す。
ダウンロードしてからブラウザにドラッグ&ドロップとかしてインストールしないとダメっぽいな。はじめてはてダのファイルアップロードを使ってみたけど、グリモンには向かないな……。
// ==UserScript== // @name iTunes store hatena // @namespace http://d.hatena.ne.jp/tanku/ // @description iTunes Store Page to hatena diary HTML // @include http://itunes.apple.com/jp/* // ==/UserScript== function getElementsByTagClassName(tag, klass) { var tags = document.getElementsByTagName(tag) if (tags.length <= 0) { return false; } var rets = [] for (var i = 0; i < tags.length; ++i) { if (tags[i].className == klass) { rets.push(tags[i]) } } return rets } /** ℗ が EUC に変換できないので ℗ にするのが主目的 */ function encodeHTMLUnicode(str) { var ret = ""; var len = str.length; for (var i=0; i<len; ++i) { var c = str[i].charCodeAt(); // 全部 HTML Unicode すると URL の文字数上限を簡単に超える ret += (c <= 255 || c >= 10000) ? str[i] : '&#'+c+';'; } return escape(ret); } /** '&' をエスケープしたいので encodeURL だとダメ */ function escapeHTMLUnicode(str) {return encodeHTMLUnicode(str);} function parse() { var info = {}; // id='title' var e_title = document.getElementById('title'); var e = e_title.firstChild; while (e) { if (e.tagName == 'H1') { info.title = e.firstChild.nodeValue; } else if (e.tagName == 'H2') { var a = e.firstChild; info.artist = a.firstChild.nodeValue; info.artist_link = a.href; } e = e.nextSibling; } // id='left-stack' e = getElementsByTagClassName('DIV','lockup product album music')[0].firstChild; while (e) { if (e.tagName == 'A') { var e1 = e.firstChild; if (e1.tagName == 'DIV' && e1.className == 'artwork') { var e2 = e1.firstChild; while (e2) { if (e2.tagName == 'IMG' && e2.className == 'artwork') { //info.artwork = e; info.title_url = e.href; info.artwork_img_url = e2.src; } e2 = e2.nextSibling; } } } if (e.tagName == 'UL' && e.className == 'list') { var e1 = e.firstChild; while (e1) { if (e1.className == 'genre') { info.genre = e1.innerHTML.replace(/\n/g, ""); } else if (e1.className == 'release-date') { info.release_date = e1.innerHTML.replace(/\n/g, ""); } else if (e1.className == 'copyright') { info.copyright = e1.innerHTML.replace(/\n/g, ""); } e1 = e1.nextSibling; } } e = e.nextSibling; } return info; } function write(info) { var str = '<div class="hatena-asin-detail">' + '<a href="' + info.title_url + '">' + '<img class="hatena-asin-detail-image" src="' + info.artwork_img_url + '" alt="' + info.title + '" title=' + info.title + '"></a>' + //info.artwork + '<div class="hatena-asin-detail-info">' + '<p class="hatena-asin-detail-title">' + '<a href="' + info.title_url + '">' + info.title + '</a></p>' + '<ul>' + '<li>' + '<span class="hatena-asin-detail-label">アーティスト:</span>' + '<a href="' + info.artist_link + '">' + info.artist + '</a></li>' + '<li>' + //<span class="hatena-asin-detail-label">ジャンル:</span>' + info.genre + "</li>" + '<li>' + //<span class="hatena-asin-detail-label">リリース:</span>' + info.release_date + "</li>" + '<li>' + //'<span class="hatena-asin-detail-label">:</span>' + info.copyright + "</li>" + '<li><a href="' + info.title_url + '" target="_blank">iTunes で見る</a></li>' + '</ul>' + '<div class="hatena-asin-detail-foot"></div>' + '</div></div>'; // document.body.innerHTML += var e = getElementsByTagClassName( 'DIV','lockup product album music')[0] e.innerHTML += '<a href="http://d.hatena.ne.jp/refer?appendbody='+ escapeHTMLUnicode(str) + '">Hatena::Diary に書く</a>'; document.body.innerHTML += '<form><textarea rows="8" cols="80">' + str + '</textarea></form>'; } write(parse());