ویکی‌پدیا:درخواست‌های ربات/ربات استخراج فهرست مقالات ناموجود در ویکی‌فا در یک رده خاص ویکی‌انگلیسی

از ویکی‌پدیا، دانشنامهٔ آزاد

این کد نام یک رده ویکی‌انگلیسی را از شما می‌گیرد و فهرست مقالاتی که در ویکی فا موجود نیستند را در زیر صفحهٔ کاربریتان (User:YourUserName) قرار می‌دهد که باید عبارت User:YourUserName را در کد با نام کاربری خودتان تغییر دهید.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import catlib ,pagegenerators
import wikipedia,urllib,gzip,codecs,re
import MySQLdb as mysqldb
import config
line_items,rowi,rowr,text,count=' ',' ',' ',' ',0
language='en'
wikipedia.config.put_throttle = 0
wikipedia.put_throttle.setDelay()
PageTitle =raw_input('Paste Category Name> ').decode('utf-8')
'''
language=raw_input('which wiki? (en is defult)> ').decode('utf-8')
if language=='' :
'''
language='en'

wiki = wikipedia.getSite(language)

PageTitle=PageTitle.replace(u'[[',u'').replace(u']]',u'').replace(u' ',u'_').replace(u'Category:',u'').replace(u'category:',u'').strip()

def Persian_Num(text):
    en_num=u'0123456789'
    fa_num=u'۰۱۲۳۴۵۶۷۸۹'
    a=0
    for i in en_num:
        text=text.replace(en_num[a],fa_num[a])
        a+=1
    return text

def categorydown(listacategory):
    listacategory=[listacategory]
    count=1
    for catname in listacategory:
        count+=1
        if count==200:
            break
        gencat = pagegenerators.SubCategoriesPageGenerator(catname, recurse=False)
        for subcat in gencat:
            try:
               wikipedia.output(str(subcat))
            except:    
                wikipedia.output(subcat)
            if subcat in listacategory:
                continue
            else:
                listacategory.append(subcat)
        break
    return listacategory
encat = catlib.Category( wiki,PageTitle )
cat_list=categorydown(encat)
fa_text=u'در زیر مجموعه‌ای از مقالاتی که در ویکی‌پدیای انگلیسی در ردهٔ [[:en:Category:'+PageTitle+u']] موجود است ولی در ویکی‌پدیای فارسی موجود نیستند بر پایه تعداد میان‌ویکی و حجم مقاله فهرست شده‌اند. لطفا در ساخت این مقالات همکاری کنید.'
fa_text+=u'\n'
page_list=[]
for cat in cat_list:
    cat=cat.title().replace(u'[[',u'').replace(u']]',u'').replace(u' ',u'_').replace(u'Category:',u'').strip()
    if '_stubs' in cat:
        continue
    conn = mysqldb.connect(language+"wiki.labsdb", db = wiki.dbName(),
                           user = config.db_username,
                           passwd = config.db_password)
    cursor = conn.cursor()
    cursor.execute('SELECT CONCAT(":",page_title,"]]||", count(*),"||",page_len ) FROM langlinks JOIN categorylinks ON ll_from = cl_from AND cl_to="'+cat+'"JOIN page on ll_from = page_id   WHERE page_namespace = 0 AND page_is_redirect = 0 AND NOT EXISTS (SELECT * FROM langlinks as t WHERE t.ll_lang="fa" and t.ll_from = langlinks.ll_from) GROUP BY ll_from   ORDER BY count(*) DESC,page_title;')
    results = cursor.fetchall()
    count=0
    rowr='\n'
    for row in results:
            count+=1
            rowi=unicode(str(row[0]),'UTF-8')
            
            if not rowi in page_list:
                page_list.append(rowi)
                rowr+=u'|'+str(count)+u'||[[:'+language+rowi+u'\n|-\n'
    pagetop=u"\n==[[:en:Category:"+cat+"]]==\n"
    pagetop+=u'\n{| class="wikitable sortable"\n!رديف!!مقاله!!تعداد میان‌ویکی‌ها!!حجم صفحه\n|-\n'
    pagedown=u'\n|}\n'
    #rowr=Persian_Num(rowr)
    fa_text+=pagetop+rowr.strip()+pagedown

adress=u"User:Yamaha5/"+PageTitle
message=u"ربات:استخراج مقالات ناموجود از رده"
wiki = wikipedia.getSite('fa')
page = wikipedia.Page(wiki,adress)
page.put(fa_text,message)