mirror of
https://github.com/Astatin3/pymcstatus.git
synced 2026-06-08 16:18:05 -06:00
swapped over to json for output
If two servers were found at the same time, they might try to write to the xlsx file at the same time. this could corrupt the file. outputting to json, and just using another script to convert is much safer.
This commit is contained in:
@@ -6,5 +6,15 @@ Usage:
|
|||||||
Usage:
|
Usage:
|
||||||
srvstatus.py -p IP
|
srvstatus.py -p IP
|
||||||
srvstatus.py -f inlist.txt
|
srvstatus.py -f inlist.txt
|
||||||
srvstatus.py -f inlist.txt -o outfile.xlsx
|
srvstatus.py -f inlist.txt -o outfile.json
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Then convert json to xlsx using:
|
||||||
|
```
|
||||||
|
json2xlsx.py infile.json outfile.xlsx
|
||||||
|
```
|
||||||
|
|
||||||
|
Dependencies:
|
||||||
|
```
|
||||||
|
Pillow mcstatus openpyxl
|
||||||
|
```
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import sys
|
||||||
|
import json
|
||||||
|
from openpyxl import Workbook
|
||||||
|
|
||||||
|
inputfile = sys.argv[1]
|
||||||
|
outputfile = sys.argv[2]
|
||||||
|
|
||||||
|
book = Workbook()
|
||||||
|
sheet = book.active
|
||||||
|
|
||||||
|
sheet.append(("ip", "latency", "pver", "ver", "cplayers", "mplayers", "motd", "isicon"))
|
||||||
|
|
||||||
|
with open(inputfile) as f:
|
||||||
|
data = json.load(f)
|
||||||
|
for entry in data:
|
||||||
|
sheet.append((entry["ip"], entry["latency"], entry["pver"], entry["ver"], entry["cplayers"], entry["mplayers"], entry["motd"], entry["isicon"]))
|
||||||
|
|
||||||
|
book.save(outputfile)
|
||||||
+31
-24
@@ -2,38 +2,34 @@ import io
|
|||||||
import math
|
import math
|
||||||
import base64
|
import base64
|
||||||
import sys
|
import sys
|
||||||
|
import json
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from mcstatus import JavaServer
|
from mcstatus import JavaServer
|
||||||
|
|
||||||
from openpyxl import load_workbook
|
|
||||||
from openpyxl import Workbook
|
|
||||||
|
|
||||||
|
|
||||||
imgsize = (16,16)
|
imgsize = (16,16)
|
||||||
sleeptime = 0.1
|
sleeptime = 0.1
|
||||||
nullimg = b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAaklEQVQ4T62TWw7AIAgEl/sf2qoRY4ywa1tD/JvhoRjGKUAN/RhQY1y3sKdpEltht2Z17Mmm4A3cW3AjE+yVTk4RnNqUBdGMJEE2YCpgr5MKGNymHwoUOBSo8FGw/j72J1LBDfzPMn1d5wfNZUf5qKNxAQAAAABJRU5ErkJggg=="
|
nullimg = b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAaklEQVQ4T62TWw7AIAgEl/sf2qoRY4ywa1tD/JvhoRjGKUAN/RhQY1y3sKdpEltht2Z17Mmm4A3cW3AjE+yVTk4RnNqUBdGMJEE2YCpgr5MKGNymHwoUOBSo8FGw/j72J1LBDfzPMn1d5wfNZUf5qKNxAQAAAABJRU5ErkJggg=="
|
||||||
threadcount = 1
|
threadcount = 1
|
||||||
|
savecount = 5
|
||||||
|
|
||||||
|
foundcount = 0
|
||||||
outputfilename = None
|
outputfilename = None
|
||||||
|
|
||||||
def appenddata(ip, latency, pver, ver, cplayers, mplayers, motd, isicon):
|
def appenddata(ip, latency, pver, ver, cplayers, mplayers, motd, isicon):
|
||||||
book = None
|
#with open("output.txt", "a") as file:
|
||||||
sheet = None
|
# file.write(f"{ip}|{latency}|{pver}|{ver}|{cplayers}|{mplayers}|{motd}|{isicon}\n")
|
||||||
|
data = None
|
||||||
try:
|
try:
|
||||||
book = load_workbook(filename=outputfilename)
|
with open(outputfilename, "r") as file:
|
||||||
sheet = book.active
|
data = json.load(file)
|
||||||
except:
|
except:
|
||||||
book = Workbook()
|
appenddata(ip, latency, pver, ver, cplayers, mplayers, motd, isicon)
|
||||||
sheet = book.active
|
|
||||||
sheet.append(("ip", "latency", "pver", "ver", "cplayers", "mplayers", "motd", "isicon"))
|
|
||||||
|
|
||||||
|
|
||||||
sheet.append((ip, latency, pver, ver, cplayers, mplayers, motd, isicon))
|
|
||||||
|
|
||||||
book.save(outputfilename)
|
|
||||||
|
|
||||||
|
data.append({"ip": ip, "latency": latency, "pver": pver, "ver": ver, "cplayers": cplayers, "mplayers": mplayers, "motd": motd, "isicon": isicon})
|
||||||
|
with open(outputfilename, "w") as file:
|
||||||
|
json.dump(data, file)
|
||||||
|
|
||||||
def img2ascii(icon):
|
def img2ascii(icon):
|
||||||
|
|
||||||
@@ -82,9 +78,6 @@ def scanip(ip):
|
|||||||
|
|
||||||
motdtxt = status.motd.to_plain()
|
motdtxt = status.motd.to_plain()
|
||||||
|
|
||||||
if outputfilename != None:
|
|
||||||
appenddata(ip, status.latency, ver.protocol, ver.name, players.online, players.max, motdtxt, isicon)
|
|
||||||
|
|
||||||
motd = ["", ""]
|
motd = ["", ""]
|
||||||
if "\n" in motdtxt:
|
if "\n" in motdtxt:
|
||||||
split = motdtxt.split("\n")
|
split = motdtxt.split("\n")
|
||||||
@@ -112,10 +105,14 @@ def scanip(ip):
|
|||||||
line += f"{motd[1]}"
|
line += f"{motd[1]}"
|
||||||
|
|
||||||
output += f"{line}\n"
|
output += f"{line}\n"
|
||||||
#with open("output.txt", "a") as file:
|
|
||||||
# file.write(f"{output}\n")
|
|
||||||
print(f"{output}\n") # If everything isn't printed at the same time, the output text could become mixed.
|
print(f"{output}\n") # If everything isn't printed at the same time, the output text could become mixed.
|
||||||
|
|
||||||
|
global foundcount
|
||||||
|
foundcount += 1
|
||||||
|
if outputfilename != None:
|
||||||
|
appenddata(ip, math.ceil(status.latency), ver.protocol, ver.name, players.online, players.max, motdtxt, isicon)
|
||||||
threadcount -= 1
|
threadcount -= 1
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
threads = []
|
threads = []
|
||||||
@@ -124,8 +121,15 @@ if sys.argv[1] == "-p":
|
|||||||
if not scanip(sys.argv[2]):
|
if not scanip(sys.argv[2]):
|
||||||
print("Server not online")
|
print("Server not online")
|
||||||
elif sys.argv[1] == "-f":
|
elif sys.argv[1] == "-f":
|
||||||
if sys.argv[3] == "-o":
|
if len(sys.argv) == 4 and sys.argv[3] == "-o":
|
||||||
outputfilename = sys.argv[4]
|
outputfilename = sys.argv[4]
|
||||||
|
try:
|
||||||
|
open(outputfilename, "r")
|
||||||
|
except:
|
||||||
|
with open(outputfilename, "a") as file:
|
||||||
|
file.write("[]")
|
||||||
|
with open(outputfilename, "r") as file:
|
||||||
|
data = json.load(file)
|
||||||
|
|
||||||
with open(sys.argv[2]) as file:
|
with open(sys.argv[2]) as file:
|
||||||
length = sum(1 for line in open(sys.argv[2]))
|
length = sum(1 for line in open(sys.argv[2]))
|
||||||
@@ -137,8 +141,9 @@ elif sys.argv[1] == "-f":
|
|||||||
per = round(100*(index/length), 2)
|
per = round(100*(index/length), 2)
|
||||||
pergap = ' '*(6-len(str(per)))
|
pergap = ' '*(6-len(str(per)))
|
||||||
thrgap = ' '*(3-len(str(threadcount)))
|
thrgap = ' '*(3-len(str(threadcount)))
|
||||||
|
fndgap = ' '*(4-len(str(foundcount)))
|
||||||
|
|
||||||
print(f"Scanning IP: {ip}{ipgap} {pergap}{per}% done {thrgap} {threadcount} pending", end='\r')
|
print(f"Scanning IP: {ip}{ipgap} {pergap}{per}% done {thrgap} {threadcount} pending {fndgap}{foundcount} found", end='\r')
|
||||||
thread = Thread(target = scanip, args = (ip, ))
|
thread = Thread(target = scanip, args = (ip, ))
|
||||||
thread.start()
|
thread.start()
|
||||||
threads.append(thread)
|
threads.append(thread)
|
||||||
@@ -148,8 +153,10 @@ elif sys.argv[1] == "-f":
|
|||||||
|
|
||||||
for thread in threads:
|
for thread in threads:
|
||||||
thread.join()
|
thread.join()
|
||||||
|
cursavecount = 10
|
||||||
|
appenddata("ip", "latency", "pver", "ver", "cplayers", "mplayers", "motd", "isicon")
|
||||||
else:
|
else:
|
||||||
print("Usage:\n"+\
|
print("Usage:\n"+\
|
||||||
"srvstatus.py -p IP\n"+\
|
"srvstatus.py -p IP\n"+\
|
||||||
"srvstatus.py -f inlist.txt\n"+\
|
"srvstatus.py -f inlist.txt\n"+\
|
||||||
"srvstatus.py -f inlist.txt -o outfile.xlsx")
|
"srvstatus.py -f inlist.txt -o outfile.xlsx")
|
||||||
Reference in New Issue
Block a user