ویکیپدیا:درخواستهای ربات/ربات شمارندهٔ ویرایشهای رأیدهندگان
ظاهر
این کاربر یک ربات است | |
---|---|
وظیفه(ها) | درآوردن آمار مشارکتهای رأیدهندگان در نظرخواهیها |
موافق محرومیت؟ | خیر |
موافق خاموششدن اضطراری؟ | بله |
اجازهنامه | CC-BY-SA 3.0 |
تست شده؟ | بله |
این کد آمار ویرایشگران صفحههای نظرخواهیها را میگیرد و در زیرصفحهٔ «آمار» از همان صفحه میریزد.این ربات فقط بر روز تولسرور قابل اجرا هست چون نیاز به کوئریگیری از آنجا دارد.
<syntaxhighlight lang="python">
- !/usr/bin/python
- -*- coding: utf-8 -*-
- Reza (User:reza1615), 2011
- Z (User:ZxxZxxZ)
- Distributed under the terms of the CC-BY-SA 3.0.
import wikipedia, pagegenerators, catlib, urllib import gzip, codecs, config, time, re import MySQLdb as mysqldb from datetime import timedelta, datetime
wikipedia.config.put_throttle = 0 wikipedia.put_throttle.setDelay() site = wikipedia.getSite('fa')
def checkUser(username, years, months, days):
years = int(years) months = int(months) days = int(days) count = 0 query = 'SELECT DATE(CONCAT(YEAR(rev_timestamp),"-",MONTH(rev_timestamp),"-",DAY(rev_timestamp))) AS DAY,COUNT(rev_timestamp) AS revisions FROM `revision` JOIN `page` ON `page_id` = `rev_page` JOIN `user` ON `user_id` = `rev_user` WHERE `user_name` = "'+username+'" AND `page_namespace` = 0 GROUP BY DAY;' conn = mysqldb.connect('fawiki.labsdb', db = site.dbName(), user = config.db_username, passwd = config.db_password) cursor = conn.cursor() query = query.encode(site.encoding()) cursor.execute(query) results = cursor.fetchall() #----------------- sql finsh ---------------- for row in results: dates = str(row[0]) if int(dates[0:4]) < years: count += int(row[1]) continue if int(dates[0:4]) == years and int(dates[5:7]) < months: count += int(row[1]) continue if int(dates[0:4]) == years and int(dates[5:7]) == months and int(dates[8:10]) < days: count += int(row[1]) return count
def getEditors(page):
uList = [] hist = page.fullVersionHistory() for i in range(0, len(hist)): username = hist[i][2] if username not in uList: uList.append(username) return uList
def getSetting():
setting = wikipedia.Page(site, u'کاربر:Z-BOT/تنظیمات نظرسنجیها').get() if u'خاموش' in setting: wikipedia.output(u'INFO: An admin turned off this function.') wikipedia.stopme() for i in range(0,10): setting = setting.replace(u'۰۱۲۳۴۵۶۷۸۹'[i], u'0123456789'[i]) move = int(re.search(u'(?:\{\{.*?|\|)\s*انتقال\s*=\s*(\S+)\s*(?:\||\}\})', setting).group(1)) delete = int(re.search(u'(?:\||\{\{.*?)\s*حذف\s*=\s*(\S+)\s*(?:\||\}\})', setting).group(1)) etc = int(re.search(u'(?:\||\{\{.*?)\s*غیره\s*=\s*(\S+)\s*(?:\}\}|\|)', setting).group(1)) return (move, delete, etc)
def main():
while True: nzrKhahiHa = (catlib.Category(site, u'رده:برای اقدام ربات (نظرخواهی برای انتقال)').articlesList(), catlib.Category(site, u'رده:برای اقدام ربات (نظرخواهی برای حذف)').articlesList(), catlib.Category(site, u'رده:برای اقدام ربات (نظرخواهیهای دیگر)').articlesList()) setting = getSetting() today = str(datetime.now()).replace('-',).split(' ')[0].strip() years, months, days = today[0:4], today[4:6], today[6:8] for i in range(0,2): for nzrKhahi in nzrKhahiHa[i]: page = wikipedia.Page(site, nzrKhahi.title() + u'/آمار') noPage = False try: text = page.get() except wikipedia.NoPage: noPage = True text = uusers = getEditors(nzrKhahi) for user in users: if noPage is True or user not in text: edits = checkUser(user, years, months, days) text = text.replace(u'|}', ) if edits < setting[i]: text += u'| %s || \'\'\'٪s\'\'\'\n|-\n' % (user, str(edits)) else: text += u'| %s || ٪s\n|-\n' % (user, str(edits)) text += u'|}\n' if noPage is True: page.put(text, comment=u'ربات: آمار ویرایشهای رأیدهندگان (کد)', minorEdit = True, botflag=True) else: page.put(text, comment=u'ربات: بروزرسانی آمار ویرایشهای رأیدهندگان (کد)', minorEdit = True, botflag=True) time.sleep(300) # sleep for an hour if __name__ == '__main__': try: main() except KeyboardInterrupt: wikipedia.stopme()
کاربر | تعداد ویرایش |
---|