Created
January 21, 2015 07:20
-
-
Save kevinthompson/695d2cea49435994e485 to your computer and use it in GitHub Desktop.
Monitor H1Z1 Servers
This file contains hidden or 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
require 'open-uri' | |
require 'json' | |
## | |
# Add underscore method to string for simple JSON | |
# key manipulation. | |
class String | |
def underscore | |
self.gsub(/::/, '/'). | |
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). | |
gsub(/([a-z\d])([A-Z])/,'\1_\2'). | |
tr("-", "_"). | |
downcase | |
end | |
end | |
class Game | |
attr_reader :name, :servers | |
def initialize(name, servers) | |
@name = name | |
@servers = servers.map do |server_name, data| | |
Server.new(server_name, data) | |
end | |
end | |
end | |
class Server | |
attr_reader :name, :state | |
def initialize(name, data) | |
@name = name | |
data.each do |key, value| | |
instance_variable_set("@#{key.underscore}", value) | |
end | |
end | |
def to_s | |
"[#{name}] State: #{state.capitalize}" | |
end | |
end | |
## | |
# Fetch and parse JSON | |
url = 'https://census.soe.com/get/lp/status.worlds/?c:limit=1000&c:tree=title,name&c:hide=id,lastReported,reason,region,lastReportedTime,game,regionName' | |
while(true) do | |
raw = open(url){ |page| page.read } | |
json = JSON.parse(raw) | |
games = json['status.worlds_list'][0].map do |name, servers| | |
Game.new(name, servers) | |
end | |
h1z1 = games.find{ |game| game.name == 'H1Z1' } | |
servers_online = h1z1.servers.select{ |server| server.state != 'down' } | |
noun = servers_online.size == 1 ? 'server' : 'servers' | |
`say There's currently #{servers_online.size} server online` | |
sleep 30 | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment