English Wikipedia @ Freddythechick:Database reports/WikiProject watchers/Configuration

From English Wikipedia @ Freddythechick

enwiki/project_watchers.py

<syntaxhighlight lang="python">

  1. !/usr/bin/python
  1. Copyright 2009-2010 bjweeks, MZMcBride, svick
  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 ConfigParser import datetime import MySQLdb import os import wikitools

config = ConfigParser.ConfigParser() config.read([os.path.expanduser('~/.dbreps.ini')])

report_title = config.get('dbreps', 'rootpage') + 'WikiProject watchers'

report_template = u List of WikiProjects by number of watchers of its main page, with at least 100 of them; \ data as of %s.

%s

wiki = wikitools.Wiki(config.get('dbreps', 'apiurl')) wiki.login(config.get('dbreps', 'username'), config.get('dbreps', 'password'))

conn = MySQLdb.connect(host=config.get('dbreps', 'host'), db=config.get('dbreps', 'dbname'), read_default_file='~/.my.cnf') cursor = conn.cursor() cursor.execute( /* project_watchers.py */ /* SLOW_OK */ SELECT

 wl_title AS project,
 COUNT(*) AS watchers,
 IFNULL(SUM(ts_wl_user_touched_cropped>NOW()-INTERVAL 30 DAY), 0) AS active

FROM watchlist JOIN page ON page_namespace = wl_namespace

 AND page_title = wl_title

WHERE wl_title LIKE 'WikiProject\_%' AND wl_title NOT LIKE '%/%' AND wl_namespace = 4 GROUP BY project HAVING watchers >= 100 ORDER BY watchers DESC )

i = 1 output = [] for row in cursor.fetchall():

   page_title = 'Wikipedia:%s' % unicode(row[0], 'utf-8').replace('_', ' ')
   watchers = row[1]
   active_watchers = row[2]
   table_row = u| %d

| %s | %d | %d |- % (i, page_title, watchers, active_watchers)

   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)) report_text = report_text.encode('utf-8') report.edit(report_text, summary=config.get('dbreps', 'editsumm'), bot=1)

cursor.close() conn.close()

</syntaxhighlight>

crontab

12 22  * * 0 qcronsub -N project_watchers      -l h_rt=00:10:00 -l virtual_free=30M -j y -l sql-s1-rr=1 -l arch='*' $HOME/reports/enwiki/project_watchers.py