English Wikipedia @ Freddythechick:Database reports/Page count by namespace/Configuration
nscounts.py
<syntaxhighlight lang="python">
- !/usr/bin/env python2.5
- Copyright 2008 bjweeks, valhallasw, MZMcBride
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
import datetime import MySQLdb import wikitools import settings
report_title = settings.rootpage + 'Page count by namespace'
report_template = u The number of pages in each [[Wikipedia:namespace|]]; data as of %s.
%sNo. | ID | Name | Non-redirects | Redirects | Total |
---|---|---|---|---|---|
Totals | %d | %d | %d |
wiki = wikitools.Wiki(settings.apiurl) wiki.login(settings.username, settings.password)
conn = MySQLdb.connect(host=settings.host, db=settings.dbname, read_default_file='~/.my.cnf') cursor = conn.cursor() cursor.execute( /* nscounts.py SLOW_OK */ SELECT
page_namespace, ns_name, MAX(notredir), MAX(redir)
FROM (
SELECT page.page_namespace, IF( page_is_redirect, COUNT(page.page_namespace), 0 ) AS redir, IF( page_is_redirect, 0, COUNT(page.page_namespace)) AS notredir FROM page GROUP BY page_is_redirect, page_namespace ORDER BY page_namespace, page_is_redirect
) AS pagetmp JOIN toolserver.namespace ON page_namespace = ns_id AND dbname = 'enwiki_p' GROUP BY page_namespace; )
i = 1 output = [] ns_count_tcol = 0 ns_count_r_tcol = 0 for row in cursor.fetchall():
page_namespace = row[0] ns_name = row[1] if ns_name: ns_name = u'%s' % unicode(ns_name, 'utf-8') else: ns_name = '(Article)' ns_count = row[2] if ns_count: ns_count = ns_count else: ns_count = '0' ns_count_r = row[3] if ns_count_r: ns_count_r = ns_count_r else: ns_count_r = '0' ns_count_trow = int(ns_count) + int(ns_count_r) ns_count_tcol += ns_count ns_count_r_tcol += ns_count_r ns_count_gtotal = ns_count_tcol + ns_count_r_tcol table_row = u| %d
| %s | %s | %s | %s | %s |- % (i, page_namespace, ns_name, ns_count, ns_count_r, ns_count_trow)
output.append(table_row) i += 1
cursor.execute('SELECT UNIX_TIMESTAMP() - UNIX_TIMESTAMP(rc_timestamp) FROM recentchanges ORDER BY rc_timestamp DESC LIMIT 1;') rep_lag = cursor.fetchone()[0] current_of = (datetime.datetime.utcnow() - datetime.timedelta(seconds=rep_lag)).strftime('%H:%M, %d %B %Y (UTC)')
report = wikitools.Page(wiki, report_title) report_text = report_template % (current_of, '\n'.join(output), ns_count_tcol, ns_count_r_tcol, ns_count_gtotal) report_text = report_text.encode('utf-8') report.edit(report_text, summary=settings.editsumm, bot=1)
cursor.close() conn.close() </syntaxhighlight>
crontab
<syntaxhighlight lang="text"> 15 0 * * * python ~/scripts/database-reports/nscounts.py > /dev/null </syntaxhighlight>