English Wikipedia @ Freddythechick:Database reports/Page count by namespace/Configuration

From English Wikipedia @ Freddythechick

nscounts.py

<syntaxhighlight lang="python">

  1. !/usr/bin/env python2.5
  1. Copyright 2008 bjweeks, valhallasw, MZMcBride
  1. This program is free software: you can redistribute it and/or modify
  2. it under the terms of the GNU General Public License as published by
  3. the Free Software Foundation, either version 3 of the License, or
  4. (at your option) any later version.
  1. This program is distributed in the hope that it will be useful,
  2. but WITHOUT ANY WARRANTY; without even the implied warranty of
  3. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  4. GNU General Public License for more details.
  1. You should have received a copy of the GNU General Public License
  2. 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.

%s
No. 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>