User:Reza1615/BOT/new interwiki.py
< User:Reza1615 | BOT
Before running this code please do localization otherwise it will edit in Farsi :) in your wiki!
- Important Note: Because of changing the API URL you should do this edit in API.py file!
Versions
edit- Version 1: developing the bot
- Version 2.00:
- Making Item for multi-language links by one edit
- Adding Namespace Limitation
- Escaping Some API errors
- Solving some minor Bug
- This version is tested.
- Version 2.10:
- solving some minor bugs
- Version 3.00:
- Add possibly to merge single language items and empty the old item and save the list in zzinterwiki_import_merged_need_deleted.txt
- Version 3.50:
- improving the remove interwikis from local wiki (fix some minor bugs)
- remove none-exist interwikis which cause interwiki conflicts
- Version 4.00:
- After deploying new JS tool If we leave NoItewiki and NoItem pages it is much better to not make new Item for them and most of conflicts are caused by single lang items! so this version doesn't make them.
- Version 5.00:
- Add many possibilities such as {{Pages with no Item}} and solving some minor bugs and improving Bot performance
- Version 6.00:
- Solved many minor Bugs which stop bot!
- Version 7.00:
- Solved Bug with wiki voyage and other bug for creating none exist item (now it creates :) )!
- Version 8.00:
- Based on the User:Ladsgroup/Labels, solving the label lang name for some wiki
- Version 9.00:
- Useing merge API and solving some minor bugs
localization part
edit- Orgine_lang= your local wiki prefix
- Ignore_Templates=[u'template:speedy delete',u'template:merge'] List of templates (tags) which bot don't add that pages like:
{{Speedy delete}}
{{Merge}}
you can check your wiki's with their interwiki to Farsi. - Confilict_Template=
u'\n{{Interwiki conflict}}'
Conflict template which are listed in Q6099744 - Skip_New=the number of new pages (articles) which should abort to let patrol users to tag
{{Speedy delete}}
or{{Merge}}
to have less missed language links in wikidata - Local_Remove_IWs_Summary=
u'Bot: removing exist language links in [[wp:wikidata]]: '
- Interwwiki_name=u' Interwiki(s)'
- Orgine_Category_Name= should be the name prefix of Category: in your wiki like رده: for fa.wiki
- Orgine_Template_Name=should be the name prefix of Template: in your wiki like الگو: for fa.wiki
- Orgine_NUM=for languages which had other numbering system like Farsi (u'۰۱۲۳۴۵۶۷۸۹') . if your language uses Numbers like english leave it as u'0123456789'. this numbers used in local wiki's edit summary.
- Local_Remove_IWs_Summary=
u'Bot: removing exist language links in [[wp:wikidata]]: '
- Interwwiki_name=u' Interwiki(s)'
- Remove_IWs_confilict_Summary=u'Bot: Removing Interwiki conflict template'
- Confilict_Template_No_Item=
u'\n{{Pages with no Item}}'
- bot_edits=u'Bot: ' #Bot prefix for edit summary
for Toolserver accounts
editin line 47 set your Toolserver's user account (YourUsername)
password_wiki = open("/home/YourUsername/pywikipedia/passfile", 'r')
for enwiki
editOrgine_lang='en'
Ignore_templates=[u'template:speedy delete',u'template:merge']
Confilict_Template=u'\n{{Interwiki conflict}}'
Confilict_Template_No_Item=u'\n{{Pages with no Item}}'
bot_edits=u'Bot: '
Skip_new=200
Editing_Pause=3 # Sleeping time in Second for eding in wikidata
Orgine_Category_Name=u'Category:'
Orgine_Template_Name=u'Template:'
Orgine_NUM=u'0123456789'
Local_Remove_IWs_Summary=u'Bot: removing exist language links in [[wp:wikidata]]: '
Interwwiki_name=u' Interwiki(s)'
Remove_IWs_confilict_Summary=u'Bot: Removing Interwiki conflict template'
code
edit#!/usr/bin/python
from __future__ import unicode_literals
# -*- coding: utf-8 -*-
# Reza (User:reza1615)
# Distributed under the terms of the CC-BY-SA 3.0 .
# -*- coding: utf-8 -*-
import wikipedia,pagegenerators,config
import query,time,login,codecs,re,string
import wikidata
from pywikibot import textlib
version=u'9.01'
#-------------------------------localization--------------------
Orgine_lang='fa'
Ignore_Templates=[u'الگو:ویکیداده نه',u'الگو:رده بهتر',u'الگو:حذف سریع',u'الگو:حذف زماندار/پیغام',u'الگو:پیشنهاد حذف ۲',u'الگو:ادغام با',u'الگو:ادغام شد در',u'الگو:درخواست ادغام',u'الگو:رده پنهان',u'الگو:Hiddencat',u'الگو:انتقال رده',u'الگو:تغییر مسیر رده',u'الگو:DB',u'الگو:DELETE',u'الگو:Db',u'الگو:Db-Reason',u'الگو:Db-because',u'الگو:Db-reason',u'الگو:Delbecause',u'الگو:Delete because',u'الگو:Delete',u'الگو:Deletebecause',u'الگو:Speedy delete',u'الگو:Speedy',u'الگو:Speedydelete',u'الگو:حذف فوری',u'الگو:حس',u'الگو:کاندید حذف',u'الگو:بدون منبع مدتدار',u'الگو:بدون منبع ۲',u'الگو:بدون منبع۲',u'الگو:Prod',u'الگو:نامزد حذف',u'الگو:Proposed deletion',u'الگو:حذف زماندار']
Orgine_Category_Name=u'رده:'
Orgine_Template_Name=u'الگو:'
Orgine_NUM=u'۰۱۲۳۴۵۶۷۸۹'
Confilict_Template=u'\n{{تداخل میانویکی}}'
Confilict_Template_No_Item=u'\n{{صفحه بدون آیتم}}'
bot_edits=u'ربات: '
Skip_new=200
Editing_Pause=0 # Pause in second between edits
Local_Remove_IWs_Summary=u'ربات: حذف میانویکی موجود در [[وپ:ود|ویکیداده]]: '
Interwwiki_name=u' میانویکی'
Remove_IWs_confilict_Summary=u'ربات:حذف الگوی تداخل رفع شده'
rep_label= {"no":"nb",
"als":"gsw",
"fiu-vro":"vro",
"bat-smg":"sgs",
"be-x-old":"be-tarask",
"roa-rup":"rup",
"zh-classical":"lzh",
"zh-min-nan":"nan",
"zh-yue":"yue",
"crh":"crh-latn",
"simple":"en"}
#----------------------------------------------------------------
#-------------------Summary which uses in wikidata and they should be english ----
creat_summary="Bot: Import page from {0}wiki".format(Orgine_lang)
update_link_summary="Bot: Update site links from {0}wiki".format(Orgine_lang)
update_link_labels_summary="Bot: Update site links and labels from {0}wiki".format(Orgine_lang)
update_Labels_summary=u'Bot: Update of labels.'
#-------------------------------------------------------------------------------
Orgine_Site=wikipedia.getSite(Orgine_lang,fam='wikipedia')
repo = Orgine_Site.data_repository()
SafeWork=True
mysite=wikipedia.getSite('wikidata','wikidata')
def login_wiki(mode):
if mode==1:
dataSite=wikipedia.getSite('wikidata','wikidata')
if mode==2:
dataSite=wikipedia.getSite(Orgine_lang,'wikipedia')
try:
password_wiki = open("/home/YourUsername/pywikipedia/passfile", 'r')
except:
password_wiki = open(wikipedia.config.datafilepath(config.password_file), 'r')
password_wiki=password_wiki.read().replace('"','').strip()
passwords=password_wiki.split(',')[1].split(')')[0].strip()
usernames=password_wiki.split('(')[1].split(',')[0].strip()
botlog=login.LoginManager(password=passwords,username=usernames,site=dataSite)
botlog.login()
def remove_old_IW (page,item_page):
removed_iw,text,old_text=[],u'',u''
global item_is_updtaed
wikipedia.output(str(item_is_updtaed))
if not item_is_updtaed:
wikipedia.output("\03{lightred}++Because of some problem the item doesn't updated so we need the tereditional interwikis++\03{default}")
return False
My_Template=Confilict_Template
WD_Data = wikipedia.DataPage(item_page)
if not WD_Data.exists():
return True
WD_Dict=WD_Data.get()
WD_Dict= WD_Dict['links']
try:
text=page.get()
except wikipedia.IsRedirectPage:
page = page.getRedirectTarget()
try:
text=page.get()
except:
return True
except:
return True
text=text.replace(u'[[ ',u'[[').replace(u' ]]',u']]').replace(u'[[ ',u'[[').replace(u' ]]',u']]').replace(u"\u200E"+u']]',u']]').replace(u'[['+u"\u200E",u'[[')
text=text.replace(u'Template: ',u'Template:').replace(u'Category: ',u'Category:').replace(u'Wikipedia: ',u'Wikipedia:').replace(u'Portal: ',u'Portal:').replace(u'category: ',u'Category:')
our_en_interwiki=u''
if '[[en:' in text:
our_en_interwiki = u'[[en:'+text.split(u'[[en:')[1].split(u']]')[0].strip()+u']]'
text=text.replace(our_en_interwiki,our_en_interwiki.replace(u'_',u' '))
if u'{{noexternallanglinks}}' in text:
return True
if not text:
save_file(u'[['+page.title()+u']]','error')
return False
text=text.replace(u'\r',u'')
interwikis=textlib.getLanguageLinks(text)
if item_page!=page:
My_Template=Confilict_Template_No_Item
My_Template2=Confilict_Template
else:
My_Template=Confilict_Template
My_Template2=Confilict_Template_No_Item
old_text=text
if interwikis:
for iw in interwikis:
IW_site=interwikis[iw].site().language()
IW_link=interwikis[iw].title()
Lower_IW_link=IW_link[0].lower()+IW_link[1:]
Text_IW_link=u'[['+IW_site+u':'+IW_link+u']]'
Text_IW_link2=u'[['+IW_site+u': '+IW_link+u']]'
Text_IW_link3=u'[['+IW_site+u' :'+IW_link+u']]'
lower_Text_IW_link=u'[['+IW_site+u':'+Lower_IW_link+u']]'
IW_prf=IW_site.replace(u'-',u'_')+u'wiki'
ineterwiki_row_link=IW_link.replace(u'_',u' ').strip()
ineterwiki_row_link_target=redirect_find( ineterwiki_row_link,IW_site).replace(u'_',u' ').strip()
if (IW_prf in WD_Dict) or ((IW_prf in WD_Dict) and (('#' in IW_link) or (u'#' in ineterwiki_row_link_target) or ineterwiki_row_link!=ineterwiki_row_link_target)):
wikipedia.output('\03{lightred}- \03{default}'+Text_IW_link)
text=text.replace(Text_IW_link+u'\n',u'').replace(Text_IW_link,u'').replace(Text_IW_link.replace(u' ',u'_'),u'').replace(Text_IW_link.replace(u'[[',u'[['),u'').replace(Text_IW_link.replace(u']]',u']]'),u'')
text=text.replace(Text_IW_link2+u'\n',u'').replace(Text_IW_link2,u'').replace(Text_IW_link2.replace(u' ',u'_'),u'')
text=text.replace(Text_IW_link3+u'\n',u'').replace(Text_IW_link3,u'').replace(Text_IW_link3.replace(u' ',u'_'),u'')
text=text.replace(our_en_interwiki+u'\n',u'').replace(our_en_interwiki,u'').replace(our_en_interwiki.replace(u' ',u'_'),u'')
text=text.replace(Text_IW_link.replace('Category:',u'category:').replace(' ',u'_')+u'\n',u'')
text=text.replace(lower_Text_IW_link+u'\n',u'').replace(lower_Text_IW_link,u'')
removed_iw.append(IW_site)
else:
if (My_Template.strip() in text) or (My_Template2.strip() in text):
text=text.replace(My_Template.strip()+u'\n',u'').replace(My_Template,u'').replace(My_Template.strip(),u'').replace(My_Template2.strip()+u'\n',u'').replace(My_Template2,u'').replace(My_Template2.strip(),u'')
wikipedia.output('\03{lightred} -'+My_Template+' \03{default}')
text=text.replace(My_Template.strip()+u'\n'+My_Template2.strip(),My_Template.strip()).replace(My_Template2.strip()+u'\n'+My_Template.strip(),My_Template.strip())
page.put(text.strip(),Remove_IWs_confilict_Summary)
return True
interwikis=textlib.getLanguageLinks(text)
if old_text!=text:
if interwikis:
if not My_Template.strip() in text:
if page.namespace()!=10 :
text+=My_Template
else:
if text.find(u'</noinclude>')!=-1:
if string.conut(text,'</noinclude>')<2:
text=text.replace(u'</noinclude>',My_Template+u'\n</noinclude>')
else:
text+=u'<noinclude>'+My_Template+u'\n</noinclude>'
else:
text=u'<noinclude>'+My_Template+u'\n</noinclude>'
wikipedia.output('\03{lightblue} +'+My_Template+' \03{default}')
wikipedia.output(u'+++++++++++++++++++')
try:
text=text.replace(My_Template.strip()+u'\n'+My_Template2.strip(),My_Template.strip()).replace(My_Template2.strip()+u'\n'+My_Template.strip(),My_Template.strip())
page.put(text.strip(),bot_edits+' + '+My_Template)
return True
except wikipedia.LockedPage:
save_file(u'[['+page.title()+u']]','LockedPage')
wikipedia.output(u'Skipping (locked page)')
else:
old_text2=text
text=text.replace(My_Template.strip()+u'\n',u'').replace(My_Template,u'').replace(My_Template.strip(),u'').replace(My_Template2.strip()+u'\n',u'').replace(My_Template2,u'').replace(My_Template2.strip(),u'')
if old_text2!=text:
wikipedia.output('\03{lightred} -'+My_Template+' \03{default}')
text = re.sub('[\r\n]{3,}', "\n\n",text)
text=text.replace(u'<noinclude></noinclude>',u'').replace(u'<noinclude>\n</noinclude>',u'').replace(u'<noinclude>\n\n</noinclude>',u'')
text=text.replace(My_Template.strip()+u'\n'+My_Template2.strip(),My_Template.strip()).replace(My_Template2.strip()+u'\n'+My_Template.strip(),My_Template.strip())
page.put(text.strip(),Remove_IWs_confilict_Summary)
return True
text = re.sub('[\r\n]{3,}', "\n\n",text)
text=text.replace(u'<noinclude></noinclude>',u'').replace(u'<noinclude>\n</noinclude>',u'').replace(u'<noinclude>\n\n</noinclude>',u'')
if removed_iw:
if len(removed_iw)>10:
removed_iw_NUM=str(len(removed_iw))
for i in range(0,10):
removed_iw_NUM = removed_iw_NUM.replace(u'0123456789'[i], Orgine_NUM[i])
removed_links_summary=removed_iw_NUM+Interwwiki_name
else:
removed_links_summary=u', '.join(removed_iw)
if interwikis:
text=text.replace(My_Template.strip()+u'\n'+My_Template2.strip(),My_Template.strip()).replace(My_Template2.strip()+u'\n'+My_Template.strip(),My_Template.strip())
page.put(text.strip(),Local_Remove_IWs_Summary+removed_links_summary+u' + '+My_Template)
else:
try:
text=text.replace(My_Template.strip()+u'\n'+My_Template2.strip(),My_Template.strip()).replace(My_Template2.strip()+u'\n'+My_Template.strip(),My_Template.strip())
page.put(text.strip(),Local_Remove_IWs_Summary+removed_links_summary)
except wikipedia.LockedPage:
save_file(u'[['+page.title()+u']]','LockedPage')
wikipedia.output(u'Skipping(locked page)')
return True
else:
text=text.replace(My_Template.strip()+u'\n'+My_Template2.strip(),My_Template.strip()).replace(My_Template2.strip()+u'\n'+My_Template.strip(),My_Template.strip())
page.put(text.strip(),Remove_IWs_confilict_Summary)
return True
else:
if interwikis:
if not My_Template.strip() in text:
if page.namespace()!=10:
text+=My_Template
else:
if text.find(u'</noinclude>')!=-1:
text=text.replace(u'</noinclude>',My_Template+u'\n</noinclude>')
else:
return False
wikipedia.output('\03{lightblue} +'+My_Template+' \03{default}')
try:
text=text.replace(My_Template.strip()+u'\n'+My_Template2.strip(),My_Template.strip()).replace(My_Template2.strip()+u'\n'+My_Template.strip(),My_Template.strip())
page.put(text.strip(),bot_edits+' + '+My_Template)
return True
except wikipedia.LockedPage:
save_file(u'[['+page.title()+u']]','LockedPage')
wikipedia.output(u'Skipping (locked page)')
return False
def save_file(case,type):
if type=='merge':
file = 'zzinterwiki_import_merged_need_deleted.txt'
elif type=='error':
file = 'zzinterwiki_import_errors.txt'
elif type=='LockedPage':
file = 'zzinterwiki_Locked_Pages.txt'
else:
file = 'zzinterwiki_conflicts.txt'
try:
file_text = codecs.open(file,'r' ,'utf8' )
file_text = file_text.read().strip()
except:
file_text=u''
if not case in file_text:
with codecs.open(file ,mode = 'a',encoding = 'utf8' ) as f:
f.write(u'\n'+case)
def templatequery(pagelink):
temps=[]
pagelink=pagelink.split(u'#')[0].strip()
if pagelink==u'':
return False
pagelink=pagelink.replace(u' ',u'_')
params = {
'action': 'query',
'prop':'templates',
'titles': pagelink,
'redirects': 1,
'tllimit':500,
}
try:
categoryname = query.GetData(params,Orgine_Site)
for item in categoryname[u'query'][u'pages']:
templateha=categoryname[u'query'][u'pages'][item][u'templates']
break
for temp in templateha:
temps.append(temp[u'title'].replace(u'_',u' '))
return temps
except:
return False
def redirect_find( page_link,wiki):
page_link=page_link.replace(u' ',u'_')
site = wikipedia.getSite(wiki.replace(u'_',u'-'))
params = {
'action': 'query',
'redirects':"",
'titles': page_link
}
query_page = query.GetData(params,site)
try:
redirect_link=query_page[u'query'][u'redirects'][0]['to']
try:
hashpart=query_page[u'query'][u'redirects'][0]['tofragment']
return redirect_link+u'#'+hashpart
except:
return redirect_link
except:
if 'missing=""' in str(query_page):
return u''
else:
return page_link.replace(u'_',u' ')
def Check_Page_Exists(page_link, wiki):
page_link=page_link.replace(u' ',u'_')
site = wikipedia.getSite(wiki.replace(u'_',u'-'))
params = {
'action': 'query',
'prop':'info',
'titles': page_link
}
query_page = query.GetData(params,site)
try:
for i in query_page[u'query'][u'pages']:
redirect_link=query_page[u'query'][u'pages'][i]['pageid']
return True# page existed
except:
return False# page not existed
def get_interwikis(link,lang):
Orgine_Site=wikipedia.getSite(lang.replace(u'_',u'-'),fam='wikipedia')
if link.find('#')!=-1:
return False
if link==u'':
return False
link=link.replace(u' ',u'_')
appenddict={}
try:
params = {
'action': 'query',
'prop': 'langlinks',
'titles': link,
'redirects': 1,
'lllimit':500,
}
pagename = query.GetData(params,Orgine_Site)
for item in pagename[u'query'][u'pages']:
case=pagename[u'query'][u'pages'][item][u'langlinks']
for lang in case:
L_lang=lang['lang']
L_link=lang['*']
if not (L_lang in appenddict):
if L_lang=='nb':
L_lang='no'
appenddict[L_lang]=L_link
return appenddict
except:
return appenddict
def check_item(wiki,link):
try:
site=wikipedia.getSite(wiki.replace(u'_',u'-'),fam='wikipedia')
page=wikipedia.Page(site,link)
data=wikipedia.DataPage(page)
items=data.get()
#return False
except wikipedia.NoPage:
return True
except:
wikipedia.output("\03{lightred}Item has been created. Skipping...\03{default}")
return False
def set_lable(data,new_langs,item):
dic_item=data.get()
old=dic_item['links']
changes=False
for cases in new_langs:
if cases=='nbwiki':
cases='nowiki'
dic_item['links'][cases]=new_langs[cases]
if old!=dic_item['links']:
wikipedia.output('added '+cases+'......................')
for langs in dic_item['links']:
if ('voyage' in langs) or ('commons' in langs) or ('source' in langs) or ('book' in langs) or ('quote' in langs) or ('species' in langs) or ('versity' in langs) or ('tionary' in langs) or ('news' in langs):
wikipedia.output("--> \03{lightred}"+langs+"\03{default}\03{lightblue} is passed becuse it dosen't support!\03{default}")
continue
if langs=='nbwiki':
langs='nowiki'
try:
value=dic_item['links'][langs]['name'].strip()
except:
value=dic_item['links'][langs].strip()
lang=langs.replace('wiki','').replace('_','-')
try:
value=unicode(value,'UTF8')
except:
pass
value=value.replace(u"_",u" ")
if lang !='fa':
value = value.split(u'(')[0].strip()
if lang =='es' or lang=='pt' or lang=='pt-br':
value = value.replace(u"Anexo:",u"")
if lang == 'cs':
value = value.replace(u"Príloha:",u"")
if lang == 'de-ch':
value = value.replace(u"ß",u"ss")
if lang in rep_label:
lang=rep_label[lang]
try :
a=dic_item['label'][lang]
except:
item.labels[lang] = value
changes=True
wikipedia.output('\03{lightgreen}for '+value+' added as label of '+lang+'\03{default}')
if changes:
changes=True
else:
wikipedia.output("Doesn't need any update!")
changes=False
return item,changes
def Update_data(data_add,appenddict):
item = wikidata.api.getItemById(data_add.title())
summary=''
confilict={}
new_langs={}
for lang in appenddict:
if lang=='nb':
lang='no'
site_lang=lang
interlangLinks=appenddict[lang]
status=check_item(site_lang,interlangLinks)
if not status:
wikipedia.output(site_lang+' has confilict!')
confilict[site_lang]=interlangLinks
continue
summary=update_link_summary
item.sitelinks[lang+"wiki"] = interlangLinks
new_langs[lang+"wiki"] = interlangLinks
if confilict:
item_confilict=u'* [['+data_add.title()+u']] Confilict > '
for i in confilict:
item_confilict+=u'[[:'+i+u':'+confilict[i]+u'|'+i+u'wiki]]-'
save_file(item_confilict[:-1],'conflict')
if SafeWork:
wikipedia.output('\03{lightred}-->'+data_add.title()+' Passed! because of safe mode and conflict\03{default}')
return False
global item_is_updtaed
if summary:
item,changes=set_lable(data_add,new_langs,item)
if changes:
summary=update_link_labels_summary
try:
wikidata.api.save(item, summary)
wikipedia.output('\03{lightblue}Page '+data_add.title()+' : '+summary+'\03{default}')
return True
except Exception,e:
try:
wikipedia.output('\03{lightred}Page '+data_add.title()+' Passed! error was : '+str(e)+' \03{default}')
item_is_updtaed=False
except:
wikipedia.output('\03{lightred}Page '+data_add.title()+'Passed!\03{default}')
item_is_updtaed=False
return False
def find_diff(my_data,interwiki_links,namespace):
dictionary = my_data.get()
dictionary= dictionary['links']
appenddict={}
for lang in interwiki_links:
if lang=='nb':
lang='no'
L_lang=lang.replace(u'-',u'_')
L_link=interwiki_links[lang].replace(u'category:',u'Category:')
if not (L_lang in appenddict):
if not ((L_lang+'wiki') in dictionary):
appenddict[L_lang]=L_link
wikipedia.output('\03{lightblue}+ '+L_lang +u' > '+L_link+' \03{default}')
if appenddict:
done=Update_data(my_data,appenddict)
if done:
return True
else:
wikipedia.output(str(appenddict))
item = wikidata.api.getItemById(my_data.title())
new_langs={}
item,changes=set_lable(my_data,new_langs,item)
if changes:
summary=update_Labels_summary
wikidata.api.save(item, summary)
wikipedia.output('\03{lightblue}Page '+my_data.title()+' : '+summary+'\03{default}')
return True
return False
def merge_items(a,b):
#https://www.wikidata.org/w/api.php?action=wbmergeitems&fromid=Q42&toid=Q222
print a
print b
params = {
'action': 'wbmergeitems',
'fromid':a,
'toid': b,
}
mysite=wikipedia.getSite('wikidata','wikidata')
#if mysite:
try:
mege_items = query.GetData(params,mysite)
try:
error= mege_items[u'error']
return error
except:
return True
except:
return False
def check_one_lang(my_data,interwiki_links,Orgine_lang):
other_wikis=False
Orgine_title=my_data.title()
item = wikidata.api.getItemById(Orgine_title)
if len(item.sitelinks) == 1 and len(interwiki_links)>1:
for iw in interwiki_links:
if iw==Orgine_lang:
continue
other_wiki_link=redirect_find( interwiki_links[iw],iw)
if not other_wiki_link.strip():
continue
other_wiki_page = wikipedia.Page(iw, other_wiki_link)
other_wiki_data = wikipedia.DataPage(other_wiki_page)
if other_wiki_data.exists():
other_wikis=True
break
if other_wikis:
#----------------------------------------------Merge case---------------
wikipedia.output(u'\03{lightgreen}====Merging Items!====\03{default}')
merge_result=merge_items(Orgine_title,other_wiki_data.title())
if merge_result:
return True
else:
return False
return False
def run(preloadingGen,hasnew,CreatNew,Remove_IW):
if not CreatNew:
Our_Ignore_Templates=[]
else:
Our_Ignore_Templates=Ignore_Templates
if hasnew:
pagecount=0
else:
pagecount=Skip_new+1
for Orgin_page in preloadingGen:
global item_is_updtaed
item_is_updtaed=True
item_page=Orgin_page
pagecount+=1
other_wiki=False
Origin_namespace=Orgin_page.namespace()
if not Origin_namespace in [0,4,10,12,14,100,102]:
continue
Orgine_title=Orgin_page.title()
wikipedia.output(u'Page: -------- '+Orgine_title+u' --------' )
if not Orgin_page.exists():
wikipedia.output(u'Page '+Orgine_title+ u' not existed so it is passed!')
continue
# checking for ignore templates
if Orgine_title:
#try:
do_work=True
page_templates=templatequery(Orgine_title)
if page_templates:
for template in Our_Ignore_Templates:
if template in page_templates:
do_work=False
wikipedia.output(u'\03{lightred}Page '+Orgine_title+u' had {{'+template.replace(Orgine_Template_Name,u'')+'}} so Bot is passed!\03{default}')
break
if not do_work:
continue
#----
interwiki_links=get_interwikis(Orgine_title,Orgine_lang)# get site's interwikis
interwiki_links[Orgine_lang]=Orgine_title
#------------------
my_page = wikipedia.Page(Orgine_Site, Orgine_title)
my_data = wikipedia.DataPage(my_page)
if len(interwiki_links)==1:
Remove_NOIW=True
if my_data.exists():# creating new item
#------------------------------------------------case 0 (NoIW-Item)---------------
wikipedia.output(u'NoIW-Item= '+Orgine_title)
wikipedia.output(u"Doesn't need update!")
continue
else:
#------------------------------------------------case 1 (NoIW-NoItem)---------------
if CreatNew:
if Origin_namespace>0 and Orgine_title.find(u'/')!=-1:
wikipedia.output(u'It is a subpage!')
continue
if pagecount < Skip_new:
wikipedia.output('Page new rank is \03{lightred}'+str(pagecount)+'\03{default} so Bot is passed!')
continue
wikipedia.output(u'NoIW-\03{lightred}NoItem\03{default}= '+Orgine_title)
for i in range(0,2):
try:
my_data.createitem(creat_summary)
except:
if i<1:
login_wiki(1)
time.sleep(1)
if my_data.exists():
break
if my_data.exists():
wikipedia.output(u'Created item= '+creat_summary)
else:# switch to mode 2 (temparay item)
save_file(u'[['+Orgine_title+u']]','error')
wikipedia.output(u'\03{lightred}Item creation had error..!\03{default}')
wikipedia.output(u'Sleeping for '+str(Editing_Pause)+' Seconds ....')
time.sleep(Editing_Pause)
else:
wikipedia.output(u"Page dosen't have itema and interwiki.After new JS tool if we don't make this kind of item is much better!")
continue
else:
Remove_NOIW=True
if my_data.exists():# normal updating to existed item
#------------------------------------------------case 2 (IW-Item) ---------------
wikipedia.output(u'IW-Item= '+Orgine_title)
#if my_data.exists():
try:
done=find_diff(my_data,interwiki_links,Origin_namespace)
if done:
wikipedia.output(u'\03{lightgreen}Item updated!\03{default}')
else:
wikipedia.output(u'\03{lightyellow}Item did not updated...!\03{default}')
done=check_one_lang(my_data,interwiki_links,Orgine_lang)
if not done:
wikipedia.output(u'\03{lightyellow}Item did not merged ..!\03{default}')
#else:
except:
save_file(u'[['+Orgine_title+u']]','error')
wikipedia.output(u'\03{lightyellow}Item did not updated and bot passes..!\03{default}')
else:
for iw in interwiki_links:
other_wiki_link=redirect_find( interwiki_links[iw],iw)
#wikipedia.output(other_wiki_link)
if not other_wiki_link.strip():
continue
other_wiki_Site=wikipedia.getSite(iw.replace(u'_',u'-'),fam='wikipedia')
other_wiki_page = wikipedia.Page(other_wiki_Site, other_wiki_link)
try:
other_wiki_data = wikipedia.DataPage(other_wiki_page)
except:
continue
if other_wiki_data.exists():# creating new item
other_wiki=True
item_page=other_wiki_data
break
if other_wiki:
#----------------------------------------------case 3 (IW-OtherWikiItem)---------------
wikipedia.output(u'IW-\03{lightgreen}OtherWikiItem\03{default}= '+Orgine_title)
wikipedia.output(u'Updating item...')
wikipedia.output(iw+ u':'+other_wiki_link)
try:
done=find_diff(other_wiki_data,interwiki_links,Origin_namespace)
if done:
wikipedia.output(u'\03{lightgreen}Item updated!\03{default}')
else:
done=check_one_lang(other_wiki_data,interwiki_links,Orgine_lang)
if not done:
wikipedia.output(u'\03{lightyellow}Item did not merged ..!\03{default}')
except:
save_file(u'[['+Orgine_title+u']]','error')
wikipedia.output(u'\03{lightyellow}Item did not updated and bot passes..!\03{default}')
else:
#----------------------------------------------case 4 (IW-NoItem)---------------
wikipedia.output(u'IW-\03{lightred}NoItem\03{default}= '+Orgine_title)
sitelinks,labels = [],[]
for iw in interwiki_links:
inter_value=interwiki_links[iw].replace(u' ',u'_')
if iw !='fa':
inter_value = inter_value.split(u'(')[0].strip()
if iw =='es' or iw=='pt' or iw=='pt-br':
inter_value = inter_value.replace(u"Anexo:",u"")
if iw == 'cs':
inter_value = inter_value.replace(u"Príloha:",u"")
if iw == 'de-ch':
inter_value = inter_value.replace(u"ß",u"ss")
iw_l=iw
if iw in rep_label:
iw_l=rep_label[iw]
sitelinks.append({"site": iw+"wiki", "title": interwiki_links[iw]})
labels.append({"language": iw_l, "value": inter_value.replace(u'_',u' ')})
values = {"sitelinks": sitelinks,"labels": labels}
wikipedia.output(u"Creating item for %s" % (Orgin_page.title()))
my_page2 = wikipedia.Page(wikipedia.getSite(iw,fam='wikipedia'), inter_value)
my_data2 = wikipedia.DataPage(my_page2)
try:
my_data2.createitem(value = values, summary = creat_summary)
except:
wikipedia.output(u"\03{lightred}Bot couldn't make an item for "+iw+" : "+inter_value+u" so it is passed!\03{default}")
save_file(u'[['+Orgine_title+u']]','error')
wikipedia.output(u'Sleeping for '+str(Editing_Pause)+' Seconds ....')
time.sleep(Editing_Pause)
#----Removing Iterwikis from Local wiki (it needes to have a flag on local wiki!)
if Remove_IW and Remove_NOIW:
remove_result=remove_old_IW (Orgin_page,item_page)
if not remove_result:
wikipedia.output(u"\03{lightpurple}Bot couldn't remove interwikis from Local wiki!\03{default}")
#except:
# continue
def main():
wikipedia.config.put_throttle = 0
gen=None
wikipedia.put_throttle.setDelay()
hasnew,preloadingGen,CreatNew,Remove_IW=False,False,False,True
PageTitles,namespaces = [],''
genFactory = pagegenerators.GeneratorFactory()
for arg in wikipedia.handleArgs():
if arg.startswith('-newcat'):
arg=arg.replace(':','')
if len(arg) == 7:
genfa = pagegenerators.NewpagesPageGenerator(200, False, Orgine_Site,14)
else:
genfa = pagegenerators.NewpagesPageGenerator(int(arg[7:])+Skip_new, False, Orgine_Site,14)
preloadingGen = pagegenerators.PreloadingGenerator( genfa,60)
hasnew=True
break
elif arg.startswith('-newspace'):
arg=arg.replace(':','')
if len(arg) == 9:
genfa = pagegenerators.NewpagesPageGenerator(2000, False, Orgine_Site,10)
else:
genfa = pagegenerators.NewpagesPageGenerator(200+Skip_new, False, Orgine_Site,int(arg[9:]))
preloadingGen = pagegenerators.PreloadingGenerator( genfa,60)
hasnew=True
break
elif arg.startswith ('-new'):
arg=arg.replace(':','')
if len(arg) == 4:
genfa = pagegenerators.NewpagesPageGenerator(200, False, Orgine_Site,0)
else:
genfa = pagegenerators.NewpagesPageGenerator(int(arg[4:])+Skip_new, False, Orgine_Site,0)
preloadingGen = pagegenerators.PreloadingGenerator( genfa,60)
hasnew=True
break
elif arg.startswith ('-remove'):
Remove_IW=False
elif arg == '-autotitle':
autoTitle = True
elif arg.startswith('-page'):
if len( arg ) == 5:
PageTitles.append( wikipedia.input( u'Which page do you want to chage?' ) )
else:
PageTitles.append( arg[6:] )
break
elif arg.startswith('-namespace:'):
namespaces=int(arg[11:])
elif arg.startswith('-force'):
SafeWork = False
elif arg.startswith('-file'):
textfilename = arg[6:]
if not textfilename:
textfilename = pywikibot.input(
u'Please enter the local file name:')
gen = pagegenerators.TextfilePageGenerator(textfilename,site=Orgine_Site)
elif arg.startswith('-CreatNew'):
CreatNew = True
else:
generator = genFactory.handleArg( arg )
if generator:
gen = generator
if not gen:
wikipedia.stopme()
if PageTitles:
pages = [wikipedia.Page( Orgine_Site,PageTitle ) for PageTitle in PageTitles]
gen = iter( pages )
if namespaces:
gen = pagegenerators.NamespaceFilterPageGenerator( gen,namespaces )
if not preloadingGen:
preloadingGen = pagegenerators.PreloadingGenerator( gen,pageNumber = 60)
run(preloadingGen,hasnew,CreatNew,Remove_IW)
if __name__ == "__main__":
wikipedia.output(u'\03{lightpurple} *******************************\03{default}')
wikipedia.output(u'\03{lightpurple} * Code version is '+version+u' *\03{default}')
wikipedia.output(u'\03{lightpurple} *******************************\03{default}')
login_wiki(1)
login_wiki(2)
item_is_updtaed=True
main()