# HG changeset patch # User Nobuyasu Oshiro # Date 1380318899 -32400 # Node ID 7e9ce3e3d84a1598df64dbdccc0f8f7b8f5a0ba2 # Parent 06f22f0d9cabb584edbb7a225cb334aff1103800 modified win_rate.lua diff -r 06f22f0d9cab -r 7e9ce3e3d84a http/win_rate.lua --- a/http/win_rate.lua Sat Sep 28 05:47:24 2013 +0900 +++ b/http/win_rate.lua Sat Sep 28 06:54:59 2013 +0900 @@ -1,6 +1,6 @@ -package.path = '../?.lua;' .. package.path +package.path = '../?.lua;./?.lua;' .. package.path -local SLAXML = require("slaxdom") +local xml = require("xmlSimple").newParser() local io = require("io") local http = require("socket.http") local ltn12 = require("ltn12") @@ -11,19 +11,32 @@ { url = url, method = "GET", --- sink = ltn12.sink.file(io.stdout) sink = ltn12.sink.table(request) } -local xml = table.concat(request) -local doc = SLAXML:dom(xml) - -for i,v in pairs(doc) do print(i,v) end - -local kids = doc["kids"] -print("kids:",kids) -for i,v in pairs(kids) do - print("kids:for") - print(i,v) +local xmlString = table.concat(request) +local match = xmlString:gmatch('(.-)
') +local count = 0 +local userInfo = {} +for i in match do + local names = i:gmatch('(.-)') + for j in names do + local href, name = j:match('(.-)') + if (href == nil) then + userInfo[j] = { + name = j, + href = url + } + else + userInfo[name] = { + name = name, + href = href + } + end + end + count = count + 1 + if (count > 2) then break end end +for i,v in pairs(userInfo) do print(i,v) end + diff -r 06f22f0d9cab -r 7e9ce3e3d84a http/xmlSimple.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/http/xmlSimple.lua Sat Sep 28 06:54:59 2013 +0900 @@ -0,0 +1,169 @@ +module(..., package.seeall) + +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +-- +-- xml.lua - XML parser for use with the Corona SDK. +-- +-- version: 1.2 +-- +-- CHANGELOG: +-- +-- 1.2 - Created new structure for returned table +-- 1.1 - Fixed base directory issue with the loadFile() function. +-- +-- NOTE: This is a modified version of Alexander Makeev's Lua-only XML parser +-- found here: http://lua-users.org/wiki/LuaXml +-- +--------------------------------------------------------------------------------- +--------------------------------------------------------------------------------- +function newParser() + + XmlParser = {}; + + function XmlParser:ToXmlString(value) + value = string.gsub(value, "&", "&"); -- '&' -> "&" + value = string.gsub(value, "<", "<"); -- '<' -> "<" + value = string.gsub(value, ">", ">"); -- '>' -> ">" + value = string.gsub(value, "\"", """); -- '"' -> """ + value = string.gsub(value, "([^%w%&%;%p%\t% ])", + function(c) + return string.format("&#x%X;", string.byte(c)) + end); + return value; + end + + function XmlParser:FromXmlString(value) + value = string.gsub(value, "&#x([%x]+)%;", + function(h) + return string.char(tonumber(h, 16)) + end); + value = string.gsub(value, "&#([0-9]+)%;", + function(h) + return string.char(tonumber(h, 10)) + end); + value = string.gsub(value, """, "\""); + value = string.gsub(value, "'", "'"); + value = string.gsub(value, ">", ">"); + value = string.gsub(value, "<", "<"); + value = string.gsub(value, "&", "&"); + return value; + end + + function XmlParser:ParseArgs(node, s) + string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a) + node:addProperty(w, self:FromXmlString(a)) + end) + end + + function XmlParser:ParseXmlText(xmlText) + local stack = {} + local top = newNode() + table.insert(stack, top) + local ni, c, label, xarg, empty + local i, j = 1, 1 + while true do + ni, j, c, label, xarg, empty = string.find(xmlText, "<(%/?)([%w_:]+)(.-)(%/?)>", i) + if not ni then break end + local text = string.sub(xmlText, i, ni - 1); + if not string.find(text, "^%s*$") then + local lVal = (top:value() or "") .. self:FromXmlString(text) + stack[#stack]:setValue(lVal) + end + if empty == "/" then -- empty element tag + local lNode = newNode(label) + self:ParseArgs(lNode, xarg) + top:addChild(lNode) + elseif c == "" then -- start tag + local lNode = newNode(label) + self:ParseArgs(lNode, xarg) + table.insert(stack, lNode) + top = lNode + else -- end tag + local toclose = table.remove(stack) -- remove top + + top = stack[#stack] + if #stack < 1 then + error("XmlParser: nothing to close with " .. label) + end + if toclose:name() ~= label then + error("XmlParser: trying to close " .. toclose.name .. " with " .. label) + end + top:addChild(toclose) + end + i = j + 1 + end + local text = string.sub(xmlText, i); + if #stack > 1 then + error("XmlParser: unclosed " .. stack[#stack]:name()) + end + return top + end + + function XmlParser:loadFile(xmlFilename, base) + if not base then + base = system.ResourceDirectory + end + + local path = system.pathForFile(xmlFilename, base) + local hFile, err = io.open(path, "r"); + + if hFile and not err then + local xmlText = hFile:read("*a"); -- read file content + io.close(hFile); + return self:ParseXmlText(xmlText), nil; + else + print(err) + return nil + end + end + + return XmlParser +end + +function newNode(name) + local node = {} + node.___value = nil + node.___name = name + node.___children = {} + node.___props = {} + + function node:value() return self.___value end + function node:setValue(val) self.___value = val end + function node:name() return self.___name end + function node:setName(name) self.___name = name end + function node:children() return self.___children end + function node:numChildren() return #self.___children end + function node:addChild(child) + if self[child:name()] ~= nil then + if type(self[child:name()].name) == "function" then + local tempTable = {} + table.insert(tempTable, self[child:name()]) + self[child:name()] = tempTable + end + table.insert(self[child:name()], child) + else + self[child:name()] = child + end + table.insert(self.___children, child) + end + + function node:properties() return self.___props end + function node:numProperties() return #self.___props end + function node:addProperty(name, value) + local lName = "@" .. name + if self[lName] ~= nil then + if type(self[lName]) == "string" then + local tempTable = {} + table.insert(tempTable, self[lName]) + self[lName] = tempTable + end + table.insert(self[lName], value) + else + self[lName] = value + end + table.insert(self.___props, { name = name, value = self[name] }) + end + + return node +end