Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import json
- import sched
- import sqlite3
- import time
- from datetime import datetime
- import asyncio
- from bs4 import BeautifulSoup
- from halo import Halo
- from requests_html import HTMLSession
- def registerSentLog(logFile):
- global conn
- test = conn.execute('SELECT * FROM sent WHERE log = "' + logFile + '"')
- rows = test.fetchall()
- print(rows)
- if not rows:
- conn.execute("INSERT INTO sent ('log', 'sent_at') VALUES (?, ?)", (logFile, datetime.now().strftime("%d/%m/%Y %H:%M:%S")))
- def registerChunk(logFile, content):
- global conn
- chunk = conn.execute('SELECT * FROM chunk WHERE logfile = "' + logFile + '"')
- rows = chunk.fetchall()
- if rows and content:
- conn.execute("UPDATE chunk SET chunk = ? WHERE logfile = ?", (content, logFile))
- elif content:
- conn.execute("INSERT INTO chunk (logfile, chunk) VALUES (?, ?)", (logFile, content))
- def getSent():
- global conn
- cursor = conn.execute("SELECT * FROM sent")
- sent = []
- for row in cursor.fetchall():
- sent.append(row[1])
- return sent
- def login():
- global session
- try:
- spinner = Halo(text="Logando...", spinner='dots')
- spinner.start()
- resp = session.get("https://id2.g-portal.com/login")
- soup = BeautifulSoup(resp.html.html, 'html.parser')
- form = soup.find('form')
- input_name = soup.find('input', {'name': 'login'})
- input_pass = soup.find('input', {'name': 'password'})
- input_name['value'] = 'youlogin'
- input_pass['value'] = 'yourpassword'
- fields = form.findAll('input')
- formdata = dict((field.get('name'), field.get('value')) for field in fields)
- session.post('https://id2.g-portal.com' + form['action'], data=formdata)
- session.get('https://id2.g-portal.com/goto/www.g-portal.us/')
- spinner.stop()
- return True
- except:
- return False
- def getlog(file):
- global session
- resp = session.post('https://www.g-portal.us/en/scum/logs/{server_id}', {'load': 'true', 'ExtConfig[config]': file})
- objeto = json.loads(resp.html.html)
- if 'ExtConfig' in objeto:
- return objeto['ExtConfig']['content']
- return false
- def is_sent(item):
- global conn
- cursor = conn.execute('SELECT * FROM sent WHERE log = "' + item + '"')
- if cursor.fetchall():
- return True
- return False
- async def sendlog(item, lasttime, lastk):
- global sent, session, conn
- if not is_sent(item):
- print(item + '\n')
- content = getlog(item)
- chunk = conn.execute('SELECT * FROM chunk WHERE logfile = "' + item + '"')
- rows = chunk.fetchall()
- original = content
- if rows:
- content = content.replace(rows[0][2], "")
- if item.find(lasttime) >= 0:
- registerChunk(item, original)
- else:
- registerSentLog(item)
- if content and item.find('violations') == -1:
- print(content + '\n')
- resp = session.post('yourendpoint', {'name': item, 'log': content})
- print(resp.html.html)
- response = json.loads(resp.html.html)
- def scrap():
- global sent, session, conn
- resp = session.get('https://www.g-portal.us/en/scum/logs/{server_id}')
- soup = BeautifulSoup(resp.html.html, 'html.parser')
- div = soup.find('div', {'class': 'logs'})
- if div is None:
- login()
- return
- logs = json.loads(div['data-logs'])
- lastk = list(logs.values())[-1]
- lasttime = lastk.replace('SCUM\\Saved\\SaveFiles\\Logs\\violations_', '').replace('.log', '')
- loop = asyncio.new_event_loop()
- tasks = []
- for item in logs.values():
- tasks.append(loop.create_task(sendlog(item, lasttime, lastk)))
- loop.run_until_complete(asyncio.wait(tasks))
- loop.close()
- def task(sc):
- global sent
- try:
- sent = getSent()
- scrap()
- except Exception as e:
- #pass
- print(e)
- s.enter(0, 0, task, (sc,))
- if __name__ == "__main__":
- session = HTMLSession()
- conn = sqlite3.connect('scum.db', isolation_level=None)
- s = sched.scheduler(time.time, time.sleep)
- s.enter(0, 0, task, (s,))
- s.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement