< Википедия: отчеты базы данных | Связанные орфографические ошибки
connectedmisspellings.py
#! / usr / bin / env python # Общественное достояние; MZMcBride; 2012 г.import os import datetime import MySQLdb import wikitools import settingsreport_title = настройки . rootpage + 'Связанные орфографические ошибки' report_template = u '' ' \ Связанные орфографические ошибки (только первые 1000 записей); \ data по состоянию на % s .{| class = "wikitable сортируемые простые ссылки" style = "width: 100 %% ; margin: auto;" | - style = "white-space: nowrap;" ! Нет ! Статья ! Входящие ссылки % s|} '' 'wiki = wikitools . Вики ( настройки . Apiurl ) вики . логин ( настройки . имя пользователя , настройки . пароль )Conn = MySQLdb . connect ( host = settings . host , db = settings . dbname , read_default_file = os . path . expanduser ( '~ / .my.cnf' )) cursor = conn . курсор () курсор . execute ( '' ' / * connectedmisspellings.py SLOW_OK * / SELECT page_title FROM page JOIN categorylinks ON page_id = cl_from WHERE page_namespace = 0 AND page_is_redirect = 1 AND cl_to =' Redirects_from_misspellings '; ' '' )misspelled_redirects = установить ()для строки в курсоре . fetchall (): mispelled_redirects . добавить ( строка [ 0 ])def count_incoming_links ( cursor , page_title ): курсор . execute ( '' ' / * connectedmisspellings.py SLOW_OK * / SELECT COUNT (*) FROM pagelinks JOIN page ON pl_from = page_id WHERE pl_namespace = 0 AND pl_title = % s И page_namespace = 0; '' ' , page_title ) result = cursor . fetchone (), если результат : count = int ( result [ 0 ]) else : count = 0 return counti = 1 output = [] для неправильного написания в списке ошибок написания : если i > 1000 : прервать входящие_ссылки = количество_входящих_ссылок ( курсор , неправильное_писание ), если входящие_ссылки : table_row = u "" " \ | - | % d| {{dbr link | 1 = % s }} | % d "" " % ( i , неправильно написано . decode ( 'utf-8' ), incoming_links ) output . append ( table_row ) i + = 1курсор . execute ( '' ' SELECT UNIX_TIMESTAMP () - UNIX_TIMESTAMP (rc_timestamp) FROM latestchanges ORDER BY rc_timestamp DESC LIMIT 1; ' '' ) rep_lag = cursor . fetchone () [ 0 ] time_diff = datetime . дата и время . utcnow () - дата и время . timedelta ( секунды = задержка_повторения ) current_of = time_diff . strftime ( '% H:% M, % d % B% Y (UTC)' )report = wikitools . Страница ( wiki , report_title ) report_text = report_template % ( current_of , ' \ n ' . Join ( вывод )) report_text = report_text . кодировать ( 'utf-8' ) отчет . изменить ( report_text , summary = settings . editsumm , bot = 1 )курсор . close () conn . закрыть ()
crontab
30 21 * * * jsub -l release = trusty -once -jy -mem 280m -N enwiki.linkedmisspellings -o ~ / var / log -quiet ~ / bin / dbreps -r enwiki.linkedmisspellings -s enwiki