マジック:ザ・ギャザリング公式サイトからカードリストのJSONを取得するグリモンスクリプト
個人的に需要がある「かもしれない」からグリモンスクリプト書いた。
jQueryもjavascriptも専門外なので、ソースが酷いのはご容赦ください。。
// ==UserScript== // @name mtg-cardlist // @namespace http://yosiopp.net/ // @description getting card list by JSON // @include http://mtg-jp.com/cardlist/list/* // ==/UserScript== // main process function main($){ function lp(o){ var n = true; var s = "{"; for(var k in o){ if(!n) s += ','; if(k == null){ s += "\"" + k + "\": null"; } else if(Object.prototype.toString.call(o[k]) === "[object Object]"){ var t = lp(o[k]); s += "\"" + k + "\":"; s += t; } else{ s += "\"" + k + "\":\"" + o[k] + "\""; } n = false; } s += "}"; return s; } function toJsonString(a){ var i; var m = true; var s = "["; for(i=0; i < a.length; i++){ var o = a[i]; if(!m) s += ','; s += lp(o); m = false; } s += "]"; return s; }; function getJson(){ var trs = $('.container .content .inner tbody').children(); var arry = new Array(trs.length/3-1); var i,j=0; for(i = 3; i < trs.length; i++){ if(i%3==0){ // name var t1 = $(trs[i].children[1]).find("a.cardlink"); var ja = t1.text(); ja = ja.substring(1, ja.length-1); var rb = t1.next().text(); var en = t1.next().attr("name").replace(/_s\+/g,"'s ").replace(/_/g,",").replace(/\+/g," "); arry[j] = { "name":{ "ja": ""+ja, "en": ""+en, "rb": ""+rb } } // image arry[j]["image"] = $(trs[i].children[0]).find("img").attr("src"); } else if(i%3==1){ // type arry[j]["type"] = $(trs[i].children[0]).text(); // cost var t2 = $(trs[i].children[1]); if(t2.find("img") && 0 < t2.find("img").length){ t2.find("img").each(function(){$(this).after("<span class=\"tmp\">" + $(this).attr("alt") + "</span>");}); arry[j]["cost"] = t2.text(); t2.find("span.tmp").remove(); } // p/t if(trs[i].children.length == 3){ var pt = $(trs[i].children[2]).text(); arry[j]["pt"] = (pt && 0 < pt.length) ? pt : null; } else{ arry[j]["pt"] = null; } } else{ // text var t3 = $(trs[i].children[0]); if(t3.find("img") && 0 < t3.find("img").length){ t3.find("img").each(function(){$(this).after("<span class=\"tmp\">" + $(this).attr("alt") + "</span>");}); arry[j]["text"] = t3.text(); t3.find("span.tmp").remove(); } else{ arry[j]["text"] = t3.text(); } j += 1; } } var s = toJsonString(arry); $("body").html(s).css({"background-color":"#fff","font-size":"120%"}); } $('.container .content h2').after("<div id=\"ins_cardlist\"><input type=\"button\" id=\"get_json\" value=\"GET JSON\" /></div>"); $('#ins_cardlist').css({"text-align":"right","margin-right":"20px"}); $("#get_json").click(getJson); } (function(d, func) { var check = function() { if (typeof unsafeWindow.jQuery == 'undefined') return false; func(unsafeWindow.jQuery); return true; } if (check()) return; var s = d.createElement('script'); s.type = 'text/javascript'; s.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js'; d.getElementsByTagName('head')[0].appendChild(s); (function() { if (check()) return; setTimeout(arguments.callee, 100); })(); })(document, function($) { main($); });
たとえばエルドラージ覚醒|カードギャラリー|マジック:ザ・ギャザリング 日本公式ウェブサイトにアクセスし、ロードが完了すると、
画面に「GET JSON」って書かれたボタンが表示されます。
ボタンを押すと、bodyの中身を全部消して代わりにJSONを表示する、という仕組み。
なんというか、いろいろ手抜きですみません。。。
jsonの構造は、こんなカンジ。
[ { "name":{ "ja":"", // 日本語カード名 "en":"", // 英語カード名 "rb":"" // 日本語カード名ひらがな }, "type":"", // カードタイプ − サブタイプ "image":"", // 画像URI "cost":"", // マナ・コスト。例){1}{W}{W} "pt":"", // P/T(存在しない場合、null) "text":"" // カードテキスト。一部の起動コストは{T}のように記載 }, ]
http://yosiopp.net/js/mtg-cardlist.user.js
不具合などあったら教えてくれると嬉しいです><;