Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.26 KB | None | 0 0
  1. import json
  2. import sched
  3. import sqlite3
  4. import time
  5. from datetime import datetime
  6. import asyncio
  7.  
  8. from bs4 import BeautifulSoup
  9. from halo import Halo
  10. from requests_html import HTMLSession
  11.  
  12.  
  13. def registerSentLog(logFile):
  14.     global conn
  15.     test = conn.execute('SELECT * FROM sent WHERE log = "' + logFile + '"')
  16.     rows = test.fetchall()
  17.     print(rows)
  18.     if not rows:
  19.         conn.execute("INSERT INTO sent ('log', 'sent_at') VALUES (?, ?)", (logFile, datetime.now().strftime("%d/%m/%Y %H:%M:%S")))
  20.  
  21. def registerChunk(logFile, content):
  22.     global conn
  23.     chunk = conn.execute('SELECT * FROM chunk WHERE logfile = "' + logFile + '"')
  24.     rows = chunk.fetchall()
  25.     if rows and content:
  26.         conn.execute("UPDATE chunk SET chunk = ? WHERE logfile = ?", (content, logFile))
  27.     elif content:
  28.         conn.execute("INSERT INTO chunk (logfile, chunk) VALUES (?, ?)", (logFile, content))
  29.  
  30.  
  31. def getSent():
  32.     global conn
  33.  
  34.     cursor = conn.execute("SELECT * FROM sent")
  35.  
  36.     sent = []
  37.     for row in cursor.fetchall():
  38.         sent.append(row[1])
  39.  
  40.     return sent
  41.  
  42.  
  43. def login():
  44.     global session
  45.  
  46.     try:
  47.         spinner = Halo(text="Logando...", spinner='dots')
  48.         spinner.start()
  49.  
  50.         resp = session.get("https://id2.g-portal.com/login")
  51.  
  52.         soup = BeautifulSoup(resp.html.html, 'html.parser')
  53.  
  54.         form = soup.find('form')
  55.         input_name = soup.find('input', {'name': 'login'})
  56.         input_pass = soup.find('input', {'name': 'password'})
  57.  
  58.         input_name['value'] = 'youlogin'
  59.         input_pass['value'] = 'yourpassword'
  60.  
  61.         fields = form.findAll('input')
  62.         formdata = dict((field.get('name'), field.get('value')) for field in fields)
  63.  
  64.         session.post('https://id2.g-portal.com' + form['action'], data=formdata)
  65.  
  66.         session.get('https://id2.g-portal.com/goto/www.g-portal.us/')
  67.  
  68.         spinner.stop()
  69.  
  70.         return True
  71.     except:
  72.         return False
  73.  
  74.  
  75. def getlog(file):
  76.     global session
  77.     resp = session.post('https://www.g-portal.us/en/scum/logs/{server_id}', {'load': 'true', 'ExtConfig[config]': file})
  78.  
  79.     objeto = json.loads(resp.html.html)
  80.  
  81.     if 'ExtConfig' in objeto:
  82.         return objeto['ExtConfig']['content']
  83.  
  84.     return false
  85.  
  86. def is_sent(item):
  87.     global conn
  88.  
  89.     cursor = conn.execute('SELECT * FROM sent WHERE log = "' + item + '"')
  90.  
  91.     if cursor.fetchall():
  92.         return True
  93.  
  94.     return False
  95.  
  96.  
  97. async def sendlog(item, lasttime, lastk):
  98.     global sent, session, conn
  99.  
  100.     if not is_sent(item):
  101.         print(item + '\n')
  102.         content = getlog(item)
  103.  
  104.         chunk = conn.execute('SELECT * FROM chunk WHERE logfile = "' + item + '"')
  105.         rows = chunk.fetchall()
  106.  
  107.         original = content
  108.         if rows:
  109.             content = content.replace(rows[0][2], "")
  110.  
  111.         if item.find(lasttime) >= 0:
  112.             registerChunk(item, original)
  113.         else:
  114.             registerSentLog(item)
  115.  
  116.         if content and item.find('violations') == -1:
  117.             print(content + '\n')
  118.             resp = session.post('yourendpoint', {'name': item, 'log': content})
  119.             print(resp.html.html)
  120.             response = json.loads(resp.html.html)
  121.  
  122.  
  123.  
  124.  
  125. def scrap():
  126.     global sent, session, conn
  127.  
  128.     resp = session.get('https://www.g-portal.us/en/scum/logs/{server_id}')
  129.  
  130.     soup = BeautifulSoup(resp.html.html, 'html.parser')
  131.     div = soup.find('div', {'class': 'logs'})
  132.  
  133.     if div is None:
  134.         login()
  135.         return
  136.  
  137.     logs = json.loads(div['data-logs'])
  138.     lastk = list(logs.values())[-1]
  139.     lasttime = lastk.replace('SCUM\\Saved\\SaveFiles\\Logs\\violations_', '').replace('.log', '')
  140.  
  141.     loop = asyncio.new_event_loop()
  142.  
  143.     tasks = []
  144.     for item in logs.values():
  145.         tasks.append(loop.create_task(sendlog(item, lasttime, lastk)))
  146.  
  147.     loop.run_until_complete(asyncio.wait(tasks))
  148.     loop.close()
  149.  
  150. def task(sc):
  151.     global sent
  152.  
  153.     try:
  154.         sent = getSent()
  155.         scrap()
  156.     except Exception as e:
  157.         #pass
  158.         print(e)
  159.     s.enter(0, 0, task, (sc,))
  160.  
  161.  
  162. if __name__ == "__main__":
  163.     session = HTMLSession()
  164.     conn = sqlite3.connect('scum.db', isolation_level=None)
  165.     s = sched.scheduler(time.time, time.sleep)
  166.     s.enter(0, 0, task, (s,))
  167.     s.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement