Last active
June 7, 2017 09:30
-
-
Save ir-norn/a11da63f6365fea19f742756dae03160 to your computer and use it in GitHub Desktop.
データ更新用
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<table class=\"var_table item\"> <tr><td colspan=\"4\"><span class=\"smaller\">Lv:1 ID:<span class=\"selectedClass\">640072</span> Cls:<span class=\"selectedClass\">food_Popolion</span> Group:Drug <a href=\"#\" onclick=\"onButtonClick('item' , 640072);\">詳細(材料)</a> </span></td></tr><tr><td style=\"width:80px;\"><div class=\"ItemGradebg1\"><img src=\"./gfx/icon_item_meat_02.png\" style=\"position:relative;left:20px;top:5px;float:left;width:40px;height:40px;\" alt=\"ポポリオンの肉\"></div></td><td style=\"width:30%;\"> <div class=\"selectedClass ItemGrade\">ポポリオンの肉</div><div class=\"selectedClass ItemGrade\">포포리온 고기</div> </td><td style=\"width:30%;\"> <div class=\"selectedClass \">CoolDown 15 秒</div> <div class=\"selectedClass \">CD種類 HPPOTION</div> </td><td style=\"width:30%;\"> <div class=\"selectedClass \">種類 その他</div> </td></tr><tr><td colspan=\"2\"> <div class=\"selectedClass smaller \">HPを+80~100回復させてくれます。簡単に入手できる肉です。生で食べても美味しいです。右クリックで使用します。</div> </td><td colspan=\"2\"> <a href=\"#\" onclick=\"onButtonClick('monster' , 58009);\" class=\"toolTip\">ポポリオン<span> パウフィスの渡し場 LV12</span></a> <a href=\"#\" onclick=\"onButtonClick('monster' , 400981);\" class=\"toolTip\">ポポリオン<span>(20% シャウレイ東の森 LV6)</span></a> <a href=\"#\" onclick=\"onButtonClick('monster' , 400984);\" class=\"toolTip\">オレンジポポリオン<span>(10% アレルノー男爵領 LV84)</span></a> </td></tr></table> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<table class=\"var_table monster\"> <tr><td colspan=\"10\"><span class=\"smaller\">LV:1 ID:<span class=\"selectedClass\">58005</span> Cls:<span class=\"selectedClass\">Sec_Onion</span> <a href=\"#\" onclick=\"onButtonClick('monster' , 58005);\">単体表示</a> </span></td></tr><tr><td colspan=\"2\" style=\"width:60px;\"><div><img src=\"./gfx/monster/mon_onion.png\" style=\"float:left;width:60px;height:60px;\" alt=\"ケッピー\"></div></td><td colspan=\"4\" style=\"width:40%;\"><div class=\"selectedClass monrank_Normal\">ケッピー</div> </td><td colspan=\"2\" style=\"width:15%;\"> <div class=\"selectedClass \">徒歩</div> </td><td colspan=\"1\" style=\"width:15%;\"> <div class=\"selectedClass \">種類 Normal</div> <div class=\"selectedClass \">サイズ S</div> </td><td colspan=\"1\" style=\"width:20%;\"> <div class=\"selectedClass \">属性 Poison</div> <div class=\"selectedClass \">クロース</div> </td></tr><tr> <td colspan=\"2\">物攻<span style=\"font-size:0.5em\">(STR)</span></td><td colspan=\"2\">9~11(6)</td><td>魔攻<span style=\"font-size:0.5em\">(INT)</span></td><td>7~9(3)</td><td>ATKRatio:0.9</td><td colspan=\"3\">ジャッジデバフ(MATK:-0, MDEF:-2)</td> </tr><tr> <td>HP</td><td>17</td><td>物防</td><td>2</td><td>魔防<span style=\"font-size:0.5em\">(SPR)</span></td><td>999(99)</td><td>クリ抵抗</td><td>7</td><td>経験値(exp/job)</td><td>16/12</td> </tr><tr><td colspan=\"6\"> <div class=\"selectedClass nocopy\">マップ レンパリサ池 LV1☆1(70匹)</div> </td><td colspan=\"4\"> <div class=\"selectedClass smaller \">それほど強いモンスターではありませんが、むやみに攻撃すると痛い目に遭うでしょう。</div> </td></tr><tr><td colspan=\"10\"> <div class=\"selectedClass nocopy\"><a href=\"#\" onclick=\"onButtonClick('item' , 643581);\">ケッピーのジェム</a> <a href=\"#\" onclick=\"onButtonClick('item' , 645117);\">ケッピーの茎</a> <a href=\"#\" onclick=\"onButtonClick('material' , 221101);\">ウッドシールド</a> <a href=\"#\" onclick=\"onButtonClick('material' , 628054);\">ケッピーのぬいぐるみ</a> </div> </td></tr></table> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding:utf-8 | |
require "nokogiri" | |
require "kconv" | |
require 'json' | |
Dir.chdir File.dirname __FILE__ | |
require "./tosneet_kaiseki_equip.rb" | |
require "./new_db_data_equip.rb" | |
ids = Dir["tosneet3/equip_*.html"].map do |m| | |
# ids = Dir["tosneet4/*.html"].map do |m| | |
m =~ /(\d+).html/ | |
$1 | |
# exit | |
end | |
#p ids | |
#exit | |
#id = "203204" | |
file = "b_data_json.js" | |
db_ary = open( file ).read.toutf8.each_line.to_a | |
# id = "521211" # ADD | |
# new_db_data_equip id , file , db_ary | |
# id = "523317" # ADD | |
# new_db_data_equip id , file , db_ary | |
ids.each do | id | | |
p id | |
new_db_data_equip id , file , db_ary | |
end | |
json_output file , db_ary | |
# ------------------- ADD ------------------ | |
tmp = $add_data.flatten.each_slice(2).inject("") do | tmp , ( id , src ) | | |
# ssrc = ssrc || $template | |
tmp += add_data_create id , src | |
tmp | |
end | |
p "------------------" | |
puts tmp | |
file = "data_json_add.js" | |
s = open( file ).read.toutf8.each_line.to_a | |
json_output_add file , s , tmp |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding:utf-8 | |
require "nokogiri" | |
require "kconv" | |
require 'json' | |
class Hash | |
def rename_key(old:, new:) | |
return unless has_key?(old) | |
return if has_key?(new) | |
self[new] = self.delete(old) | |
self | |
end | |
end | |
Dir.chdir File.dirname __FILE__ | |
require "./trans_load.rb" # $trans 定義 | |
$template = open( "equip_template.txt" ).read.toutf8 | |
$add_data = [] # 新規データを [ id ,src ]で格納 | |
require "./tosneet_kaiseki_equip.rb" | |
if $0 == __FILE__ | |
# id = "103304" # パザリタ | |
# id = "114002" | |
# 4 | |
id = "582127" # agni | |
# pas = "./tosneet_jp/Armor_#{id}.html" | |
pas = "./tosneet_kr/Armor_#{id}.html" | |
pas = "./tosneet3/equip_#{id}.html" | |
id = "202151" | |
pas = "./tosneet_kr_315/equip_#{id}.html" | |
file = "b_data_json.js" | |
db_ary = open( file ).read.toutf8.each_line.to_a | |
end | |
def new_db_data_equip id , pas , file , db_ary | |
rep = {} | |
# rep = tosneet_kaiseki_equip "./tosneet4/equip_#{id}.html" | |
rep = tosneet_kaiseki_equip pas #{ }"./tosneet3/equip_#{id}.html" | |
rep.each do |k,v| | |
puts k,v | |
end | |
# <span> </span>とか、 そういうのを取るeach | |
rep.clone.each do |k,v| | |
if k =~ /Sockets/ or | |
k =~ /물리 방어력|마법 방어력|마법 공격력|공격력/ | |
c = k.gsub(/<span.*?>/m,"") | |
c.gsub!(/<\/span>/,"") | |
rep.rename_key(old: k, new: c) | |
d = v.gsub(/<span.*?>/m,"") | |
d.gsub!(/<\/span>/,"") | |
puts rep[ k ] = d | |
end | |
end | |
p rep | |
# exit | |
#rep["Sockets"] =~ /.*(\d)/ | |
#rep["Sockets"] = $1 || "0" | |
p rep["Sockets"] | |
# $trans.push "ID" , "en" , "" , | |
# - - 装備以外 | |
if rep["Durability"] == nil | |
p :dur_nil ; return | |
end | |
instance_exec(rep["Type"].split) do | t | | |
$trans.each_slice(4).any? do |a,b,c,d| | |
next if b.nil? or c.nil? or b.size.zero? or c.size.zero? | |
if rep["name"] == d then rep["name"] = c ; next end | |
if rep["desc"] == d then rep["desc"] = c ; next end | |
if rep["Type"] == d then rep["Type"] = c ; next end | |
if t[0] == d then t[0] = c ; next end | |
if t[1] == d then t[1] = c ; next end | |
end | |
if t[1] | |
rep["Type"] = t[1] + "[" + t[0] + "]" | |
end | |
end | |
instance_exec(rep["name"].split) do | t | | |
$trans.each_slice(4) do |a,b,c,d| | |
next if b.nil? or c.nil? or b.size.zero? or c.size.zero? | |
# if t[0] == d then t[0] = c ; next end | |
# if t[1] == d then t[1] = c ; next end | |
t.dup.each_with_index.any? do |m,i| | |
if m == d | |
t[i] = c | |
end | |
end | |
end | |
if t[1] | |
rep["name"] = "" | |
t.each do |m| rep["name"] += m end | |
end | |
end | |
puts rep["name"] | |
rp = [] | |
rep = rep.map do |k ,v| | |
if (k =~ /data-tip="(.*?)"/) or (k =~ /( -.*)/) | |
en = $1 | |
tmp = "" | |
kr = "" | |
trans_flg = $trans.each_slice(4).any? do |a,b,c,d| | |
next if b.nil? or c.nil? or b.size.zero? or c.size.zero? | |
next if (en != b) and (v != d) | |
if v == d | |
kr = c | |
break false | |
end | |
# 同名のOPがあった場合の印を解読してkeyの語尾に数値をつける。 | |
if k =~ /add_hash(\d+)/ | |
tmp = c + $1 | |
else | |
tmp = c | |
end | |
true | |
end # trans | |
if trans_flg # 英語を翻訳して表示 | |
rp << [ tmp , v ] | |
elsif kr.empty?.! # krを翻訳して表示 | |
rp << [ en , kr ] | |
else # 翻訳データが無かった場合、そのまま OP に表示 | |
k = k.gsub("\"","\\\"") | |
v = v.gsub("\"","\\\"") | |
rp << [ k , v ] | |
end | |
end | |
[ k , v ] | |
end | |
# $trans.each_slice(4).any? do |a,b,c,d| | |
# next if b.nil? or c.nil? or b.size.zero? or c.size.zero? | |
# # rep["name"].split(/-/).map(&:strip).each do |m| | |
# # if (m == b) || (m == d) | |
# # recipe_ja.sub!(m , c) | |
# # end | |
# # end | |
# # end | |
# # puts rep["name"] = recipe_ja | |
# end | |
rep = Hash[rep] | |
#puts rep | |
puts rp = Hash[*rp.flatten] | |
if rp["攻撃力"] then rp["攻撃力"].sub!(" - ","~") end | |
if rp["魔法攻撃力"] then rp["魔法攻撃力"].sub!(" - ","~") end | |
# tosneet_hs | |
reghs = {} | |
reghs["ILV"] = /<span class=\\"smaller\\">ILV:(.*?) ID:</i | |
reghs["desc"] = /<div class=\\"selectedClass smaller \\">(.*?)<\/div>/ | |
reghs["ID"] = /ID:<span class=\\"selectedClass\\">(.*?)<\/span>/ | |
reghs["classname"] = /Cls:<span class=\\"selectedClass\\">(.*?)<\/span>/ | |
reghs["recipe"] = /<a href=\\"#\\" onclick=\\"onButtonClick\('recipe' , (.*?)\);\\">製造書あり<\/a>/ | |
reghs["materials"] = /<a href=\\"#\\" onclick=\\"onButtonClick\('material' , (.*?)\);\\">詳細\(材料\)<\/a>/ | |
reghs["gfx"] = /<img src=\\"(.*?)\\"/ | |
reghs["ItemGradebg"] = /ItemGradebg(\d)/ | |
reghs["ItemGrade"] = /<div class=\\"selectedClass ItemGrade(\d)\\">.*?<\/div> <\/td><td>/ | |
reghs["type"] = /<td><div class=\\"selectedClass \\">(.*?)<\/div> <\/td><td style/ | |
reghs["grade"] = /10%;\\"><div class=\\"selectedClass nocopy\\">(.*?)<\/div>/ | |
reghs["stats"] = /<td style=\\"width:20%;\\">(.*?)<\/td>/ | |
reghs["LV-equip"] = /<div class=\\"selectedClass nocopy\\">装備LV (.*?)<\/div>/ | |
reghs["pote"] = /<div class=\\"selectedClass nocopy\\">ポテ (.*?)<\/div>/ | |
reghs["op"] = /<td colspan=\\"3\\" rowspan=\\"2\\">(.*?)<\/td>/ | |
reghs["drop"] = /<\/td><td colspan=\\"3\\">(.*?)<\/td><\/tr><tr>/ | |
# reghs["name"] = /<div class=\\"selectedClass ItemGrade\d\\">(.*?)<\/div>/ | |
# reghs["name"] = /width:30\%;\\">(.*?)<\/td><td>/ | |
reghs["namegrade"] = /width:30\%;\\"> <div class=\\"selectedClass ItemGrade(\d)\\">.*?<\/div> <\/td><td>/ | |
reghs["name"] = /width:30\%;\\"> <div class=\\"selectedClass ItemGrade\d\\">(.*?)<\/div> <\/td><td>/ | |
reghs["name2"] = /height:40px;\\" alt=\\"(.*?)\\"><\/div>/ | |
# reghs["name"] = /<div class=\\"selectedClass ItemGrade\d\\">(.*?)<\/div><div class=\\"selectedClass ItemGrade\d\\">(.*?)<\/div> <\/td><td>/ | |
reghs["hosi"] = /<\/div> <div class=\\"selectedClass nocopy\\">(.*?)<\/div> <\/td>/ | |
# <div class=\"selectedClass nocopy\">魔防 65</div> <div class=\"selectedClass nocopy\"> 耐久 38</div> | |
# reghs["sockets"] = // | |
hs = {} | |
hs["stats"] = "" | |
p rep["visual_pass"] | |
# 盾だけ visualが weaponフォルダにあるのでTypeチェック | |
# false == 消す 、 true 消さない | |
def_flg = false | |
mdef_flg = false | |
atk_flg = false | |
matk_flg = false | |
if (rep["visual_pass"] =~ /weapon/) and (rep["Type"] != "방패") and (rep["Type"] != "盾") | |
if rp["攻撃力"] and ( rp["攻撃力"].to_i > 0 or (rp["攻撃力"] =~ /~/) ) | |
hs["stats"] += "物攻 " + rp["攻撃力"] + "<br>" | |
end | |
if rp["魔法攻撃力"] and ( rp["魔法攻撃力"].to_i > 0 or (rp["魔法攻撃力"] =~ /~/) ) | |
hs["stats"] += "魔攻 " + rp["魔法攻撃力"] + "<br>" | |
end | |
def_flg = rp["物理防御力"] and (rp["物理防御力"].to_i < 0) | |
mdef_flg = rp["魔法防御力"] and (rp["魔法防御力"].to_i < 0) | |
# ハーベスタとか、魔法攻撃力を下げる武器用フラグ | |
atk_flg = (rp["攻撃力"].to_i > 0 or (rp["攻撃力"] =~ /~/) ).! | |
matk_flg = (rp["魔法攻撃力"].to_i > 0 or (rp["魔法攻撃力"] =~ /~/) ).! | |
else | |
if rp["物理防御力"] | |
hs["stats"] += "物防 " + rp["物理防御力"] + "<br>" | |
end | |
if rp["魔法防御力"] | |
hs["stats"] += "魔防 " + rp["魔法防御力"] + "<br>" | |
end | |
atk_flg = rp["攻撃力"] and (rp["攻撃力"].to_i < 0) | |
matk_flg = rp["魔法攻撃力"] and (rp["魔法攻撃力"].to_i < 0) | |
# 防御力を下げる防具があった場合、 | |
def_flg = (rp["物理防御力"].to_i > 0).! | |
mdef_flg = (rp["魔法防御力"].to_i > 0).! | |
end | |
# アグニ 氷 雷 | |
["582127", "炎", "582129" , "氷" ,"582128" , "雷"].each_slice(2) do | nid , zoku | | |
next if rep["ClassID"] != nid | |
hs["stats"] += "#{zoku}属性攻撃力 " + (rp["#{zoku}属性の攻撃力"] ||rp["#{zoku}属性攻撃力"]) + "<br>" | |
rp.delete_if do |k,v| | |
k =~ /#{zoku}属性の攻撃力/ or | |
k =~ /#{zoku}属性攻撃力/ | |
end | |
end | |
# | |
hs["stats"] += "耐久 " + rep["Durability"] + "<br>" | |
hs["op"] = " " # 半角スペース2個以上 | |
if rep["visual_pass"] =~ /weapon/ | |
if not atk_flg then rp.delete"攻撃力" end | |
if not matk_flg then rp.delete"魔法攻撃力" end | |
end | |
if not def_flg then rp.delete"物理防御力" end | |
if not mdef_flg then rp.delete"魔法防御力" end | |
rp.each do |k,v| | |
puts k | |
k = k.delete("1234567890") # 2個目以降の同名OP判定のフラグ消す | |
# color = v.to_i > 0 ? "red" : "blue" | |
color = case v.to_i | |
when 0 then "" | |
when 1..Float::INFINITY then "red" | |
else "blue" end | |
pulsm = v.to_i > 0 ? "+" : "" | |
hs["op"] += "#{k} " + "<span style=\\\"color:#{color}\\\">#{pulsm}#{v}</span>" + "<br>" | |
end | |
#p rep | |
#exit | |
# tosgbaseのレシピのURLがClassIDではないので、Crafted formでは無理 | |
# hs["recipe"] = rep["Crafted from"] || "" | |
hs["recipe"] = "" || rep["Crafted from"] || "" | |
hs["materials"] = rep["ClassID"] || "9999" | |
hs["gfx"] = "./gfx/"+rep["visual"] || "nil" | |
hs["ItemGrade"] = rep["Grade"] || "1" | |
hs["ItemGradebg"] = rep["Grade"] || "1" | |
hs["namegrade"] = rep["Grade"] || "1" | |
hs["type"] = rep["Type"] || "type" | |
hs["type"] = rep["Type"] + "<br>ソケ " + (rep["Sockets"] || "0" ) | |
hs["grade"] = ["nil","Common","Magic","Rare","Unique","Legend"][ (rep["Grade"] || "1").to_i ] | |
# hs["grade"] = ["nil","Common","Magic","Rare","Unique","Legend"][ (rep["Grade"] || "1").to_i ] | |
hs["pote"] = rep["Potential"] || "pote" | |
hs["drop"] = rep["drop"] || "ドロップデータ不明" | |
hs["ILV"] = rep["Item Level"] || "" # Item Level変える | |
hs["LV-equip"] = rep["Min. Level"] || "_" | |
hs["desc"] = rep["desc"] || "desc" | |
hs["ID"] = rep["ClassID"] || "9999" | |
hs["classname"] = rep["ClassName"] || "class_name" | |
hs["name"] = rep["name"] || "name" | |
hs["name2"] = rep["name"] || "name2" | |
hs["hosi"] = rep["Rank"] || "☆" | |
hs["hosi"] =~ /(\d+)/ | |
hs["hosi"] = "☆#{$1}" | |
hs["weight"] = "" | |
hs[""] = "" | |
# ------------------------ | |
# p hs["hosi"] | |
# p hs["grade"] | |
# exit | |
def func_replace db , id , hs , reghs | |
db_tmp = db[1].dup | |
ssrc = db[1].to_s.scan(/{"id":"(\d+)","src":"(<table.*?table>)"},/).any? do | sid , ssrc | | |
next false if sid != id | |
break ssrc | |
end | |
exi = ssrc.!.! | |
ssrc = ssrc || $template.dup | |
tmp = ssrc.dup | |
reghs.each do | key , value | | |
if hs[ key ].nil? then print key ,"is nil\n" ; next ; end | |
# next if ["name","name2","desc"].include? key | |
next if hs[ key ].empty? | |
# 同じIDをクラスIDで判別する処理だけど、別の場所におかないとやばい | |
# ssrc =~ /Cls:<span class=\\"selectedClass\\">(.*?)<\/span>/ | |
# next if $1 != hs["classname"] | |
ssrc =~ reghs[ key ] | |
p key | |
p value | |
p a = $& | |
p b = $1 | |
p "---err---" if b == nil | |
next if not b | |
ssrc.sub!(a , a.sub( b , hs[ key ] ) ) | |
end | |
if exi | |
db_tmp.sub!( tmp , ssrc ) | |
db[1] = db_tmp | |
else | |
if hs["recipe"].empty? | |
ssrc.sub!( reghs["recipe"] , "" ) | |
end | |
end | |
$add_data << [ hs["ID"] , ssrc ] | |
puts ssrc | |
p exi | |
end | |
func_replace db_ary , id , hs , reghs | |
end # func | |
def json_output file , db_ary | |
open( "_" + file, 'w') do |io| | |
io.print db_ary[0] # function data_js_json() { | |
io.print db_ary[1] # return [{ }] | |
io.print db_ary[2] # } | |
end | |
end | |
# --------------- ADD ----------------- | |
def json_output_add file , tabledata , add_data | |
s = tabledata | |
add_data.gsub!("\\\\\"","\"") | |
tmp = "" | |
tmp << s[0] | |
tmp << s[1][0..-3] | |
tmp << add_data | |
tmp << "]\n}" | |
open( "_" + file ,"w") do |f| | |
f.print tmp | |
end | |
end | |
def add_data_create id , src | |
"," + ({"id"=>"#{id}", "src"=>src}).to_s.gsub("\"=>\"","\":\"") | |
end | |
if $0 == __FILE__ | |
new_db_data_equip id , pas , file , db_ary | |
json_output file , db_ary | |
tmp = $add_data.flatten.each_slice(2).inject("") do | tmp , ( id , src ) | | |
# ssrc = ssrc || $template | |
p "-------" | |
puts id | |
p "-------" | |
puts src | |
p "-------" | |
tmp += add_data_create id , src | |
tmp | |
end | |
if not tmp.empty? | |
file = "data_json_add.js" | |
s = open( file ).read.toutf8.each_line.to_a | |
json_output_add file , s , tmp | |
end | |
# --------------------------------------- | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding:utf-8 | |
require "nokogiri" | |
require "kconv" | |
require 'json' | |
Dir.chdir File.dirname __FILE__ | |
$template = open( "item_template.txt" ).read.toutf8 | |
# | |
# #puts template | |
# reg = /ATKRatio:.*?<\/td><td colspan=\\"3\\">ジャッジデバフ(.*?)<\/td>/ | |
# | |
# template =~ reg | |
# a = $& | |
# b = $1 | |
# template.sub!(a , a.sub( b , "44444" ) ) | |
# puts template | |
reghs = {} | |
reghs["LV"] = /<span class=\\"smaller\\">LV:(.*?) ID:</i | |
reghs["desc"] = /<div class=\\"selectedClass smaller \\">(.*?)<\/div>/ | |
reghs["ID"] = /ID:<span class=\\"selectedClass\\">(.*?)<\/span>/ | |
reghs["classname"] = /Cls:<span class=\\"selectedClass\\">(.*?)<\/span>/ | |
reghs["gfx"] = /<img src=\\"(.*?)\\"/ | |
reghs["ItemGradebg"] = /ItemGradebg(\d)/ | |
reghs["drop"] = /<\/td><td colspan=\\"2\\">(.*?)<\/td><\/tr><\/table>/ | |
reghs["name"] = /width:30\%;\\"> <div class=\\"selectedClass ItemGrade\\">(.*?)<\/div> <\/td>/ | |
reghs["name2"] = /height:40px;\\" alt=\\"(.*?)\\"><\/div>/ | |
reghs["desc2"] = /<\/td><td style=\\"width:30%;\\"> <div class=\\"selectedClass \\">(.*?)<\/div> <\/td><td/ | |
reghs["type"] = /<td style=\\"width:30%;\\"> <div class=\\"selectedClass \\">種類 (.*?)<\/div> <\/td><\/tr><tr>/ | |
reghs["group"] = /<\/span> Group:(.*?) <a/ | |
reghs["materials"] = /<a href=\\"#\\" onclick=\\"onButtonClick\('.*?' , (.*?)\);\\">詳細\(材料\)<\/a>/ | |
# <div class=\"selectedClass nocopy\">魔防 65</div> <div class=\"selectedClass nocopy\"> 耐久 38</div> | |
hs = {} | |
hs["materials"] = "" | |
hs["group"] = "_" | |
hs["desc2"] = "xx23" | |
hs["desc2"] = "desc2" | |
hs["gfx"] = "gfx/" | |
hs["ItemGradebg"] = "1" | |
hs["type"] = "その他" | |
hs["drop"] = "ドロップデータ不明" | |
hs["LV"] = "_" | |
hs["desc"] = "description" | |
hs["ID"] = "99999" | |
hs["classname"] = "x123" | |
hs["name"] = "アイテム名" | |
hs["name2"] = "アイテム名2" | |
hs["hosi"] = "☆nnn" | |
hs["weight"] = "" | |
hs[""] = "" | |
file = "b_data_json.js" | |
id = "640072" | |
# id = "58577" | |
db_ary = open( file ).read.toutf8.each_line.to_a | |
def func_replace db , id , hs , reghs | |
db_tmp = db[1].dup | |
db[1].to_s.scan(/{"id":"(\d+)","src":"(<table.*?table>)"},/) do | sid , ssrc | | |
next if sid != id | |
# ssrc = $template | |
# p "***---gsub---ssrc-----parse_src------" | |
tmp = ssrc.dup | |
reghs.each do | key , value | | |
next if hs[ key ].empty? | |
# puts ssrc ; exit | |
ssrc =~ reghs[ key ] | |
p key | |
p a = $& | |
p b = $1 | |
next if not b | |
if key == "追加情報のある項目1" | |
# rep = hs[ key ] + "" | |
elsif key == "M追加情報のある項目2" | |
# rep = hs[ key ] + "" | |
else | |
rep = hs[ key ] | |
end | |
ssrc.sub!(a , a.sub( b , rep ) ) | |
end | |
puts ssrc | |
# exit | |
db_tmp.sub!( tmp , ssrc) | |
end | |
db[1] = db_tmp | |
end | |
func_replace db_ary , id , hs , reghs | |
def json_output file , db_ary | |
open( "_" + file, 'w') do |io| | |
io.print db_ary[0] # function data_js_json() { | |
io.print db_ary[1] # return [{ }] | |
io.print db_ary[2] # } | |
end | |
end | |
json_output file , db_ary |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding:utf-8 | |
require "nokogiri" | |
require "kconv" | |
require 'json' | |
Dir.chdir File.dirname __FILE__ | |
$template = open( "monster_template.txt" ).read.toutf8 | |
$trans = open("dump_trans.txt").read.toutf8.each_line.to_a.map do |m| m.chomp end | |
require "./tosneet_kaiseki_monster.rb" | |
if $0 == __FILE__ | |
id = "57679" | |
file = "b_data_json.js" | |
db_ary = open( file ).read.toutf8.each_line.to_a | |
end | |
def new_db_data_monster id , file , db_ary | |
rep = {} | |
rep = tosneet_kaiseki "./tosneet3/npcs_#{id}.html" | |
p rep | |
if rep["ATK"] then rep["ATK"].sub!(" ~ ","~") end | |
if rep["MATK"] then rep["MATK"].sub!(" ~ ","~") end | |
rep.each do |k,v| | |
v.gsub!(/(\d)\s(\d)/, '\1,\2') | |
v.replace v.to_s.gsub(/(\d)(?=(\d{3})+(?!\d))/, '\1,') | |
end | |
# p rep | |
reghs = {} | |
reghs["MDEF"] = /魔防<span style=\\".*?\\">\(SPR\)<\/span><\/td><td>(.*?)<\/td>/ | |
reghs["ATK"] = /物攻<span style=\\".*?\\">\(STR\)<\/span><\/td><td.*?>(.*?)</ | |
reghs["MATK"] = /魔攻<span style=\\".*?\\">\(INT\)<\/span><\/td><td.*?>(.*?)</ | |
reghs["HP"] = /<td>HP<\/td><td>(.*?)<\/td>/ | |
reghs["DEF"] = /物防<\/td><td>(.*?)<\/td>/ | |
reghs["CON"] = /クリ抵抗<\/td><td>(.*?)<\/td>/ | |
reghs["EXP"] = /経験値\(exp\/job\)<\/td><td>(.*?)<\/td>/ | |
reghs["LV"] = /<span class=\\"smaller\\">LV:(.*?) ID:</ | |
reghs["ATAKRatio"] = /ATKRatio:(.*?)<\/td><td colspan=\\"3\\">ジャッジデバフ.*?<\/td>/ | |
reghs["jdebuff"] = /ATKRatio:.*?<\/td><td colspan=\\"3\\">ジャッジデバフ(.*?)<\/td>/ | |
reghs["found-in"] = /6\\"> <div class=\\"selectedClass nocopy\\">(.*?)<\/div>/ | |
reghs["desc"] = /<div class=\\"selectedClass smaller \\">(.*?)<\/div>/ | |
reghs["drop"] = /10\\"> <div class=\\"selectedClass nocopy\\">(.*?)<\/div>/ | |
reghs["ID"] = /ID:<span class=\\"selectedClass\\">(.*?)<\/span>/ | |
reghs["classname"] = /Cls:<span class=\\"selectedClass\\">(.*?)<\/span>/ | |
reghs["ID2"] = /<a href=\\"#\\" onclick=\\"onButtonClick\('monster' , (.*?)\);\\">単体表示<\/a>/ | |
reghs["gfx"] = /<div><img src=\\"(.*?)\\" style=\\"float:left;width:60px;height:60px;\\" alt=\\".*?\\"><\/div>/ | |
reghs["name2"] = /<div><img src=\\".*?\\" style=\\"float:left;width:60px;height:60px;\\" alt=\\"(.*?)\\"><\/div>/ | |
reghs["name"] = /<div class=\\"selectedClass monrank_.*?\\">(.*?)<\/div>/ | |
reghs["RANK"] = /<div class=\\"selectedClass monrank_(.*?)\\">.*?<\/div>/ | |
reghs["movement"] = /width:15%;\\"> <div class=\\"selectedClass \\">種類 (.*?)<\/div>/ | |
reghs["size"] = /<div class=\\"selectedClass \\">サイズ (.*?)<\/div>/ | |
reghs["attribute"] = /<div class=\\"selectedClass \\">属性 (.*?)<\/div/ | |
reghs["armor"] = /属性 .*?<\/div> <div class=\\"selectedClass \\">(.*?)<\/div>/ | |
hs = {} | |
hs["MDEF"] = rep["MDEF"] || "" | |
hs["ATK"] = rep["ATK"] || "" | |
hs["MATK"] = rep["MATK"] || "" | |
hs["HP"] = rep["HP"] || "" | |
hs["SP"] = rep["SP"] || "" | |
hs["DEF"] = rep["DEF"] || "" | |
hs["CON"] = rep["CON"] || "" | |
hs["STR"] = rep["STR"] || "" | |
hs["INT"] = rep["INT"] || "" | |
hs["SPR"] = rep["SPR"] || "" | |
hs["DEX"] = rep["DEX"] || "" | |
hs["EXP"] = rep["EXP"] || "" | |
hs["JOB"] = rep["Class EXP"] || "" | |
hs["LV"] = rep["LV"] || "" | |
hs["ATAKRatio"] = " - " | |
hs["jdebuff"] = " - " | |
hs["found-in"] = "" | |
hs["desc"] = "" | |
hs["drop"] = "" | |
hs["ID"] = "" | |
hs["ID2"] = "" | |
hs["classname"] = "" | |
hs["gfx"] = "" | |
hs["name"] = "" | |
hs["name2"] = "" | |
hs["movement"] = "" | |
hs["size"] = rep["size"] || "" | |
hs["attribute"] = "" # 種類 ,, ケッピー == poison | |
hs["armor"] = "" # クロース ,, プレート... | |
hs["RANK"] = "" # Nomal ,, Boss | |
hs["acc"] = "" | |
hs["eva"] = "" | |
hs["jounal"] = "" | |
hs["debuffable"] = "" | |
hs["crit-immune"] = "" | |
hs[""] = "" | |
def func_replace db , id , hs , reghs | |
db_tmp = db[1].dup | |
db[1].to_s.scan(/{"id":"(\d+)","src":"(<table.*?table>)"},/) do | sid , ssrc | | |
next if sid != id | |
# ssrc = $template | |
# p "***---gsub---ssrc-----parse_src------" | |
tmp = ssrc.dup | |
reghs.each do | key , value | | |
next if hs[ key ].empty? | |
ssrc =~ reghs[ key ] | |
p key | |
p a = $& | |
p b = $1 | |
next if not b | |
rstr = "" | |
if key == "ATK" | |
rstr = hs[ key ] + "("+hs[ "STR" ] +")" | |
elsif key == "MATK" | |
rstr = hs[ key ] + "("+hs[ "INT" ] +")" | |
elsif key == "MDEF" | |
rstr = hs[ key ] + "("+hs[ "SPR" ] +")" | |
elsif key == "EXP" | |
rstr = hs[ key ] + "/"+hs[ "JOB" ] | |
else | |
rstr = hs[ key ] | |
end | |
ssrc.sub!(a , a.sub( b , rstr ) ) | |
end | |
puts ssrc | |
# exit | |
db_tmp.sub!( tmp , ssrc) | |
end | |
db[1] = db_tmp | |
end | |
func_replace db_ary , id , hs , reghs | |
end # func | |
def json_output file , db_ary | |
open( "_" + file, 'w') do |io| | |
io.print db_ary[0] # function data_js_json() { | |
io.print db_ary[1] # return [{ }] | |
io.print db_ary[2] # } | |
end | |
end | |
if $0 == __FILE__ | |
new_db_data_monster id , file , db_ary | |
json_output file , db_ary | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding:utf-8 | |
require "nokogiri" | |
require "kconv" | |
require 'json' | |
Dir.chdir File.dirname __FILE__ | |
require "./tosneet_kaiseki_monster.rb" | |
require "./new_db_data_monster.rb" | |
ids = Dir["tosneet3/npcs_*.html"].map do |m| | |
m =~ /(\d+).html/ | |
$1 | |
end | |
#id = "203204" | |
file = "b_data_json.js" | |
db_ary = open( file ).read.toutf8.each_line.to_a | |
ids.each do | id | | |
p id | |
new_db_data_monster id , file , db_ary | |
end | |
json_output file , db_ary |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding:utf-8 | |
require "nokogiri" | |
require "kconv" | |
require 'json' | |
Dir.chdir File.dirname __FILE__ | |
$template = open( "monster_template.txt" ).read.toutf8 | |
# | |
# #puts template | |
# reg = /ATKRatio:.*?<\/td><td colspan=\\"3\\">ジャッジデバフ(.*?)<\/td>/ | |
# | |
# template =~ reg | |
# a = $& | |
# b = $1 | |
# template.sub!(a , a.sub( b , "44444" ) ) | |
# puts template | |
reghs = {} | |
reghs["MDEF"] = /魔防<span style=\\".*?\\">\(SPR\)<\/span><\/td><td>(.*?)<\/td>/ | |
reghs["ATK"] = /物攻<span style=\\".*?\\">\(STR\)<\/span><\/td><td.*?>(.*?)</ | |
reghs["MATK"] = /魔攻<span style=\\".*?\\">\(INT\)<\/span><\/td><td.*?>(.*?)</ | |
reghs["HP"] = /<td>HP<\/td><td>(.*?)<\/td>/ | |
# DEF | |
reghs["DEF"] = /物防<\/td><td>(.*?)<\/td>/ | |
# CON | |
reghs["CON"] = /クリ抵抗<\/td><td>(.*?)<\/td>/ | |
# EXP | |
reghs["EXP"] = /経験値\(exp\/job\)<\/td><td>(.*?)<\/td>/ | |
# LV | |
reghs["LV"] = /<span class=\\"smaller\\">LV:(.*?) ID:</ | |
# ATAKRatio | |
reghs["ATAKRatio"] = /ATKRatio:(.*?)<\/td><td colspan=\\"3\\">ジャッジデバフ.*?<\/td>/ | |
# ジャッジデバフ | |
reghs["jdebuff"] = /ATKRatio:.*?<\/td><td colspan=\\"3\\">ジャッジデバフ(.*?)<\/td>/ | |
# マップ | |
reghs["found-in"] = /6\\"> <div class=\\"selectedClass nocopy\\">(.*?)<\/div>/ | |
# 説明 | |
reghs["desc"] = /<div class=\\"selectedClass smaller \\">(.*?)<\/div>/ | |
# ドロップ | |
reghs["drop"] = /10\\"> <div class=\\"selectedClass nocopy\\">(.*?)<\/div>/ | |
# ID | |
reghs["ID"] = /ID:<span class=\\"selectedClass\\">(.*?)<\/span>/ | |
# Cls | |
reghs["classname"] = /Cls:<span class=\\"selectedClass\\">(.*?)<\/span>/ | |
# 単体表示のID | |
reghs["ID2"] = /<a href=\\"#\\" onclick=\\"onButtonClick\('monster' , (.*?)\);\\">単体表示<\/a>/ | |
# ./gfx | |
reghs["gfx"] = /<div><img src=\\"(.*?)\\" style=\\"float:left;width:60px;height:60px;\\" alt=\\".*?\\"><\/div>/ | |
# alt 名前 | |
reghs["name2"] = /<div><img src=\\".*?\\" style=\\"float:left;width:60px;height:60px;\\" alt=\\"(.*?)\\"><\/div>/ | |
# 名前 | |
reghs["name"] = /<div class=\\"selectedClass monrank_.*?\\">(.*?)<\/div>/ | |
# 種類 | |
reghs["movement"] = /width:15%;\\"> <div class=\\"selectedClass \\">種類 (.*?)<\/div>/ | |
# サイズ | |
reghs["size"] = /<div class=\\"selectedClass \\">サイズ (.*?)<\/div>/ | |
# 属性 | |
reghs["attribute"] = /<div class=\\"selectedClass \\">属性 (.*?)<\/div/ | |
# プレート or クロース or レザー | |
reghs["armor"] = /属性 .*?<\/div> <div class=\\"selectedClass \\">(.*?)<\/div>/ | |
hs = {} | |
hs["MDEF"] = "x4123" | |
hs["ATK"] = "x4x123" | |
hs["MATK"] = "x4x123" | |
hs["HP"] = "x4x123" | |
hs["SP"] = "x4x123" | |
hs["DEF"] = "x4x123" | |
hs["CON"] = "x4x123" | |
hs["STR"] = "x4x123" | |
hs["INT"] = "x4x123" | |
hs["SPR"] = "x4123" | |
hs["DEX"] = "x123" | |
hs["EXP"] = "x123" | |
hs["JOB"] = "x123" | |
hs["LV"] = "x123" | |
hs["ATAKRatio"] = "x123" | |
hs["jdebuff"] = "x123" | |
hs["found-in"] = "x123" | |
hs["desc"] = "x123" | |
hs["drop"] = "x123" | |
hs["ID"] = "58005" | |
hs["ID2"] = "58005" | |
hs["classname"] = "x123" | |
hs["gfx"] = "x123" | |
hs["name"] = "xケッピ" | |
hs["name2"] = "xケッピ" | |
hs["movement"] = "x123" | |
hs["size"] = "x123XXXXL" | |
hs["attribute"] = "x123" # 種類 ,, ケッピー == poison | |
hs["armor"] = "x123" # クロース ,, プレート... | |
hs["RANK"] = "x123" # Nomal ,, Boss | |
hs["acc"] = "x123" | |
hs["eva"] = "x123" | |
hs["jounal"] = "x123" | |
hs["debuffable"] = "x123" | |
hs["crit-immune"] = "x123" | |
hs[""] = "" | |
file = "b_data_json.js" | |
id = "58005" | |
# id = "58577" | |
db_ary = open( file ).read.toutf8.each_line.to_a | |
def func_replace db , id , hs , reghs , obj_type | |
db_tmp = db[1].dup | |
db[1].to_s.scan(/{"id":"(\d+)","src":"(<table.*?table>)"},/) do | sid , ssrc | | |
next if sid != id | |
ssrc = $template | |
p "***---gsub---ssrc-----parse_src------" | |
# puts ssrc | |
# regs | |
tmp = ssrc.dup | |
reghs.each do | key , value | | |
next if hs[ key ].empty? | |
ssrc =~ reghs[ key ] | |
p key | |
p a = $& | |
p b = $1 | |
if key == "ATK" | |
rep = hs[ key ] + "("+hs[ "STR" ] +")" | |
elsif key == "MATK" | |
rep = hs[ key ] + "("+hs[ "INT" ] +")" | |
elsif key == "MDEF" | |
rep = hs[ key ] + "("+hs[ "SPR" ] +")" | |
elsif key == "EXP" | |
rep = hs[ key ] + "/"+hs[ "JOB" ] | |
else | |
rep = hs[ key ] | |
end | |
ssrc.sub!(a , a.sub( b , rep ) ) | |
end | |
puts ssrc | |
db_tmp.sub!( tmp , ssrc) | |
end | |
db[1] = db_tmp | |
end | |
func_replace db_ary , id , hs , reghs , "monster" | |
def json_output file , db_ary | |
open( "_" + file, 'w') do |io| | |
io.print db_ary[0] # function data_js_json() { | |
io.print db_ary[1] # return [{ }] | |
io.print db_ary[2] # } | |
end | |
end | |
json_output file , db_ary |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding:utf-8 | |
require "nokogiri" | |
# require "mechanize" | |
# require 'open-uri' | |
require "kconv" | |
require 'json' | |
Dir.chdir File.dirname(__FILE__) | |
# return hs | |
# def tosneet_kaiseki file = "./tosneet2/npcs_58477.html" | |
def tosneet_kaiseki_equip file = "./tosneet2/items_643570.html" | |
tosneet_hs = {} | |
def linktag_delete v | |
v.map do|m| m =~ /href=\"(.*?)\"/ ? $1 : m end | |
end | |
(1..1).each do |n| | |
# page_src = open("./tosneet/items_1960.html").read.toutf8 | |
begin | |
page_src = open( file ).read.toutf8 | |
rescue | |
p $! ; end | |
# ------------- | |
def parse1 page_src , enum | |
if page_src =~ /<h2>#{enum}<\/h2>/m | |
page_src =~ /(<h2>#{enum}<\/h2>\n)(<table.*?<\/table>)/m | |
prod = Nokogiri::HTML.parse $2 | |
tr = prod / "tr" | |
v = | |
tr.map do | m | | |
tdd = m / 'td' | |
[tdd[1].children.to_s , tdd[2].children.to_s] | |
end | |
v << [ enum , "true" ] | |
v.flatten! | |
v = linktag_delete v | |
p Hash[*v] | |
end | |
end | |
parsed_text = ["Produces","Materials"] | |
parsed_text.each do | m | | |
parse1 page_src , m | |
end | |
# いらないタグ消す | |
def parse_rep1 page_src , enum | |
if page_src =~ /<h2>#{enum}<\/h2>/m | |
page_src =~ /(<h2>#{enum}<\/h2>\n)(<table.*?<\/table>)/m | |
page_src.gsub!($2,"") | |
end | |
page_src | |
end | |
# Rewards# https://tos.neet.tv/quests/60075 # 半分解析不可 | |
# Attributes | |
# Misc , Monsters , NPCs , Misc | |
["Found in" , "Enhancement"].+(parsed_text).each do | m | | |
page_src = parse_rep1 page_src , m | |
end | |
# exit | |
doc = Nokogiri::HTML.parse page_src | |
page_src =~ /<h1 id\=\"title\">(.*?)<\/h1>/m | |
# p ({"name" => $1}) | |
tosneet_hs.merge!({"name" => $1}) | |
(doc / 'table').each do |x| | |
v = [] | |
thead = x / 'thead' | |
tbody = x / 'tbody' | |
if thead.empty?.! | |
thead = thead / 'th' | |
tbody = tbody / 'td' | |
tbody2 = tbody.map do |m| | |
s = m.children.to_s | |
# s.sub!(/<span.*?<\/span>/,"〇") # Grade項目 | |
if s =~ /<span.*?item-grade-(\d).*?<\/span>/ | |
s = $1 | |
end | |
# s.sub!('<span data-tip="White" class="item-grade item-grade-1"></span>',"〇") # Grade項目 | |
s | |
end | |
v = thead.map do |m| | |
if (m / 'span').empty?.! then next (m / 'span').children.to_s | |
else next m.children.to_s | |
end | |
end.flatten.zip(tbody2) | |
else | |
# Requirements stats 、 ジェム | |
th = x / 'th' | |
td = x / 'td' | |
tr = x / 'tr' | |
if th.empty?.! | |
ul = tr / 'ul' | |
if ul.empty?.! | |
# ジェム | References , Dropped , Materials , Collectible , Found inside | |
hh = th.map(&:children).map(&:to_s) | |
i = 0 | |
ul.map do | m | | |
li = m / 'li' | |
# p ({hh[i] => "true"}).merge(Hash[*linktag_delete(li.map(&:children).map(&:to_s).zip(["1"].cycle).flatten)]) | |
tosneet_hs.merge!({hh[i] => "true"}).merge(Hash[*linktag_delete(li.map(&:children).map(&:to_s).zip(["1"].cycle).flatten)]) do |key, oldval, newval| | |
tosneet_hs.merge!( { key+"add_hash"+tosneet_hs.size.to_s => newval} ) | |
p "----1111-------" | |
p key, oldval, newval | |
p "----1111-------" | |
oldval | |
end | |
i += 1 | |
end | |
next | |
else # Requirements stats | |
v = th.map(&:children).map(&:to_s).zip(td.map(&:children).map(&:to_s)) | |
end | |
else | |
p "tosneet_kaiseki _ err" | |
end | |
end | |
v.flatten! | |
# レシピがある場合 | |
if v[0] == "Crafted from" | |
v[1] =~ /href=\"(.*?)\"/ | |
v[1] = $1 | |
end | |
# リンクタグが混ざっている場合 | |
v = linktag_delete v | |
# 重複要素が Hash[*v]で消えてしまうので名前を変える( ベニエルなど ) | |
v = v.each_with_index.map do |m,i| | |
next m if m != " - " | |
m + i.to_s | |
end | |
tosneet_hs.merge!(Hash[*v]) do |key, oldval, newval| | |
tosneet_hs.merge!( { key+"add_hash"+tosneet_hs.size.to_s => newval} ) | |
p "-----------" | |
p key, oldval, newval | |
p "-----------" | |
oldval | |
end | |
end | |
# desc | |
if page_src =~ /<pre class="item-desc">(.*?)<\/pre>/ | |
tosneet_hs.merge!("desc" => $1) | |
end | |
if page_src =~ /Crafted from.*?href=".*?(\d+)">/m | |
tosneet_hs.merge!("Crafted from" => $1) | |
end | |
# visual | |
if page_src =~ /<h2>Visual<\/h2>.*?src=\"(.*?)\">/m | |
tosneet_hs.merge!("visual_pass" => $1) | |
p visual = File.basename($1) | |
tosneet_hs.merge!("visual" => visual) | |
else p "no visual" end | |
# # Gem | |
# if page_src =~ /<tr><th>Skill<\/th><td>(.*?)<\/td><\/tr>/ | |
# p skill = $1 | |
# tosneet_hs.merge!("skill" => skill) | |
# end | |
# if page_src =~ /<tr><th>Slots<\/th><td>(.*?)<\/td><\/tr>/ | |
# p slot = $1 | |
# slot.gsub!(/<.*?>/,"") | |
# tosneet_hs.merge!("slot" => slot) | |
# end | |
end | |
return tosneet_hs | |
end# func | |
if $0 == __FILE__ | |
p tosneet_kaiseki | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding:utf-8 | |
require "nokogiri" | |
# require "mechanize" | |
# require 'open-uri' | |
require "kconv" | |
require 'json' | |
Dir.chdir File.dirname(__FILE__) | |
# return hs | |
# def tosneet_kaiseki file = "./tosneet2/npcs_58477.html" | |
def tosneet_kaiseki file = "./tosneet2/items_643570.html" | |
tosneet_hs = {} | |
def linktag_delete v | |
v.map do|m| m =~ /href=\"(.*?)\"/ ? $1 : m end | |
end | |
(1..1).each do |n| | |
# page_src = open("./tosneet/items_1960.html").read.toutf8 | |
page_src = open( file ).read.toutf8 | |
# ------------- | |
def parse1 page_src , enum | |
if page_src =~ /<h2>#{enum}<\/h2>/m | |
page_src =~ /(<h2>#{enum}<\/h2>\n)(<table.*?<\/table>)/m | |
prod = Nokogiri::HTML.parse $2 | |
tr = prod / "tr" | |
v = | |
tr.map do | m | | |
tdd = m / 'td' | |
[tdd[1].children.to_s , tdd[2].children.to_s] | |
end | |
v << [ enum , "true" ] | |
v.flatten! | |
v = linktag_delete v | |
p Hash[*v] | |
end | |
end | |
parsed_text = ["Produces","Materials"] | |
parsed_text.each do | m | | |
parse1 page_src , m | |
end | |
# いらないタグ消す | |
def parse_rep1 page_src , enum | |
if page_src =~ /<h2>#{enum}<\/h2>/m | |
page_src =~ /(<h2>#{enum}<\/h2>\n)(<table.*?<\/table>)/m | |
page_src.gsub!($2,"") | |
end | |
page_src | |
end | |
# Rewards# https://tos.neet.tv/quests/60075 # 半分解析不可 | |
# Attributes | |
# Misc , Monsters , NPCs , Misc | |
["Found in" , "Enhancement"].+(parsed_text).each do | m | | |
page_src = parse_rep1 page_src , m | |
end | |
# exit | |
doc = Nokogiri::HTML.parse page_src | |
page_src =~ /<h1 id\=\"title\">(.*?)<\/h1>/m | |
# p ({"name" => $1}) | |
tosneet_hs.merge!({"name" => $1}) | |
(doc / 'table').each do |x| | |
v = [] | |
thead = x / 'thead' | |
tbody = x / 'tbody' | |
if thead.empty?.! | |
thead = thead / 'th' | |
tbody = tbody / 'td' | |
tbody2 = tbody.map do |m| | |
s = m.children.to_s | |
s.sub!(/<span.*?<\/span>/,"〇") # Grade項目 | |
# s.sub!('<span data-tip="White" class="item-grade item-grade-1"></span>',"〇") # Grade項目 | |
s | |
end | |
v = thead.map do |m| | |
if (m / 'span').empty?.! then next (m / 'span').children.to_s | |
else next m.children.to_s | |
end | |
end.flatten.zip(tbody2) | |
else | |
# Requirements stats 、 ジェム | |
th = x / 'th' | |
td = x / 'td' | |
tr = x / 'tr' | |
if th.empty?.! | |
ul = tr / 'ul' | |
if ul.empty?.! | |
# ジェム | References , Dropped , Materials , Collectible , Found inside | |
hh = th.map(&:children).map(&:to_s) | |
i = 0 | |
ul.map do | m | | |
li = m / 'li' | |
# p ({hh[i] => "true"}).merge(Hash[*linktag_delete(li.map(&:children).map(&:to_s).zip(["1"].cycle).flatten)]) | |
tosneet_hs.merge!({hh[i] => "true"}).merge(Hash[*linktag_delete(li.map(&:children).map(&:to_s).zip(["1"].cycle).flatten)]) do |key, oldval, newval| | |
tosneet_hs.merge!( { key+"add_hash"+tosneet_hs.size.to_s => newval} ) | |
p "----1111-------" | |
p key, oldval, newval | |
p "----1111-------" | |
oldval | |
end | |
i += 1 | |
end | |
next | |
else # Requirements stats | |
v = th.map(&:children).map(&:to_s).zip(td.map(&:children).map(&:to_s)) | |
end | |
else | |
p "tosneet_kaiseki _ err" | |
end | |
end | |
v.flatten! | |
# レシピがある場合 | |
if v[0] == "Crafted from" | |
v[1] =~ /href=\"(.*?)\"/ | |
v[1] = $1 | |
end | |
# リンクタグが混ざっている場合 | |
v = linktag_delete v | |
# p Hash[*v] | |
tosneet_hs.merge!(Hash[*v]) do |key, oldval, newval| | |
tosneet_hs.merge!( { key+"add_hash"+tosneet_hs.size.to_s => newval} ) | |
p "-----------" | |
p key, oldval, newval | |
p "-----------" | |
oldval | |
end | |
end | |
# visual | |
if page_src =~ /<h2>Visual<\/h2>.*?src=\"(.*?)\">/m | |
tosneet_hs.merge!("visual_pass" => $1) | |
p visual = File.basename($1) | |
tosneet_hs.merge!("visual" => visual) | |
else p "no visual" end | |
# # Gem | |
# if page_src =~ /<tr><th>Skill<\/th><td>(.*?)<\/td><\/tr>/ | |
# p skill = $1 | |
# tosneet_hs.merge!("skill" => skill) | |
# end | |
# if page_src =~ /<tr><th>Slots<\/th><td>(.*?)<\/td><\/tr>/ | |
# p slot = $1 | |
# slot.gsub!(/<.*?>/,"") | |
# tosneet_hs.merge!("slot" => slot) | |
# end | |
end | |
return tosneet_hs | |
end# func | |
if $0 == __FILE__ | |
p tosneet_kaiseki | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#coding:utf-8 | |
require "nokogiri" | |
require "kconv" | |
require 'json' | |
Dir.chdir File.dirname(__FILE__) | |
# return hs | |
def tosneet_kaiseki_recipe file = "./tosneet2/items_7141015.html" | |
def linktag_delete v | |
v.map do|m| m =~ /href=\"(.*?)\"/ ? $1 : m end | |
end | |
def parse1 page_src , enum | |
if page_src =~ /<h2>#{enum}<\/h2>/m | |
page_src =~ /(<h2>#{enum}<\/h2>\n)(<table.*?<\/table>)/m | |
prod = Nokogiri::HTML.parse $2 | |
tr = prod / "tr" | |
v = tr.map do | m | | |
tdd = m / 'td' | |
tdda = (tdd / "a") | |
[tdd[1].children.to_s , tdd[2].children.to_s , tdda.children.to_s ] | |
end | |
# v << [ enum , "true" ] | |
v.flatten! | |
v = linktag_delete v | |
{enum => v} | |
# Hash[*v] | |
end | |
end | |
# いらないタグ消す | |
def parse_rep1 page_src , enum | |
if page_src =~ /<h2>#{enum}<\/h2>/m | |
page_src =~ /(<h2>#{enum}<\/h2>\n)(<table.*?<\/table>)/m | |
page_src.gsub!($2,"") | |
end | |
page_src | |
end | |
tosneet_hs = {} | |
add_hash = {} | |
(1..1).each do |n| | |
# page_src = open("./tosneet/items_1960.html").read.toutf8 | |
page_src = open( file ).read.toutf8 | |
parsed_text = ["Produces","Materials"] | |
parsed_text.each do | m | | |
begin | |
add_hash.merge!(parse1(page_src , m)) | |
rescue | |
p $! | |
add_hash.merge!({ m => ["","",""] }) | |
end | |
end | |
# Rewards# https://tos.neet.tv/quests/60075 # 半分解析不可 | |
# Attributes | |
# Misc , Monsters , NPCs , Misc | |
["Found in" , "Enhancement"].+(parsed_text).each do | m | | |
page_src = parse_rep1 page_src , m | |
end | |
# exit | |
doc = Nokogiri::HTML.parse page_src | |
page_src =~ /<h1 id\=\"title\">(.*?)<\/h1>/m | |
# p ({"name" => $1}) | |
tosneet_hs.merge!({"name" => $1}) | |
(doc / 'table').each do |x| | |
v = [] | |
thead = x / 'thead' | |
tbody = x / 'tbody' | |
if thead.empty?.! | |
thead = thead / 'th' | |
tbody = tbody / 'td' | |
tbody2 = tbody.map do |m| | |
s = m.children.to_s | |
# s.sub!(/<span.*?<\/span>/,"〇") # Grade項目 | |
if s =~ /<span.*?item-grade-(\d).*?<\/span>/ | |
s = $1 | |
end | |
# s.sub!('<span data-tip="White" class="item-grade item-grade-1"></span>',"〇") # Grade項目 | |
s | |
end | |
v = thead.map do |m| | |
if (m / 'span').empty?.! then next (m / 'span').children.to_s | |
else next m.children.to_s | |
end | |
end.flatten.zip(tbody2) | |
else | |
# Requirements stats 、 ジェム | |
th = x / 'th' | |
td = x / 'td' | |
tr = x / 'tr' | |
if th.empty?.! | |
ul = tr / 'ul' | |
if ul.empty?.! | |
# ジェム | References , Dropped , Materials , Collectible , Found inside | |
hh = th.map(&:children).map(&:to_s) | |
i = 0 | |
ul.map do | m | | |
li = m / 'li' | |
# p ({hh[i] => "true"}).merge(Hash[*linktag_delete(li.map(&:children).map(&:to_s).zip(["1"].cycle).flatten)]) | |
tosneet_hs.merge!({hh[i] => "true"}).merge(Hash[*linktag_delete(li.map(&:children).map(&:to_s).zip(["1"].cycle).flatten)]) do |key, oldval, newval| | |
tosneet_hs.merge!( { key+"add_hash"+tosneet_hs.size.to_s => newval} ) | |
p "----1111-------" | |
p key, oldval, newval | |
p "----1111-------" | |
oldval | |
end | |
i += 1 | |
end | |
next | |
else # Requirements stats | |
v = th.map(&:children).map(&:to_s).zip(td.map(&:children).map(&:to_s)) | |
end | |
else | |
p "tosneet_kaiseki _ err" | |
end | |
end | |
v.flatten! | |
# レシピがある場合 | |
if v[0] == "Crafted from" | |
v[1] =~ /href=\"(.*?)\"/ | |
v[1] = $1 | |
end | |
# リンクタグが混ざっている場合 | |
v = linktag_delete v | |
# 重複要素が Hash[*v]で消えてしまうので名前を変える( ベニエルなど ) | |
v = v.each_with_index.map do |m,i| | |
next m if m != " - " | |
m + i.to_s | |
end | |
tosneet_hs.merge!(Hash[*v]) do |key, oldval, newval| | |
tosneet_hs.merge!( { key+"add_hash"+tosneet_hs.size.to_s => newval} ) | |
p "-----------" | |
p key, oldval, newval | |
p "-----------" | |
oldval | |
end | |
end | |
# desc | |
if page_src =~ /<pre class="item-desc">(.*?)<\/pre>/ | |
tosneet_hs.merge!("desc" => $1) | |
end | |
if page_src =~ /Crafted from.*?href=".*?(\d+)">/m | |
tosneet_hs.merge!("Crafted from" => $1) | |
end | |
# visual | |
if page_src =~ /<h2>Visual<\/h2>.*?src=\"(.*?)\">/m | |
tosneet_hs.merge!("visual_pass" => $1) | |
p visual = File.basename($1) | |
tosneet_hs.merge!("visual" => visual) | |
else p "no visual" end | |
# # Gem | |
# if page_src =~ /<tr><th>Skill<\/th><td>(.*?)<\/td><\/tr>/ | |
# p skill = $1 | |
# tosneet_hs.merge!("skill" => skill) | |
# end | |
# if page_src =~ /<tr><th>Slots<\/th><td>(.*?)<\/td><\/tr>/ | |
# p slot = $1 | |
# slot.gsub!(/<.*?>/,"") | |
# tosneet_hs.merge!("slot" => slot) | |
# end | |
end | |
return tosneet_hs.merge(add_hash) | |
end# func | |
if $0 == __FILE__ | |
p tosneet_kaiseki_recipe | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment