Advertisement
jcgru

SkycadeBanStats

Jun 8th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.51 KB | None | 0 0
  1. from bs4 import BeautifulSoup
  2. import requests
  3. import sys
  4. from requests import get
  5. from requests.exceptions import RequestException
  6. from contextlib import closing
  7. from PyQt5 import QtCore, QtGui, QtWidgets
  8. import threading
  9.  
  10. working = 0
  11.  
  12. class Ui_MainWindow(object):
  13.     def setupUi(self, MainWindow):
  14.         MainWindow.setObjectName("MainWindow")
  15.         MainWindow.resize(421, 264)
  16.         self.centralwidget = QtWidgets.QWidget(MainWindow)
  17.         self.centralwidget.setObjectName("centralwidget")
  18.         self.label = QtWidgets.QLabel(self.centralwidget)
  19.         self.label.setGeometry(QtCore.QRect(20, 30, 71, 21))
  20.         font = QtGui.QFont()
  21.         font.setPointSize(11)
  22.         self.label.setFont(font)
  23.         self.label.setObjectName("label")
  24.         self.username_entry = QtWidgets.QLineEdit(self.centralwidget)
  25.         self.username_entry.setGeometry(QtCore.QRect(100, 30, 191, 21))
  26.         self.username_entry.setObjectName("username_entry")
  27.         self.start_button = QtWidgets.QPushButton(self.centralwidget)
  28.         self.start_button.setGeometry(QtCore.QRect(310, 30, 75, 23))
  29.         self.start_button.setObjectName("start_button")
  30.         self.label_2 = QtWidgets.QLabel(self.centralwidget)
  31.         self.label_2.setGeometry(QtCore.QRect(20, 80, 41, 31))
  32.         font = QtGui.QFont()
  33.         font.setPointSize(11)
  34.         self.label_2.setFont(font)
  35.         self.label_2.setObjectName("label_2")
  36.         self.page_label = QtWidgets.QLabel(self.centralwidget)
  37.         self.page_label.setGeometry(QtCore.QRect(70, 80, 121, 31))
  38.         font = QtGui.QFont()
  39.         font.setPointSize(11)
  40.         self.page_label.setFont(font)
  41.         self.page_label.setObjectName("page_label")
  42.         self.line = QtWidgets.QFrame(self.centralwidget)
  43.         self.line.setGeometry(QtCore.QRect(20, 120, 381, 21))
  44.         self.line.setFrameShape(QtWidgets.QFrame.HLine)
  45.         self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
  46.         self.line.setObjectName("line")
  47.         self.total_bans_lcd = QtWidgets.QLCDNumber(self.centralwidget)
  48.         self.total_bans_lcd.setGeometry(QtCore.QRect(110, 200, 91, 51))
  49.         self.total_bans_lcd.setDigitCount(7)
  50.         self.total_bans_lcd.setProperty("value", 0.0)
  51.         self.total_bans_lcd.setProperty("intValue", 0)
  52.         self.total_bans_lcd.setObjectName("total_bans_lcd")
  53.         self.label_3 = QtWidgets.QLabel(self.centralwidget)
  54.         self.label_3.setGeometry(QtCore.QRect(10, 210, 91, 41))
  55.         font = QtGui.QFont()
  56.         font.setPointSize(14)
  57.         self.label_3.setFont(font)
  58.         self.label_3.setObjectName("label_3")
  59.         self.label_4 = QtWidgets.QLabel(self.centralwidget)
  60.         self.label_4.setGeometry(QtCore.QRect(370, 240, 51, 20))
  61.         self.label_4.setObjectName("label_4")
  62.         MainWindow.setCentralWidget(self.centralwidget)
  63.  
  64.         self.retranslateUi(MainWindow)
  65.         QtCore.QMetaObject.connectSlotsByName(MainWindow)
  66.  
  67.         self.start_button.clicked.connect(self.manage_work)
  68.  
  69.     def retranslateUi(self, MainWindow):
  70.         _translate = QtCore.QCoreApplication.translate
  71.         MainWindow.setWindowTitle(_translate("MainWindow", "SkycadeBanStats"))
  72.         self.label.setText(_translate("MainWindow", "Username"))
  73.         self.start_button.setText(_translate("MainWindow", "Collect"))
  74.         self.label_2.setText(_translate("MainWindow", "Page"))
  75.         self.page_label.setText(_translate("MainWindow", "0/0"))
  76.         self.label_3.setText(_translate("MainWindow", "Total Bans"))
  77.         self.label_4.setText(_translate("MainWindow", "yakovliam"))
  78.     # My program stuff
  79.     def closeEvent(self, event):
  80.         # do stuff
  81.         event.accept()  # let the window close
  82.     def manage_work(self):
  83.         global working
  84.         if self.username_entry.text() == "":
  85.             return
  86.         if(working == 0):
  87.             working = 1
  88.             h = threading.Thread(name='background', target=self.open_page)
  89.             h.setDaemon(True)
  90.             h.start()
  91.     def simple_get(self, url):
  92.         try:
  93.             with closing(get(url, stream=True)) as resp:
  94.                 if self.is_good_response(resp):
  95.                     return resp.content
  96.                 else:
  97.                     return None
  98.         except RequestException as e:
  99.             return None
  100.  
  101.     def is_good_response(self, resp):
  102.         content_type = resp.headers['Content-Type'].lower()
  103.         return (resp.status_code == 200
  104.                 and content_type is not None
  105.                 and content_type.find('html') > -1)
  106.     def open_page(self):
  107.         username = self.username_entry.text()
  108.         print(username)
  109.         url = "https://api.mojang.com/users/profiles/minecraft/" + username
  110.         print("Using Api [GET] " + url)
  111.         response = requests.get(url)
  112.         try:
  113.             ret = response.json()
  114.             uuid = ret['id']
  115.             print("UUID " + uuid)
  116.         except:
  117.             print("Error getting UUID!")
  118.             uuid = "0"
  119.         if uuid != 0:
  120.             self.scrape(uuid)
  121.         else:
  122.             self.username_entry.clear()
  123.     def scrape(self, uuid):
  124.         global working
  125.         pge = 0
  126.         bans = 0
  127.         fuuid = uuid[:8] + "-" + uuid[8:12] + "-" + uuid[12:16] + "-" + uuid[16:20] + "-" + uuid[20:32]
  128.         urlf = "https://bans.skycade.net/history.php?page=" + str(
  129.             pge) + "&uuid=" + fuuid + "&staffhistory=1&b=60&m=15&w=0&k=0"
  130.         print("Scraping With [GET] " + urlf)
  131.         print(fuuid)
  132.         try:
  133.             url = "https://bans.skycade.net/history.php?page=" + str(0) + "&uuid=" + fuuid + "&staffhistory=1&b=60&m=15&w=0&k=0"
  134.             raw_html = self.simple_get(url)
  135.             html = BeautifulSoup(raw_html, 'html.parser')
  136.             res = html.find_all('div')
  137.             total_pages = 0
  138.             for x in range(0, len(res)):
  139.                 hcf = res[x].text
  140.                 if "Page 1/" in hcf:
  141.                     total_pages = hcf[7:]
  142.             total_pages = int(total_pages) - 2
  143.             self.page_label.setText(str(0) + "/" + str(total_pages))
  144.             self.username_entry.clear()
  145.         except:
  146.             self.page_label.setText("0/0")
  147.             self.username_entry.clear()
  148.             return
  149.         for x in range(0, 1000):
  150.             perc = round((x / total_pages) * 100)
  151.             self.page_label.setText(str(x) + "/" + str(total_pages))
  152.             try:
  153.                 print("Page " + str(x) + "/" + str(total_pages))
  154.                 raw_html = self.simple_get(url)
  155.                 html = BeautifulSoup(raw_html, 'html.parser')
  156.                 for i, tr in enumerate(html.select('tr')):
  157.                     bans = bans + 1
  158.                     self.total_bans_lcd.display(bans)
  159.                 res = html.find_all('a')
  160.                 for p in range(0, len(res)):
  161.                     hcf = res[p]['href']
  162.                     if "history.php?page=" in hcf:
  163.                         final = hcf
  164.                 url = "https://bans.skycade.net/" + hcf
  165.             except:
  166.                 self.username_entry.clear()
  167.                 self.page_label.setText("0/0")
  168.                 working = 0
  169.                 break
  170.         working = 0
  171.  
  172.     def main_fun(self):
  173.         # main stuff
  174.         uuid = self.open_page()
  175.         if (uuid == "0"):
  176.             sys.exit()
  177.         self.scrape(uuid)
  178.  
  179.  
  180. if __name__ == "__main__":
  181.     import sys
  182.     app = QtWidgets.QApplication(sys.argv)
  183.     MainWindow = QtWidgets.QMainWindow()
  184.     ui = Ui_MainWindow()
  185.     ui.setupUi(MainWindow)
  186.     MainWindow.show()
  187.     sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement