پرش به محتوا

ویکی‌پدیا:درخواست‌های ربات/ربات شمارندهٔ ویرایش‌های رأی‌دهندگان

از ویکی‌پدیا، دانشنامهٔ آزاد
{{{نام ربات}}}
این کاربر یک ربات است
وظیفه(ها)درآوردن آمار مشارکت‌های رأی‌دهندگان در نظرخواهی‌ها
موافق محرومیت؟خیر
موافق خاموش‌شدن اضطراری؟بله
اجازه‌نامهCC-BY-SA 3.0
تست شده؟بله

این کد آمار ویرایشگران صفحه‌های نظرخواهی‌ها را می‌گیرد و در زیرصفحهٔ «آمار» از همان صفحه می‌ریزد.این ربات فقط بر روز تول‌سرور قابل اجرا هست چون نیاز به کوئری‌گیری از آنجا دارد.

<syntaxhighlight lang="python">

  1. !/usr/bin/python
  2. -*- coding: utf-8 -*-
  3. Reza (User:reza1615), 2011
  4. Z (User:ZxxZxxZ)
  5. 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 = u
users = 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()
آمار تعداد ویرایش‌های رأی‌دهندگان
کاربر تعداد ویرایش