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

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

این ربات برای افزودن تعدادی رده به فهرستی از مقالات کاربرد دارد و می‌توان از آن در مقالاتی که میان ویکی ندارند و ربات رده‌همسنگ نمی‌تواند میان‌ویکی بیفزاید استفاده کرد.

روش کار[ویرایش]

باید فهرستی از نام مقالاتی را که قصد دارید تعدادی رده خاص به آن افزوده شود، در فایل inputfile.txt به صورت زیر بسازید و در کنار فایل ربات قرار دهید:

[[مقاله۱]]
[[مقاله۲]]
[[مقاله۳]]

همچنین باید در کد ربات نام رده‌ها را در مقابل متغیر catlist بنویسید.

تذکر۱

عبارت مقاله۱، مقاله۲ و... نام مقاله مورد نظر شما هست.

تذکر۲

عبارت رده:آزمایش۱ و رده:آزمایش۲ نام رده مورد نظر شما هست که می توانید به همان روش تعداد آنها را بیشتر یا کمتر نمایید.

تذکر۲

این کد هیچ آرگومانی ندارد و بعد از تنظیمات بالا و دریافت پرچم، می‌توانید آن را اجرا نمایید.

<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 .

import wikipedia,codecs,string,re catlist=[u'رده:آزمایش',u'رده:آزمایش ۲',u'رده:آزمایش۳'] msg=u'ربات:افزودن %s به فهرستی از مقالات' def pageopen(link,wiki):

       link=link.replace( u'',u'' ).replace( u'',u ).strip()
       wikipedia.config.put_throttle = 0
       wikipedia.put_throttle.setDelay()
       site = wikipedia.getSite(wiki)
       try:
           page = wikipedia.Page( site,link )
           text=page.get()
           return text
       except wikipedia.IsRedirectPage:
           page = page.getRedirectTarget()
           try:
               text=page.get()
               return text
           except:
                   return False
       except:
           return False

def run(catlist):

   site = wikipedia.getSite('fa')
   text2 = codecs.open( u'inputfile.txt','r' ,'utf8' )
   text = text2.read()
   linken = re.findall(ur'\[\[.*?\]\]',text, re.S)
   for i in range(0,len(linken)):
       item=linken[i].replace( u'',u'' ).replace( u'',u ).strip()
       page = wikipedia.Page( site,item.strip())
       try:
           texta = page.get()    
       except wikipedia.NoPage:
           wikipedia.output(u"%s doesn't exist, skip!" % page.title())
           continue
       except wikipedia.IsRedirectPage:
           wikipedia.output(u"%s is a redirect!" % page.title())
           page = page.getRedirectTarget()
           try:
               texta = page.get()    
           except wikipedia.NoPage:
               continue
       except:
           continue
       text=pageopen(item,'fa')
       if text==False:
           continue
       cats=u'\n'
       for item in catlist:
           if text.find(item)==-1: 
               cats+=u''+item+'\n'
       if cats==u'\n':
           wikipedia.output(u'Page '+page.title()+u' had all of the categories.this page is skipped!')
           continue
       catlistb=cats
       if text.find(u'رده:')!=-1:
           num=text.find(ur'[[رده:')
           text=text[:num]+u'\n'+catlistb.strip()+u'\n'+text[num:]    
       else:
           m = re.search(ur'\[\[([a-z]{2,3}|[a-z]{2,3}\-[a-z\-]{2,}|simple):.*?\]\]', text)
           if m:
               if m.group(0)==u:    
                   try:
                       if string.count(text,u' --->')==1:    
                           catlistb=catlistb.replace(u'\n\n',u'\n').strip()
                           text=text.split(u' --->')[0]+u' --->\n'+catlistb+text.split(u' --->')[1]
                       else:
                           text+='\n'+catlistb.strip()   
                   except:
                       text+='\n'+catlistb.strip()
               else:
                   num=text.find(m.group(0))
                   text=text[:num]+u'\n'+catlistb.strip()+'\n'+text[num:]
           else:                
               text+='\n'+catlistb.strip()
       wikipedia.output(u'Adding: '+catlistb.strip().replace(u'\n',u'-')+u"\03{lightpurple} to page "+page.title().strip()+"\03{default}")
       page.put(text, msg %(catlistb.strip().replace(u'\n',u'-')))

def main(catlist):

   wikipedia.config.put_throttle = 0
   wikipedia.put_throttle.setDelay()
   run(catlist)

if __name__ == '__main__':

       main(catlist)
       wikipedia.stopme()