#!/usr/bin/env python # -*- coding: utf-8 -*- import wikipedia import oursql import cgitb; cgitb.enable(logdir='tracebacks') connections = {} def getConn(wiki): if not wiki.endswith('_p'): wiki+='_p' if wiki not in connections: connections[wiki] = oursql.connect(db=wiki, host=wiki.replace('_', '-') + '.userdb.toolserver.org', read_default_file='/home/dispenser/.my.cnf', charset=None, use_unicode=False) return connections[wiki] def reconnect(wiki, host=""): if not wiki.endswith('_p'): wiki+='_p' del connection[host,wiki] return getConn(wiki, host) def main(): SysArgs = wikipedia.SysArgs limit = SysArgs.get('limit', '250') offset = SysArgs.get('offset', '0') page = wikipedia.Page( wikipedia.getSite(), SysArgs.get('category', SysArgs.get('page', 'Main_Page')), defaultNamespace=14 ) site = page.site() category = page.titleWithoutNamespace(underscore=True) categories = category.split('|') def createLink(title, label=None): return '%s'%tuple(wikipedia.escape(s) for s in (site.hostname(), wikipedia.urllib.quote(title.replace(' ', '_'), safe=";@$!*(),/:-_."), title.replace('_', ' '), label or title.replace('_', ' '), )) conn = getConn(site.dbName()) cursor = conn.cursor() try: cursor.execute("""/* LIMIT:20 */ SELECT cat_pages FROM category WHERE cat_title=? """, (category,)) ((cat_pages,),) = cursor.fetchall() # FIXME cat_pages might be < limit print "
The following %s articles are in %s, out of %d total. This list may not reflect recent changes (%s).
" % ( wikipedia.escape(limit), createLink("Category:%s"%category), cat_pages, createLink("Wikipedia:FAQ/Categories#Why_might_a_category_list_not_be_up_to_date?", "learn more") ) except Exception, e: wikipedia.output(repr(e)) try: cursor.execute("""/* categorder LIMIT:300 NM */ SELECT page_title AS "Article title", IFNULL(blc_count, "") AS "Incoming links", ROUND(page_len / 1024.0, 1) AS "KB" FROM categorylinks JOIN page ON page_id=cl_from LEFT JOIN u_dispenser_p.backlinkcount_enwiki_p ON blc_from=cl_from WHERE cl_to IN (%s) AND cl_type="page" AND page_namespace=0 ORDER BY blc_count DESC, cl_sortkey ASC LIMIT ?, ? """ % ','.join(('?',)*len(categories)), tuple(categories)+(offset, limit)) except oursql.Error as (errno, strerror, extra): if errno == 1317: print 'Query timed out.
' return else: (categories, offset, limit) raise else: print '| %s | '%tup[0] print '||
|---|---|---|
| %s | %s | %6s |
Database operational error, retrying a few minutes.
%s'%(wikipedia.escape(strerror),) print '' else: raise finally: wikipedia.endContent() wikipedia.stopme()