def test_RC_pagegenerator_result(self): import logging lgr = logging.getLogger('socketIO_client') lgr.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) lgr.addHandler(ch) site = self.get_site() pagegenerator = pagegenerators.LiveRCPageGenerator(site, total=self.length) entries = list(pagegenerator) self.assertEqual(len(entries), self.length) testentry = entries[0] self.assertEqual(testentry.site, site) self.assertTrue(hasattr(testentry, '_rcinfo')) rcinfo = testentry._rcinfo self.assertEqual(rcinfo['server_name'], site.hostname()) self.assertEqual(rcinfo['wiki'], site.dbName()) for key in [ "id", "type", "namespace", "title", "comment", "timestamp", "user", "bot" ]: self.assertIn(key, rcinfo.keys())
def main(*args): """ Procesa los parámetros desde la línea de comandos If args is an empty list, sys.argv is used. @param args: command line arguments @type args: list of unicode """ opts = {} local_args = pywikibot.handle_args(args) for arg in local_args: if arg.startswith('-gf:'): opts['gf'] = float(arg[4:]) elif arg.startswith('-dm:'): opts['dm'] = float(arg[4:]) elif arg.startswith('-wiki:'): opts['wiki'] = arg[6:] elif arg.startswith('--debug'): opts['debug'] = True site = pywikibot.Site() if 'wiki' in opts and opts['wiki'] != 'eswiki': lang = opts['wiki'][0:2] family = opts['wiki'][2:] site = pywikibot.Site(lang, family) bot = SeroBOT(pagegenerators.LiveRCPageGenerator(site), site=site, **opts) bot.run()
def run(self): global MIN_SIZE self.generator = [] log('Starting live bot') filter_gen = lambda gen: [p for p in gen if self.page_filter(p)] if self.use_stream: live_gen = pagegenerators.LiveRCPageGenerator(self.site) live_gen = filter_gen(live_gen) else: from IRCRCListener import irc_rc_listener live_gen = (p for p in irc_rc_listener(self.site, filter_gen)) pending_checks = [] reconnect_index = 500 try: for page in live_gen: rcinfo = page._rcinfo #log('Adding page:' + page.title()) # TODO: remove rolledback edits from generator log('Page in buffer: {}'.format(len(pending_checks))) pending_checks.append( (page, rcinfo['revision']['new'], rcinfo['revision']['old'] or 0)) if len(pending_checks ) < self.rcthreshold or not self.uploads_ready(): continue # move to next edit if not enough edits accomulated # handle uploads or send new changes to process if len(self.uploads) > 0: pywikibot.output('reporting uploads') self.report_uploads() # report checked edits print('reported') self.uploads = [] reconnect_index -= 1 if reconnect_index == 0: pywikibot.output('Reconnect after many uploads') self._init_server() reconnect_index = 500 else: pywikibot.output('checking pending') self.generator = pending_checks log('checking pending') self.process_changes() pending_checks = [] except KeyboardInterrupt: pywikibot.output('handling uploaded changes') while not self.uploads_ready(): continue # handle uploads or send new changes to process if len(self.uploads) > 0: self.report_uploads() # report checked edits
def main(*args): """ Procesa los parámetros desde la línea de comandos If args is an empty list, sys.argv is used. @param args: command line arguments @type args: list of unicode """ opts = {} local_args = pywikibot.handle_args(args) for arg in local_args: if arg.startswith('-gf:'): opts['gf'] = float(arg[4:]) elif arg.startswith('-dm:'): opts['dm'] = float(arg[4:]) elif arg.startswith('--debug'): opts['debug'] = True bot = SeroBOT(pagegenerators.LiveRCPageGenerator(), site=pywikibot.Site(), **opts) bot.run()
prediccion = goodfaith.get('score').get('prediction') probabilidad = goodfaith.get('score').get('probability').get('true') d_prediccion = damaging.get('score').get('prediction') d_probabilidad = damaging.get('score').get('probability').get('true') retornar[rev] = {'buena_fe': prediccion, 'prob': probabilidad, 'danina': d_prediccion, 'prob_d': d_probabilidad} return retornar def score(rev): return scores([rev]).get(rev) Site = pywikibot.Site() if Site.logged_in() == False: Site.login() for page in pagegenerators.LiveRCPageGenerator(site=Site): if page._rcinfo.get('type') == 'edit' and page._rcinfo.get('namespace') in [0, 100] and page._rcinfo.get('user') != Site.username(): revision = page._rcinfo.get('revision') ores = score(str(revision.get('new'))) print ('>' if ores.get('prob') < 0.095 else ' ', revision.get('new'), ores.get('prob'), ores.get('prob_d'), page.title(), page._rcinfo.get('user')) if ores.get('prob') < 0.095 or ores.get('prob_d') > 0.97 or (ores.get('prob') < 0.13 and ores.get('prob_d') > 0.95): old = page.text page.text = page.getOldVersion(revision.get('old')) pywikibot.showDiff(old, page.text) try: #page.save(u'BOT - Reversión de página ([[:mw:ORES|ORES]]: '+ str(ores.get('prob'))+')') token = pywikibot.data.api.Request(site=Site, parameters={'action': 'query', 'meta':'tokens', 'type': 'rollback'}).submit()['query']['tokens']['rollbacktoken'] parameters={'action': 'rollback', 'title': page.title(),
logging.info(template) logging.info(summary) logging.info(human_readable) if not check_exceptions(page.text): page.save(summary) except pywikibot.exceptions.NoPage: logging.error("No Page, pass") pass except: logging.error(sys.exc_info()) pass if __name__ == "__main__": # Global Settings verbose = 1 logging.basicConfig(format='%(asctime)s - %(message)s', level=logging.INFO) copyright_query = "https://copyvios.toolforge.org/api.json?version=1&action=search&project=" + project + "&lang=" + language + "&title=" human_query = "https://copyvios.toolforge.org/?lang=" + language + "&project=" + project + "&title={0}&oldid=&action=search&use_engine=1&use_links=1&turnitin=0" # Generators # generator = pagegenerators.TextfilePageGenerator(filename='TestPages.txt') # Offline testing generator = pagegenerators.LiveRCPageGenerator(wiki) # Live RC logging.info("Telif Bot starting up...") for page in generator: main()