Esempio n. 1
0
 def run(self):
     """Saves page to db"""
     db = Storage()
     db.execute("""CREATE TABLE IF NOT EXISTS quality
                 (name TEXT, templates INT, edits INT, len INT,
                 cats INT, linked INT, referenced INT, images INT,
                 iwiki INT, sections INT, users INT)""")
     db.delete("quality", {"name": self.pagename})
     db.insert("quality", self.eval())
Esempio n. 2
0
class AllAFI:
    """module for AFI stats update"""
    def __init__(self, action):
        self.action = action
        self.site = wikipedia.getSite()
        self.afi = catlib.Category(self.site, \
            u'Категория:Википедия:Статьи для срочного улучшения')
        self.afi_list = []
        self.afi_list_title = []
        self.cache = Storage() 
    def load_all(self):
        """Loads all articles for improvement to sqlite table"""
        self.cache.create('category', {'name':'TEXT', 'cat':'TEXT'})
        self.cache.delete('category')
        self.afi_list = self.afi.articlesList()
        self.afi_list_title = [self.cache.quote(_.title(withNamespace=False)) for _ in self.afi.articlesList()]
        
        for a in self.afi_list:
            wikipedia.output(a)
            for cat in a.categories():
                self.cache.insert('category', (a.title(withNamespace=False), cat.title(withNamespace=False)))

        # now clear articles table from non-actual articles
        re = self.cache.cursor.execute(u"SELECT name FROM articles;")
        for l in re.fetchall():
            if l[0] not in self.afi_list_title:
                wikipedia.output(l[0])
                self.cache.delete('articles', {'name':l[0]})

    def update_stats(self):
        """prints stats to wikipedia page"""
        text = ""
        n1 = self.cache.cursor.execute("SELECT count(DISTINCT name) FROM category;").fetchone()[0]
        n2 = self.cache.cursor.execute("SELECT count(*) FROM articles;").fetchone()[0]
        text += u"Всего статей на КУЛ: '''%s''', статей в базе бота '''%s''' \r\n" % (n1, n2)

        re = self.cache.cursor.execute("SELECT cat, count(*) AS c FROM category GROUP BY cat HAVING c>10 ORDER BY c DESC;")
        text += u"== Топ категорий <ref>Категории, в которых более 10 статей на улучшении, количество статей указано в скобках</ref> == \r\n"
        for l in re.fetchall():
            text += u"* [[:Категория:%s|]]: (%s) \r\n" % l

        text += u"== Самые старые статьи <ref>Учитывается самая первая номинация КУЛ</ref> == \r\n"
        re = self.cache.cursor.execute(u"SELECT name, ts FROM articles ORDER BY ts limit 20;")
        for l in re.fetchall():
            text += u"* [[%s]] (%s) \r\n" % l
        
        re = self.cache.cursor.execute("SELECT count(*), replics FROM articles GROUP BY replics;")
        text += u"== По количеству реплик == \r\n"
        for l in re.fetchall():
            text += u"* Обсуждения %s статей имеют %s реплик\r\n" % (l)
        
        re = self.cache.cursor.execute("SELECT topic, topic, n, ts FROM updates ORDER BY n DESC;")
        text += u"== Последние обновления == \r\n"
        for l in re.fetchall():
            text += u"* [[Википедия:К улучшению/Тематические обсуждения/%s|%s]]: (Статей %s, обновлена %s) \r\n" % (l)
        text += u"== Примечания ==\r\n{{примечания}}"
        
        P = wikipedia.Page(self.site, u"Википедия:К улучшению/Тематические обсуждения/Статистика")
        P.put(text, u"Обновление статистики", botflag = True)

    def run(self):
        """entry point"""
        if self.action == "all":
            self.load_all()
        self.update_stats()