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())
Exemple #2
0
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()
Exemple #3
0
 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
Exemple #4
0
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()
Exemple #5
0
        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()