=begin title WebTime class author jubin-park refer EFE's WinHttp Request date 2015.12.12 syntax Ruby (XP/VX/VXA) =end #=============================================================================== if $NEKO_RUBY.nil? #------------------------------------------------------------------------------- class WebTime < Time def self.new; now() end def self.year; now.year() end def self.mon; now.mon() end def self.mday; now.mday() end def self.hour; now.hour() end def self.min; now.min() end def self.sec; now.sec() end def self.now n = 0; data = String.new t_p = Time.now req = s2u(EFE.request('www.webtour.com', '/GInfo/time.asp?Code=A', 999999)) # 실패 시 로컬 시간 반환 return Time.now if req == "\000" t_l = Time.now req.scan(/(.*)<\/td>/) do |w| n += 1 if n == 20 data << $1 break end end req = nil data = data.scan /(\d+)\/(\d+)\/(\d+) 오(전|후) (\d+):(\d+):(\d+)/ # 실패 시 로컬 시간 반환 return Time.now if data == [] data.flatten! data[3] = 0 if data[3] == '전' # 오전 +0 data[3] = 12 if data[3] == '후' # 오후 +12 data[4] = 0 if data[3] == 0 && data[4] == '12' # 오전 12시 = 오전 0시 data[4] = 0 if data[3] == 12 && data[4] == '12' # 오후 12시 = 오후 0시 for i in 0...data.size data[i] = data[i].to_i end data[0] += 2000 data[4] += data[3] # AM/PM 적용 뒤 data.delete_at(3) # 삭제 data[1] = case data[1] # 달 when 1; 'jan' when 2; 'feb' when 3; 'mar' when 4; 'apr' when 5; 'may' when 6; 'jun' when 7; 'jul' when 8; 'aug' when 9; 'sep' when 10; 'oct' when 11; 'nov' when 12; 'dec' end return Time.local(*data) + (t_l - t_p) # 오차값 가산 end end =begin =============================================================================== EFE's Request Script Version: RGSS & RGSS2 & RGSS3 Special thanks : Ryex, Gustavo Bicalho, Kubiwa Taicho =============================================================================== This script will allow to request to some servers WITHOUT posting. (Only GET) -------------------------------------------------------------------------------- Used WINAPI functions: WinHTTPOpen WinnHTTLConnect WinHTTPOpenRequest WinHTTPSendRequest WinHTTPReceiveResponse WinHttpQueryDataAvailable WinHttpReadData Call: EFE.request(host, path, post, port) host : "www.rpgmakervxace.net" (without http:// prefix) path : "/forum/login.php" ( the directory path of your php file ) post : "username=kfdsfdsl&password=24324234" port : 80 is default. =end module EFE WinHttpOpen = Win32API.new('winhttp','WinHttpOpen',"PIPPI",'I') WinHttpConnect = Win32API.new('winhttp','WinHttpConnect',"PPII",'I') WinHttpOpenRequest = Win32API.new('winhttp','WinHttpOpenRequest',"PPPPPII",'I') WinHttpSendRequest = Win32API.new('winhttp','WinHttpSendRequest',"PIIIIII",'I') WinHttpReceiveResponse = Win32API.new('winhttp','WinHttpReceiveResponse',"PP",'I') WinHttpQueryDataAvailable = Win32API.new('winhttp', 'WinHttpQueryDataAvailable', "PI", "I") WinHttpReadData = Win32API.new('winhttp','WinHttpReadData',"PPIP",'I') # I took this method from Gustavo Bicalho's WebKit script. Special thanks him. def self.to_ws(str) str = str.to_s(); wstr = ""; for i in 0..str.size wstr += str[i,1]+"\0"; end wstr += "\0"; return wstr; end def self.request(host, path, buf, post="",port=80) p = path if(post != "") p = p + "?" + post end p = p.to_s pwszUserAgent = '' pwszProxyName = '' pwszProxyBypass = '' httpOpen = WinHttpOpen.call(pwszUserAgent, 0, pwszProxyName, pwszProxyBypass, 0) if httpOpen httpConnect = WinHttpConnect.call(httpOpen, to_ws(host), port, 0) if httpConnect httpOpenR = WinHttpOpenRequest.call(httpConnect, nil, to_ws(p), "", '',0,0) if httpOpenR httpSendR = WinHttpSendRequest.call(httpOpenR, 0, 0 , 0, 0,0,0) if httpSendR httpReceiveR = WinHttpReceiveResponse.call(httpOpenR, nil) if httpReceiveR received = 0 httpAvailable = WinHttpQueryDataAvailable.call(httpOpenR, received) if httpAvailable ali = ' ' * buf n = 0 httpRead = WinHttpReadData.call(httpOpenR, ali, buf, o=[n].pack('i!')) n=o.unpack('i!')[0] return ali[0, n] else p("Error about query data available") end else p("Error when receiving response") end else p("Error when sending request") end else p("Error when opening request") end else p("Error when connecting to the host") end else p("Error when opening connection") end end end ## Encoding MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'llplpl', 'l') WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'llplplpp', 'l') def s2u(text) len = MultiByteToWideChar.call(0, 0, text, -1, nil, 0) buf = '\0' * (len*2) MultiByteToWideChar.call(0, 0, text, -1, buf, buf.size/2) len = WideCharToMultiByte.call(65001, 0, buf, -1, nil, 0, nil, nil) ret = '\0' * len WideCharToMultiByte.call(65001, 0, buf, -1, ret, ret.size, nil, nil) return ret.delete('\000') end #------------------------------------------------------------------------------- end #===============================================================================