Vés al contingut

Usuari:Ssola/DisambigLinksList.java

De la Viquipèdia, l'enciclopèdia lliure

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);
    	}
    }
}