Usuari:Ssola/DisambigLinksList.java
Aparença
Codi en java per a generar la llista de Viquipèdia:Enllaços incorrectes a pàgines de desambiguació. Utilitza la llibreria jwbf. És una versió molt simple que et guarda el resultat en un fitxer local resultat.txt. Va trigar un grapat d'hores a executar-se, així que per fer proves i mirar si funciona millor limitar el primer bucle a 50 iteracions (p. ex.).
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.AbstractMap;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import net.sourceforge.jwbf.mediawiki.actions.queries.BacklinkTitles;
import net.sourceforge.jwbf.mediawiki.actions.queries.CategoryMembersFull;
import net.sourceforge.jwbf.mediawiki.actions.util.RedirectFilter;
import net.sourceforge.jwbf.mediawiki.bots.MediaWikiBot;
import net.sourceforge.jwbf.mediawiki.contentRep.CategoryItem;
public class DisambigLinksList {
public static void main(String[] args) throws Exception {
// Crea un bot a cawiki
MediaWikiBot bot = new MediaWikiBot("http://ca.wikipedia.org/w/");
// Inicia la sessió
bot.login("SalviBot", "no_us_diré_la_contrasenya");
// Obté els membres de cada categoria
CategoryMembersFull disambigPages= new CategoryMembersFull(bot,"Pàgines de desambiguació",0);
CategoryMembersFull disambigPagesAcr= new CategoryMembersFull(bot,"Pàgines de desambiguació d'acrònims",0);
CategoryMembersFull disambigPagesBio= new CategoryMembersFull(bot,"Pàgines de desambiguació de biografies",0);
// Llista per guardar-hi les pàgines de desambiguació amb el nombre d'enllaços
List<Entry<String,Integer>> disambigLinksList = new java.util.ArrayList<>();
int totalLinks = 0;
// Bucle per a totes les pàgines de la categoria
Iterator<CategoryItem> iter1 = disambigPages.iterator();
Iterator<CategoryItem> iter2 = disambigPagesAcr.iterator();
Iterator<CategoryItem> iter3 = disambigPagesBio.iterator();
while (iter1.hasNext() || iter2.hasNext() || iter3.hasNext()) {
CategoryItem categoryItem = null;
if (iter1.hasNext()) categoryItem = iter1.next();
else if (iter2.hasNext()) categoryItem = iter2.next();
else if (iter3.hasNext()) categoryItem = iter3.next();
String title = categoryItem.getTitle(); // Títol de la pàgina
// Obté la llista de pàgines que hi enllacen
BacklinkTitles backlinks = new BacklinkTitles(bot,title, RedirectFilter.nonredirects,0);
int numberOfLinks = 0; // Comptador
// Bucle per a totes les pàgines que hi enllacen
Iterator<String> backlinksIterator = backlinks.iterator();
while (backlinksIterator.hasNext()) {
backlinksIterator.next();
++numberOfLinks; // Suma 1 al comptador
}
// Guarda el resultat
if (numberOfLinks > 4) {
disambigLinksList.add(new AbstractMap.SimpleEntry<>(title, numberOfLinks));
}
totalLinks += numberOfLinks;
}
// Ordena la llista per nombre d'enllaços
disambigLinksList.sort(new Comparator<Entry<String,Integer> >() {
@Override
public int compare(Map.Entry<String,Integer> o1, Map.Entry<String,Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
//Escriptura resultats
System.setOut(new PrintStream(new FileOutputStream("prova.txt")));
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
System.out.print("Actualització de {{subst:Data|");
System.out.print(dateFormat.format(date));
System.out.println("}}: " + totalLinks + " →Vegeu una [[#Eina per desambiguar]] ");
for (Entry<String, Integer> element : disambigLinksList) {
String title = element.getKey();
Integer links = element.getValue();
String result = "# [[" + title + "]]: " + links + " [[Special:Whatlinkshere/" + title + "|enllaços]]";
System.out.println(result);
}
}
}