ویکیپدیا:درخواستهای ربات/استخراج نام مقالهها از رده مادر
ظاهر
این کاربر یک ربات است | |
---|---|
وظیفه(ها) | استخراج نام مقالهها و زیر ردهها از رده مادر |
موافق محرومیت؟ | خیر |
موافق خاموششدن اضطراری؟ | بله |
اجازهنامه | 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">
- !/usr/bin/python
- -*- coding: utf-8 -*-
- BY: رضا (User:reza1615 on fa.wikipedia)
- Distributed under the terms of the CC-BY-SA 3.0 .
- 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()