Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #coding=utf-8
- import requests,re,HTMLParser,shutil,time,datetime,codecs
- import models
- from time import sleep
- from pyquery import PyQuery
- class MatchManager:
- def matcher(self,message_object):
- youtubeResult = None
- youtubeResult = re.search(self.youtubeRe, message_object.message)
- if youtubeResult and message_object.author.rstrip() != "Malbolge":
- return self.youtube(youtubeResult.group(0),message_object)
- return False
- def youtube(self,url,message):
- headers = {
- 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.94 Chrome/37.0.2062.94 Safari/537.36'
- }
- if not re.search('(http://)|(https://)', url):
- url = 'http://' + url
- result = requests.get(url, headers=headers)
- document = PyQuery(result.text)
- content_meta = document('meta[itemprop="name"]').attr('content')
- if content_meta:
- ytMsg = message.author + 'has posted a video: ' + content_meta
- else:
- ytMsg = message.author + ', unrecognized video'
- payload = {
- 'italic': '1',
- 'msg': ytMsg
- }
- return payload
- def __init__ (self):
- self.youtubeRe = (
- r'(https?://)?(www\.)?'
- '(youtube|youtu|youtube-nocookie)\.(com|be)/'
- '(watch\?v=|embed/|v/|.+\?v=)?([^&=%\?]{11})'
- )
- class NetworkManager:
- URL_BASE = 'http://forum.rpg-center.pl/index.php'
- LIST_XML = '?action=shoutbox;sa=get;xml;row=0;restart'
- LOGIN_URL = '?action=login2'
- def __init__(self):
- self.session = requests.Session()
- self.match_manager = MatchManager()
- self.token = None
- self.h = HTMLParser.HTMLParser()
- self.lineCount = 0
- self.ts = 0
- self.st = "0"
- self.stShortened = "0"
- self.mainLoop()
- def logUpdate(self,messages):
- self.lineCount = 0
- with codecs.open('recentlines.txt','r','utf-8') as recentlines:
- linesList = []
- for line in recentlines:
- linesList.append(line.rstrip())
- with codecs.open('logfile.txt','a','utf-8') as f:
- with codecs.open('recentlines.txt','w','utf-8') as recentlines:
- for message in messages:
- if (message.author.rstrip() + " " + message.time + ": " + message.message) not in linesList:
- self.lineCount += 1
- self.__findMatches(message)
- f.write(self.h.unescape(message.author + message.time + ": " + message.message + "\n"))
- recentlines.write(message.author.rstrip() + " " + message.time + ": " + message.message + "\n")
- self.updateDate("logfile.txt")
- shutil.copyfile("logfile.txt","E:/Program Files/EasyPHP-Webserver-14.1b2/www/logfile.txt")
- def updateDate(self,logfile):
- with open("date.txt","r+") as currDate:
- if currDate.readline() != self.stShortened:
- with codecs.open(logfile,'a','utf-8') as f:
- f.write("***Current Date: %s***\n" % self.stShortened)
- currDate.seek(0,0)
- currDate.truncate()
- currDate.write(self.stShortened)
- def acquireTime(self):
- self.ts = time.time()
- self.st = datetime.datetime.fromtimestamp(self.ts).strftime("%d-%m-%Y %H:%M:%S")
- self.stShortened = datetime.datetime.fromtimestamp(self.ts).strftime("%d-%m-%Y")
- def login(self, username, password):
- formdata = {
- 'user': username,
- 'passwrd': password,
- 'cookielength': '-1'
- }
- response = self.session.post(self.__class__.URL_BASE + self.__class__.LOGIN_URL, data=formdata)
- m = re.search(r"sSessionId: '(?P<sessionToken>.+)'", response.text)
- token = m.group('sessionToken').encode('ascii')
- return token
- def __findMatches(self,message):
- matcherResult = self.match_manager.matcher(message)
- if matcherResult:
- self.sendText(matcherResult)
- def sendText(self,message):
- self.session.post(self.__class__.URL_BASE + "?action=shoutbox;sa=send;sesc=" + self.token + ";xml;row=99",data=message)
- def mainLoop(self):
- self.token = self.login('Malbolge','password')
- self.messages = self.session.get(self.__class__.URL_BASE + self.__class__.LIST_XML)
- self.logFile = models.getMessageList(self.messages.text)
- self.previousResponse = self.messages.text
- self.firstLoop = 1
- self.timer = 0
- while True:
- if self.previousResponse != self.messages.text or self.firstLoop == 1:
- self.logFile = models.getMessageList(self.messages.text)
- self.acquireTime()
- self.logUpdate(self.logFile)
- if self.lineCount > 1:
- print "Added %d lines on %s." % (self.lineCount, self.st)
- elif self.lineCount == 1:
- print "Added %d line on %s." % (self.lineCount, self.st)
- self.firstLoop = 0
- for i in range(10):
- sleep(1) #update once every 10 seconds, "for" loop made in order to
- #catch keyboard interrupts faster
- self.timer += 1
- if self.timer == 30:
- self.timer = 0
- heartbeat = self.session.get(self.__class__.URL_BASE)
- self.previousResponse = self.messages.text
- self.messages = self.session.get(self.__class__.URL_BASE + self.__class__.LIST_XML)
- m = NetworkManager()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement