概要
レア狐魂一覧CSV整形スクリプト に移行のため、更新終了。(2015-11-23)
狐魂一覧ページから、狐魂名, URL, 勢力を読み取って Wiki テーブル化するブックマークレット。
- Opera, Chrome, Firefox 対応。
- 各狐魂の区切りは、Opera は改行コードだが、Chrome, Firefox は「[br]」になっているので、エディタで置換する必要あり。(2013-06-21 廃止)
- prompt ではなく、別タブに出力するようにした。(2013-06-21)
- CSV, PukiWikiテーブルを選択式にした。(2013-06-21)
- CCPショップだけでなく、通常のショップにも対応。(2013-06-21)
- グループ, レア度, アイコンURLもテーブルに追加。(2013-06-22)
- HTMLテーブルとして出力するオプションを設定。(2013-07-08)
ソース
-
makeCCList.zip
javascript: (function(){ if ( ! location.host.match( /concon-collector.com/ ) ){ alert( 'コンコレサイトではありません' ); return; } var ccpShopUrl = 'http://concon-collector.com/ccpshop/exchange/'; var nomarlShopUrl = 'http://concon-collector.com/shop/kokon/'; var icon40Url = 'http://c2.concon-collector.com/img/pc/card40/'; var icon60Url = 'http://c2.concon-collector.com/img/pc/card/'; var icon200Url = 'http://c2.concon-collector.com/img/pc/card200/'; /** 整形フラグ 0: CSV として整形する。 1: Puki Wiki用に整形する。 2: Table として表示 */ var formatType = 2; var fmt = [ { /* CSV */ 'init': '名前,勢力,グループ,レア度,URL,アイコン\n', 'row': function( name, power, group, rarity, url, icon ){ return name + ',' + power + ',' + group + ',' + rarity + ',' + url+ ',' + icon + '\n'; }, 'finish': '', }, { /* Puki Wiki */ 'init': '|~名前|~勢力|~グループ|~レア度|~アイコン|\n', 'row': function( name, power, group, rarity, url, icon ){ url = group != 'S' ? ccpShopUrl + url : nomarlShopUrl + url; group = group != 'S' ? '第' + group + '弾' : 'ショップ'; return '|[[' + name + '>' + url + ']]|' + 'CENTER:' + power + '|' + 'CENTER:' + group + '|' + 'CENTER:' + rarity + '|' + '[[&ref(' + icon60Url + icon + ');>' + url + ']]|' + '\n'; }, 'finish': '', }, { /* Table */ 'init': '<table border="1">\n<tr><th>名前</th><th>勢力</th><th>グループ</th><th>レア度</th><th>URL</th><th>アイコン</th></tr>\n', 'row': function( name, power, group, rarity, url, icon ){ return '<tr><th>' + name + '</th><td>' + power + '</td><td>' + group + '</td><td>' + rarity + '</td><td>' + url+ '</td><td>' + icon + '</td></tr>\n'; }, 'finish': '</table>\n', }, ][ formatType ]; location.pathname.match( /^\/(ccp)?shop\/kokon(list)?\/(\d+)\/?(\d+)?/ ); var group = RegExp.$1 ? RegExp.$3 : /* 第xx弾 */ 'S'; /* ショップ */ var rarity = RegExp.$4 || 3; var param = { true: { /* CCP Shop */ 'descPath': './tbody/tr/td[2]', 'descMatch': /★(\S+)\s*勢力\s+(\S)/, 'ccUrl': function(tbl){ return getStringByXpath( './tbody/tr/td/a/@href', tbl ); }, 'ccIcon': function(tbl){ return getStringByXpath( './/img[contains(@src, "/card/")]/@src', tbl ) || getStringByXpath( './/img[contains(@src, "/card40/")]/@src', tbl ); }, }, false: { /* Normal Shop */ 'descPath': './tbody/tr/td', 'descMatch': /★(\S+)\s*Lv\..*勢力\s+(\S)/, 'ccUrl': function(tbl){ return location.href; }, 'ccIcon': function(tbl){ return getStringByXpath( './/img[contains(@src, "/card/")]/@src', tbl ) || getStringByXpath( './/img[contains(@src, "/card40/")]/@src', tbl ); }, }, }[ group != 'S' ]; var result = fmt.init; var tables = document.getElementsByTagName('table'); for( var i=0, tbl; tbl = tables[i]; ++i ){ var desc = getStringByXpath( param.descPath, tbl ); if ( desc.match( param.descMatch ) ){ result += fmt.row( RegExp.$1, RegExp.$2, group, rarity, getLast( param.ccUrl( tbl ) ), getLast( param.ccIcon( tbl ) ) ); } } result += fmt.finish; var docNew = window.open().document; docNew.open('text/html; charset="UTF-8"').write( formatType == 0 || formatType == 1 ? htmlEscape(result).replace(/[\r\n]+/g, '<br>') : result ); docNew.close(); /** */ function getLast(path) { path.match( /([^\/]+)$/ ); return RegExp.$1; } /** XPath で指定したイテレータを得る。 */ function getIteratorByXpath(xpath, context) { return document.evaluate(xpath, context, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); } /** XPath で指定した要素のテキスト値を得る。 */ function getStringByXpath(xpath, context) { var sRet = ""; var nodeTmp = document.evaluate('string(' + xpath + ')', context, null, XPathResult.STRING_TYPE, null); if (nodeTmp) { sRet = nodeTmp.stringValue; } return sRet; } function htmlEscape(s) { return s.replace(/[&<>"']/g, function(m){ return '&#x' + m.charCodeAt(0).toString(16) + ';' }); } })(); // EOF