Skip to content

Instantly share code, notes, and snippets.

@ir-norn
Last active June 7, 2017 09:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ir-norn/a11da63f6365fea19f742756dae03160 to your computer and use it in GitHub Desktop.
Save ir-norn/a11da63f6365fea19f742756dae03160 to your computer and use it in GitHub Desktop.
データ更新用
<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>
<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>
#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
#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
#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
#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
#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
#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
#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
#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
#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