Advertisement
Guest User

نظرسنجی

a guest
Apr 3rd, 2014
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.33 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. # Based on basic.py by xqt
  4. # Distributed under the terms of CC-BY-SA 3.0.
  5.  
  6. __version__ = '$Id: BOT 9359 2011-07-10 12:22:39Z$'
  7.  
  8. import wikipedia as pywikibot
  9. import pagegenerators, catlib, urllib, gzip, codecs
  10. from pywikibot import i18n
  11. import MySQLdb as mysqldb
  12. import config
  13. import time
  14. import category
  15.  
  16. pageTitle = raw_input(u'Page> ')
  17. site = pywikibot.getSite('ur')
  18. cat = pywikibot.Page(site, u'زمرہ:جرابی کٹھ پتلیاں')
  19. page = pywikibot.Page(site, pageTitle)
  20. talkPage = pywikibot.Page(site, u'تبادلۂ خیال:'+pageTitle)
  21. global checked
  22. global checkedOld
  23. checked, checkedOld = 0, 0
  24. uListPerm = []
  25.  
  26. pywikibot.config.put_throttle = 0
  27. pywikibot.put_throttle.setDelay()
  28.  
  29. def checkUser(username, yesrs, months, days):
  30. count = 0
  31. 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;'
  32. conn = mysqldb.connect('urwiki-p.labsdb', db = site.dbName(),
  33. user = config.db_username,
  34. passwd = config.db_password)
  35. cursor = conn.cursor()
  36. query = query.encode(site.encoding())
  37. cursor.execute(query)
  38. results = cursor.fetchall()
  39. #------------------------------sql finsh------------------
  40. for row in results:
  41. dates = str(row[0])
  42. if int(dates[0:4]) < years:
  43. count += int(row[1])
  44. continue
  45. if int(dates[0:4]) == years and int(dates[5:7]) < months:
  46. count += int(row[1])
  47. continue
  48. if int(dates[0:4]) == years and int(dates[5:7]) == months and int(dates[8:10]) < days:
  49. count += int(row[1])
  50. return count
  51.  
  52. class BasicBot:
  53.  
  54. def __init__(self, generator, dry):
  55. self.generator = generator
  56. self.dry = dry
  57.  
  58. def run(self):
  59. for page in self.generator:
  60. self.treat(page)
  61.  
  62. def checkUserRight(self, user):
  63. zapasha = CategoryDatabase.getArticles(cat)
  64. for zapas in zapasha:
  65. if user == zapas.title()
  66. return 3
  67.  
  68. del zapasha
  69. zapashaCat = CategoryDatabase.getSubcats(cat)
  70. for zapasCat in zapashaCat:
  71. zapasha = CategoryDatabase.getArticles(zapasCat)
  72. for zapas in zapasha:
  73. if user == zapas.title().replace(u'زمرہ:جرابی کٹھ پتلیاں/', '')
  74. return 3
  75.  
  76. if checkUser(user, yesrs, months, days) >= 100:
  77. return 2 # احازه دارد
  78. else:
  79. return 1 # اجازه ندارد
  80.  
  81. return None # اگر هیچ‌یک نبود
  82.  
  83. def checkPage(self, page):
  84. hist = page.fullVersionHistory()
  85. uList = []
  86. for i in range(checked, len(hist)):
  87. rightStatus = checkUserRight(hist[i][2])
  88. if rightStatus is not None:
  89. uList.append((hist[i][2], hist[i][1], hist[i][0], rightStatus)) # hist[i][2] is user name & hist[i][1] is edit time/date & hist[i][0] is revision ID
  90. uListPerm += uList
  91. checkedOld = checked
  92. checked = len(hist)
  93. return uList
  94.  
  95. def addToLog(self, txt, repText):
  96. return re.sub(u'(= *نتایج بررسی‌های رباتیکی *=+\n.*?)(?=\n=|$)', repText, txt, re.S)
  97.  
  98. def run(self, page):
  99. talkText = self.load(talkPage)
  100. talkText += u'''
  101. == نتایج بررسی‌های رباتیکی ==
  102. <!--
  103. در این زیربخش ***ویرایشی مکنید.***
  104. اگر می‌خواهید مطلب جدیدی به این صفحه بیفزایید، زیر همین زیربخش، زیربخش جدیدی ایجاد کنید.
  105. -->
  106. از هم‌اکنون که این پیام گذاشته می‌شود فرایند مانیتورینگ رباتیک صفحهٔ نظرخواهی آغاز شده‌است.
  107. چنانچه کاربری که بنا بر [[وپ:زاپاس|زاپاس‌بودن]] یا به حد نصاب‌نرسیدن ویرایش‌هایش در این نظرخواهی رأی دهد نام وی در اینجا ثبت خواهد شد.
  108. با قفل‌شدن صفحهٔ نظرخواهی فرایند مانیتورینگ متوقف خواهد شد.~~~~
  109.  
  110. '''
  111. if self.saveTalk(talkText, talkPage, u'ربات: آغاز فرایند مانیتورینگ — گزارش کار اینجا ثبت خواهد شد. ([[وپ:درخواست‌های ربات/ربات نظرسنجی|کد]])')
  112. pywikibot.output(u'INFO: Talk page %s editted' % page.title(asLink=True))
  113.  
  114. while True:
  115. newOnes = self.checkPage(page)
  116. if newOnes == []:
  117. time.sleep(3600) # Sleeping for an hour
  118. else:
  119. for i in range(0, len(newOnes)):
  120. username = newOnes[i][0]
  121. timedate = newOnes[i][1]
  122. revision = newOnes[i][2]
  123. if newOnes[i][3] == 1:
  124. message = u'حساب کاربری رأی‌دهنده ([[کاربر:%s]]) حساب [[وپ:زاپاس|زاپاس]] است — رأی پذیرفته نیست.' % username
  125. messageInTalk = u'[http://fa.wikipedia.org/w/index.php?title=%s&diff=prev&oldid=%s رأی %s] (در %s) پذیرفته نیست چون حساب کاربری حسابی [[وپ:زاپاس|زاپاس]] است.' % (pageTitle, revision, username, timedate)
  126. else: # == 2
  127. message = u'تعداد ویرایش‌های [[کاربر:%s]] به حد نصاب رأی‌دادن نرسیده‌است — رأی پذیرفته نیست.' % (username)
  128. messageInTalk = u'[http://fa.wikipedia.org/w/index.php?title=%s&diff=prev&oldid=%s رأی %s] (در %s) پذیرفته نیست چون تعداد ویرایش‌های وی به حد نصاب نرسیده‌است.' % (pageTitle, revision, username, timedate)
  129.  
  130. text = self.load(page)
  131. textTmp = text
  132. textTmp = re.sub(u'({{ *(?:موافق|مخالف|ممتنع)[^{]*?[[* (?:کاربر|[Uu]ser) *: *%s *(?:\|.*?)?]].*?)\n' % username, ur'<s>\1</s> %s~~~~\n\n' % message, textTmp, re.S)
  133. if textTmp != text:
  134. altMessage = u' رأی کاربر به طور خودکار خط زده شد.'
  135. text = textTmp
  136. if self.save(text, page):
  137. pywikibot.output(u'INFO: Page %s editted.' % page.title(asLink=True))
  138.  
  139. talkText = addToLog(talkText, ur'\1\n%s%s~~~~\n' % (messageInTalk, altMessage))
  140. if self.saveTalk(talkText, talkPage)
  141. pywikibot.output(u'INFO: Talk page %s editted.' % page.title(asLink=True))
  142.  
  143. if done is True:
  144. pywikibot.stopme()
  145.  
  146. def load(self, page):
  147. try:
  148. text = page.get()
  149. except pywikibot.NoPage:
  150. pywikibot.output(u'ERROR: Page %s does not exist.' % page.title(asLink=True))
  151. pywikibot.stopme()
  152. except pywikibot.IsRedirectPage:
  153. pywikibot.output(u'INFO: Page %s is a redirect.' % page.title(asLink=True))
  154. page = page.getRedirectTarget()
  155. text = page.get()
  156. else:
  157. return text
  158. return None
  159.  
  160. def save(self, text, page, comment=u'ربات: خط‌زدن رأی ([[وپ:درخواست‌های ربات/ربات نظرسنجی|کد]])', minorEdit=True, botflag=True):
  161. if text != page.get():
  162. pywikibot.output(u'INFO: Working on %s' % page.title())
  163. if not self.dry:
  164. try:
  165. page.put(text, comment=comment, minorEdit=minorEdit, botflag=botflag)
  166. except pywikibot.LockedPage:
  167. pywikibot.output(u"INFO: Page %s is locked. It seems the work is done. I'm trying to report it on the talk page. Monitoring process is no longer active." % page.title(asLink=True))
  168. talkText = addToLog(talkText, ur"\1\nصفحهٔ نظرخواهی قفل شده‌است. فرایند مانیتورینگ متوقف شد.\n\n'''توجه:\''' اگر صفحهٔ نظرخواهی به دلیلی غیر از پایان نظرخواهی قفل شده‌است لطفاً هرچه زودتر به صاحبم اطلاع دهید.~~~~\n" % (messagem, altMessage))
  169. done = True
  170. except pywikibot.EditConflict:
  171. pywikibot.output(u'INFO: Edit conflict on %s. Trying again...' % page.title())
  172. checked = checkedOld
  173. except pywikibot.SpamfilterError, error:
  174. pywikibot.output(u'ERROR: Cannot change %s because of spam blacklist entry %s' % (page.title(), error.url))
  175. pywikibot.stopme()
  176. else:
  177. return True
  178. return False
  179.  
  180. def saveTalk(self, text, page, comment=u'ربات: گزارش کار ([[وپ:درخواست‌های ربات/ربات نظرسنجی|کد]])', minorEdit=True, botflag=True):
  181. if text != page.get():
  182. pywikibot.output(u'INFO: Working on %s' % page.title())
  183. if not self.dry:
  184. try:
  185. page.put(text, comment=comment, minorEdit=minorEdit, botflag=botflag)
  186. except pywikibot.LockedPage:
  187. pywikibot.output(u'INFO: Talk Page %s is locked so it seems the work is done; but the log is NOT complete -- you shold check the talk page later. Stopping the process...' % page.title(asLink=True))
  188. pywikibot.stopme()
  189. except pywikibot.EditConflict:
  190. pywikibot.output(u'INFO: Edit conflict on %s. Trying again...' % page.title())
  191. checked = checkedOld
  192. except pywikibot.SpamfilterError, error:
  193. pywikibot.output(u'ERROR: Cannot change %s because of spam blacklist entry %s' % (page.title(), error.url))
  194. pywikibot.stopme()
  195. else:
  196. return True
  197. return False
  198.  
  199. def main():
  200. dry = False
  201. bot = BasicBot(gen, dry)
  202. bot.run()
  203.  
  204. if __name__ == "__main__":
  205. try:
  206. main()
  207. finally:
  208. pywikibot.stopme()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement