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

از ویکی‌پدیا، دانشنامهٔ آزاد
{{{نام ربات}}}
این کاربر یک ربات است
وظیفه(ها)استخراج نام مقاله‌ها و زیر رده‌ها از رده مادر
موافق محرومیت؟خیر
موافق خاموش‌شدن اضطراری؟بله
اجازه‌نامهCC-BY-SA 3.0
تست شده؟بله

این کد نام رده مادر را از شما می‌گیرد و در خروجی‌اش (کاربر:reza1615/bottest02) مقاله‌های آن و زیررده‌هایش را به شما می‌دهد.

کد۱[ویرایش]

#!/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')
level_down =raw_input('How many levels go down?> (1)').decode('utf-8')
more_than_3 =raw_input('Does it list only pages more than 3 interwiki?> (yes)').decode('utf-8')

'''
language=raw_input('which wiki? (en is defult)> ').decode('utf-8')
if language=='' :
'''
language='en'
wiki = wikipedia.getSite(language)
if not level_down:
    level_down=1
else:
    level_down=level_down.replace(u'[[',u'').replace(u']]',u'').replace(u' ',u'_').strip()

if not more_than_3:
    more_than_3=True
else:
    more_than_3=False
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,level_down):
    level_count=0
    listacategory=[listacategory]
    level_count+=1
    count=1
    if level_down<level_count:
        return listacategory
    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)
    return listacategory
encat = catlib.Category( wiki,PageTitle )
cat_list=categorydown(encat,level_down)
fa_text=u'در زیر مجموعه‌ای از مقالاتی که در ویکی‌پدیای انگلیسی در ردهٔ [[:en:Category:'+PageTitle+u']] موجود است ولی در ویکی‌پدیای فارسی موجود نیستند بر پایه تعداد میان‌ویکی و حجم مقاله فهرست شده‌اند. لطفا در ساخت این مقالات همکاری کنید.'
fa_text+=u'\n'
page_list=[]
wikipedia.output(u'--------------------------------------')
wikipedia.output(u'Getting query from wikipedia database')
for cat in cat_list:
    wikipedia.output(u'Query > Category:'+cat.title())
    try:
        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)
                    if more_than_3:
                       if int(rowi.split(u'||')[1].strip())<4:
                            continue
                    rowr+=u'|'+str(count)+u'||[[:'+language+rowi+u'\n|-\n'
        if not rowr.strip():
            continue
        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
    except:
        continue
adress=u"User:Yamaha5/"+PageTitle
message=u"ربات:استخراج مقالات ناموجود از رده"
wiki = wikipedia.getSite('fa')
page = wikipedia.Page(wiki,adress)
page.put(fa_text,message)

کد۲[ویرایش]

<syntaxhighlight lang="python">

  1. !/usr/bin/python
  2. -*- coding: utf-8 -*-
  3. BY: رضا (User:reza1615 on fa.wikipedia)
  4. Distributed under the terms of the CC-BY-SA 3.0 .
  5. This bot uses for finding subcategories and subpages from main category

__version__ = '$Id: $' import wikipedia,sys import pagegenerators import re, os, codecs, catlib wikipedia.config.put_throttle = 0 wikipedia.put_throttle.setDelay() faSite = wikipedia.getSite('fa') text=u' ' listacategory= [] def run(gen,text,Title):

   count=0
   for pagework in gen:
         count+=1
         link=str(pagework).split(u'|')[0].split(u']]')[0].replace(u'[[',u).strip()
         link=u''+link+u''
        #حالت دوم 
        #link=u''+link+u''
         text+='\n#'+link
   if count==0:
       text=text.replace(u'\n=='+Title+u'==\n',u)
   return text

def category(listacategory):

   count=1
   for catname in listacategory:
       #count+=1
       #if count==1000:
           #break
       gencat = pagegenerators.SubCategoriesPageGenerator(catname, recurse=False)
       for subcat in gencat:
           print subcat
           if subcat in listacategory:
               continue
           else:
               listacategory.append(subcat)
   return listacategory

def main():

   text=u' '
   cattext=' '
   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'
   if PageTitle.find(u'[[')!=-1:
       PageTitle.replace(u'[[',u).strip()
   if PageTitle.find(u']]')!=-1:
       PageTitle.replace(u']]',u).strip()
   PageTitles =[PageTitle]  
   for PageTitle in PageTitles:
       sitefa = wikipedia.getSite(language)   
       cat = catlib.Category( sitefa,PageTitle )
       listacategory=[cat]
       listacategory=category(listacategory)
       for Title in listacategory:
                  Title=str(Title).split(u'|')[0].split(u']]')[0].replace(u'[[',u).strip()
                  sitefa = wikipedia.getSite(language)   
                  cat = catlib.Category( sitefa,Title )
                  gent = pagegenerators.CategorizedPageGenerator( cat )
                  text+=u'\n=='+Title+u'==\n'
                  text=run(gent,text,Title)
   if text.strip()!=:
       text=u'\n==مقاله‌ها==\n'+text.strip()
       text=text.replace(language+u':',u':'+language+u':').replace(u'|:'+language+u':',u'|').replace(u'Talk:',u)
       #حالت دوم
       #text=text.replace(language+u':',u':'+language+u':').replace(u'Talk:',u)
       pagefa = wikipedia.Page(wikipedia.getSite('fa'),u'کاربر:Yamaha5/list' )
       pagefa.put(text.strip(), u'ربات: مقالات زیررده (کد)')

if __name__ == '__main__':

   try:
       main()
   finally:
       wikipedia.stopme()