Usuario:JoaquinFerrero/MedalleroRio2016

De Wikipedia, la enciclopedia libre
#!/usr/bin/env perl
# *- encode: utf8. tabs: 8 spaces. -*
#
# medalleroRio2016.pl
#
# Autor:
#       Joaquín Ferrero
#
# Descripción:
#       Actualización automática de medalleros en Wikipedia.
#
# Entrada: ninguna
# Salida:  ninguna
#
# Historial:
#   2016.08.06 : Versión Río de Janeiro Olímpicos 2016
#   2016.03.18 : Versión Portland Atletismo en Pista Cubierta 2016
#   2015.08.21 : Versión Pekín Atletismo 2015
#   2015.06.13 : Versión Baku Europeos 2015
#   2014.03.07 : Versión Sochi Paralímpicos Invierno 2014
#   2014.02.08 : Versión Sochi Invierno 2014
#   2013.08.10 : Versión Moscú Atletismo 2013
#   2013.06.26 : Versión Mersin Mediterráneo 2013
#   2012.08.31 : Versión Londres Paralímpicos 2012
#   2012.07.31 : Versión Londres Verano 2012
#   2010.03.20 : Versión Medellin Sudamericanos 2010
#   2010.03.13 : Versión Vancouver Paralimpicos 2010
#   2010.02.16 : Versión Vancouver Invierno 2010
#   2008.09.07 : Versión Pekín Verano 2008
#

### Bibliotecas -------------------------------------------------------------
use v5.14.2;
use utf8::all;			# Activar todo el soporte para UTF-8. Realmente todo
use MediaWiki::API;		# Y mucha Wikipedia
use Mojo::UserAgent;		# Un poco de mojo...

use Data::Dumper;

### Configuración -----------------------------------------------------------
my $DEBUG			=  0;					# 0, 1 o 2
my $PAÍS_ANFITRIÓN		= 'BRA';
my $URL_MEDALLERO		= 'https://www.rio2016.com/en/medal-count-country';
my $WIKIPEDIA_PÁGINA_MEDALLERO	= 'Anexo:Medallero de los Juegos Olímpicos de Río de Janeiro 2016';
my $WIKIPEDIA_PÁGINA_TEST	= 'Wikipedia:Zona de pruebas/5';
my $WIKIPEDIA_USUARIO_LOGIN	= 'user';
my $WIKIPEDIA_USUARIO_PASSW	= 'password';
my $WIKIPEDIA_API_URL		= 'https://es.wikipedia.org/w/api.php';
#my $título_página_wiki		= $WIKIPEDIA_PÁGINA_TEST;
my $título_página_wiki		= $WIKIPEDIA_PÁGINA_MEDALLERO;
my $medallero_wiki_cabeza	= <<'EOF';
<!-- Plantilla creada para actualizar automáticamente el medallero de acuerdo a la página oficial del campeonato. No modificar. -->
<!-- 
                    _  _____ _____ _   _  ____ ___  __  _   _ 
                   / \|_   _| ____| \ | |/ ___|_ _|/_/ | \ | |
                  / _ \ | | |  _| |  \| | |    | |/ _ \|  \| |
                 / ___ \| | | |___| |\  | |___ | | |_| | |\  |
                /_/   \_\_| |_____|_| \_|\____|___\___/|_| \_|

                Este medallero se actualiza de forma automática
             cada 5 minutos durante el periodo de la competición.

            Cualquier cambio realizado de forma manual se perderá.

               Avisar de incidencias al usuario JoaquinFerrero.
--></noinclude>
EOF
my $AVISO_CORTE			= qq(<includeonly><!-- Para cerrar la tabla en el artículo principal -->|}</includeonly><noinclude>\n);
### Fin de configuración ----------------------------------------------------

## Obtención de los resultados ----------------------------------------------
my $ua = Mojo::UserAgent->new(
    name		=> 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Mojolicious/2015 Wikipedia/es',
    request_timeout	=> 20,
);

my $medallero_html;

for my $retry (1 .. 3) {					# Tres intentos
    $medallero_html = $ua->get(
        $URL_MEDALLERO,
        {
        }
    )->res->dom->at('div#ms-countries-medal-count');		# Mojo::DOM::CSS Selector

    last if defined $medallero_html;

    say "Intento fallido $retry..."			if $DEBUG;
    sleep 30;
}

die "ERROR: No he podido leer la página del medallero oficial\n"
    if not defined $medallero_html;

say $medallero_html if $DEBUG == 2;;

## Extracción de resultados -------------------------------------------------
my @tabla_medallero_oficial;						# aquí guardamos el resultado de la extracción

my $posición          = 1;						# Renumeración de las posiciones
my $posición_absoluta = 1;						# Posición real dentro del global de posiciones

for my $fila ($medallero_html->find("tr.table-medal-countries__link-table")->each) {
    my $resultados;							# resultados para un participante

    # Código COI del país
    $resultados->{'COI'} = $fila->{'data-odfcode'};			# extraemos el código COI del país

    # Celdas con resultados
    my @celdas = map { $_->all_text } $fila->find("td")->each;		# extraemos las celdas
    next if @celdas != 7;
    
    my @medallas = map { 0 + $_ } @celdas[3..6];			# valores de las medallas (oro, plata, bronce, totales)

    $resultados->{'medallas'} = \@medallas;				# guardar

    # ajustar posición según logros alcanzados
    if (	@tabla_medallero_oficial > 0				# solo a partir de la segunda fila
	and (
                $tabla_medallero_oficial[-1]{'medallas'}[0] > $medallas[0]	# Oro
            or	$tabla_medallero_oficial[-1]{'medallas'}[1] > $medallas[1]	# Plata
            or	$tabla_medallero_oficial[-1]{'medallas'}[2] > $medallas[2]	# Bronce
        )
    ) {
        $posición = $posición_absoluta;					# sí: su posición es una más que el anterior
    }

    $resultados->{'posición'} = $posición;				# guardamos nueva posición
    push @tabla_medallero_oficial, $resultados;				# nueva fila en el medallero

    $posición_absoluta++;
}

die "ERROR: No he leído la tabla del medallero oficial"
    if ! @tabla_medallero_oficial;

say Dumper \@tabla_medallero_oficial if $DEBUG == 2;

## Obtención de la lista de los países participantes ------------------------
my %paises;
while (my $l = <DATA>) {
    my($marca) = $l =~ /(\{ .+ \})/x;
    my($id)    = $l =~ /\b ([A-Z]{3}) \b/x;
    $id = 'IOP' if not $id;
    $paises{$id} = $marca;
}

## Confección del Medallero en formato wiki ---------------------------------
my $medallero_wiki;							# Medallero en formato Wiki
my @totales_medallero;          					# Almacena la suma de las medallas

# Cabecera de la tabla
$medallero_wiki  = $medallero_wiki_cabeza;
$medallero_wiki .= "{{Leyenda|#CCCCFF|País organizador|border=solid 1px #AAA}}\n";
$medallero_wiki .= "{| {{Medallero |tipo=1 |ancho=60%}}\n";

# Filas de la tabla
my $DCOL = ' || ';
my $n_fila = 0;
my $aviso_corte_puesto = 0;

for my $fila (@tabla_medallero_oficial) {
    my @medallas = @{$fila->{'medallas'}};						# Número de medallas

    last if $medallas[-1] == 0;								# Paramos si no tiene medallas

    map { $totales_medallero[$_] += $medallas[$_] } 0 .. 3;				# Cálculo de los totales

    if ($fila->{'posición'} > 10  and  ! $aviso_corte_puesto++) {			# Poner nota de corte a los diez primeros clasificados
        $medallero_wiki .= $AVISO_CORTE;
    }
    
    $medallero_wiki .= '|-';									# Nueva fila
    $medallero_wiki .= ' bgcolor=ccccff' if $fila->{'COI'} eq $PAÍS_ANFITRIÓN;			# destaque
    $medallero_wiki .= "\n";
 
    my $texto_país;
    if ($fila->{'COI'} eq 'IOA') {
        $texto_país = '{{Bandera|Juegos Olímpicos}} [[Atletas Olímpicos Independientes en los Juegos Olímpicos de Río de Janeiro 2016|Atletas Olímpicos Independientes]] <small>(IOA)</small>';
    }
    else {
        $texto_país = $paises{$fila->{'COI'}};
    }
 
    $medallero_wiki .= '| '
		    . join $DCOL =>
			    "'''$fila->{'posición'}'''",						# posición
			    $texto_país,
#			    {{BanderaOL|Estados Unidos|USA}}
#			    "{{$fila->{'COI'}}}",							# país
#			    "{{BanderaCOI|$fila->{'COI'}|verano 2016}}",
			    @medallas									# medallas
		    ;
    $medallero_wiki .= "\n";

    $n_fila++;
}

# Totales y fin de la tabla
$medallero_wiki .= "|- align=right\n";
$medallero_wiki .= "| '''Total''' || align=left | '''$n_fila países''' ||" . join($DCOL, map { " '''$_''' " } @totales_medallero) . "\n";
$medallero_wiki .= "|}";

if (not $aviso_corte_puesto) {
    $medallero_wiki .= '<noinclude>';
}

$medallero_wiki .= "\n\n";

say $medallero_wiki if $DEBUG == 2;

## Conexión con Wikipedia ---------------------------------------------------
my $Wikipedia = MediaWiki::API->new({
    api_url     => $WIKIPEDIA_API_URL,
    retries     => 3,
    retry_delay => 30,
});

$Wikipedia->login({
    lgname      => $WIKIPEDIA_USUARIO_LOGIN,
    lgpassword  => $WIKIPEDIA_USUARIO_PASSW,
})
or die $Wikipedia->{error}->{code} . ': ' . $Wikipedia->{error}->{details};

## Actualización de la página del medallero ---------------------------------
my $página_wiki;						# Contenido de la página wiki actual
my $página_antes_wiki;						# Contenido de la página wiki anterior

my $página_wiki_ref = $Wikipedia->get_page({
    title => $título_página_wiki,
});

die "ERROR: No conseguí la página del medallero\n"
    if $página_wiki_ref->{missing};

$página_wiki = $página_antes_wiki = $página_wiki_ref->{'*'};	# Cómo es la página en este momento 

say $página_wiki if $DEBUG == 2;

# Editamos la página
if ($página_wiki =~ s/^=+\s*Medallero\s*=+\K.+?(?=^=)/\n$medallero_wiki/sm) {
    say $página_wiki if $DEBUG == 2;

    if ($página_wiki  ne  $página_antes_wiki) {			# Si hay realmente un cambio, la editamos
	$Wikipedia->edit({
		    action        => 'edit',
		    text          => $página_wiki,
		    title         => $título_página_wiki,
		    basetimestamp => $página_wiki_ref->{timestamp},
		    summary       => 'Actualización automática del medallero',
	    })
	    or die $Wikipedia->{error}->{code} . ': ' . $Wikipedia->{error}->{details}
	    ;

	say 'Medallero actualizado'	if $DEBUG;
    }
    else {
	say 'No hay cambios'	if $DEBUG == 2;
    }
}
else {
    die 'ERROR: no encuentro la sección del medallero en la página';
}

__DATA__
* {{Bandera|Juegos Olímpicos}} [[Equipo Olímpico de Atletas Refugiados]]
* {{Bandera|Juegos Olímpicos}} [[Kuwait en los Juegos Olímpicos de Río de Janeiro 2016|Kuwait]]
* {{BanderaOL|Atletas Olímpicos Independientes|IOA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Afganistán|AFG|ed=Río de Janeiro 2016}}
* {{BanderaOL|Albania|ALB|ed=Río de Janeiro 2016}}
* {{BanderaOL|Alemania|GER|ed=Río de Janeiro 2016}}
* {{BanderaOL|Andorra|AND|ed=Río de Janeiro 2016}}
* {{BanderaOL|Angola|ANG|ed=Río de Janeiro 2016}}
* {{BanderaOL|Antigua y Barbuda|ANT|ed=Río de Janeiro 2016}}
* {{BanderaOL|Arabia Saudita|KSA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Argelia|ALG|ed=Río de Janeiro 2016}}
* {{BanderaOL|Argentina|ARG|ed=Río de Janeiro 2016}}
* {{BanderaOL|Armenia|ARM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Aruba|ARU|ed=Río de Janeiro 2016}}
* {{BanderaOL|Australia|AUS|ed=Río de Janeiro 2016}}
* {{BanderaOL|Austria|AUT|ed=Río de Janeiro 2016}}
* {{BanderaOL|Azerbaiyán|AZE|ed=Río de Janeiro 2016}}
* {{BanderaOL|Bahamas|BAH|ed=Río de Janeiro 2016}}
* {{BanderaOL|Bangladés|BAN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Barbados|BAR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Baréin|BRN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Bélgica|BEL|ed=Río de Janeiro 2016}}
* {{BanderaOL|Belice|BIZ|ed=Río de Janeiro 2016}}
* {{BanderaOL|Benín|BEN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Bermudas|BER|ed=Río de Janeiro 2016}}
* {{BanderaOL|Bielorrusia|BLR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Birmania|MYA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Bolivia|BOL|ed=Río de Janeiro 2016}}
* {{BanderaOL|Bosnia y Herzegovina|BIH|ed=Río de Janeiro 2016}}
* {{BanderaOL|Botsuana|BOT|ed=Río de Janeiro 2016}}
* {{BanderaOL|Brasil|BRA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Brunéi|BRU|ed=Río de Janeiro 2016}}
* {{BanderaOL|Bulgaria|BUL|ed=Río de Janeiro 2016}}
* {{BanderaOL|Burkina Faso|BUR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Burundi|BDI|ed=Río de Janeiro 2016}}
* {{BanderaOL|Bután|BHU|ed=Río de Janeiro 2016}}
* {{BanderaOL|Cabo Verde|CPV|ed=Río de Janeiro 2016}}
* {{BanderaOL|Camboya|CAM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Camerún|CMR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Canadá|CAN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Catar|QAT|ed=Río de Janeiro 2016}}
* {{BanderaOL|Chad|CHA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Chile|CHI|ed=Río de Janeiro 2016}}
* {{BanderaOL|China|CHN|ed=Río de Janeiro 2016}}
* {{BanderaOL|China Taipéi|TPE|ed=Río de Janeiro 2016}}
* {{BanderaOL|Chipre|CYP|ed=Río de Janeiro 2016}}
* {{BanderaOL|Colombia|COL|ed=Río de Janeiro 2016}}
* {{BanderaOL|Comoras|COM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Congo|CGO|ed=Río de Janeiro 2016}}
* {{BanderaOL|Corea del Norte|PRK|ed=Río de Janeiro 2016}}
* {{BanderaOL|Corea del Sur|KOR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Costa de Marfil|CIV|ed=Río de Janeiro 2016}}
* {{BanderaOL|Costa Rica|CRC|ed=Río de Janeiro 2016}}
* {{BanderaOL|Croacia|CRO|ed=Río de Janeiro 2016}}
* {{BanderaOL|Cuba|CUB|ed=Río de Janeiro 2016}}
* {{BanderaOL|Dinamarca|DEN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Dominica|DMA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Ecuador|ECU|ed=Río de Janeiro 2016}}
* {{BanderaOL|Egipto|EGY|ed=Río de Janeiro 2016}}
* {{BanderaOL|El Salvador|ESA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Emiratos Árabes Unidos|UAE|ed=Río de Janeiro 2016}}
* {{BanderaOL|Eritrea|ERI|ed=Río de Janeiro 2016}}
* {{BanderaOL|Eslovaquia|SVK|ed=Río de Janeiro 2016}}
* {{BanderaOL|Eslovenia|SLO|ed=Río de Janeiro 2016}}
* {{BanderaOL|España|ESP|ed=Río de Janeiro 2016}}
* {{BanderaOL|Estados Unidos|USA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Estonia|EST|ed=Río de Janeiro 2016}}
* {{BanderaOL|Etiopía|ETH|ed=Río de Janeiro 2016}}
* {{BanderaOL|Filipinas|PHI|ed=Río de Janeiro 2016}}
* {{BanderaOL|Finlandia|FIN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Fiyi|FIJ|ed=Río de Janeiro 2016}}
* {{BanderaOL|Francia|FRA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Gabón|GAB|ed=Río de Janeiro 2016}}
* {{BanderaOL|Gambia|GAM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Georgia|GEO|ed=Río de Janeiro 2016}}
* {{BanderaOL|Ghana|GHA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Granada|GRN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Grecia|GRE|ed=Río de Janeiro 2016}}
* {{BanderaOL|Guam|GUM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Guatemala|GUA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Guinea|GUI|ed=Río de Janeiro 2016}}
* {{BanderaOL|Guinea-Bisáu|GBS|ed=Río de Janeiro 2016}}
* {{BanderaOL|Guinea Ecuatorial|GEQ|ed=Río de Janeiro 2016}}
* {{BanderaOL|Guyana|GUY|ed=Río de Janeiro 2016}}
* {{BanderaOL|Haití|HAI|ed=Río de Janeiro 2016}}
* {{BanderaOL|Honduras|HON|ed=Río de Janeiro 2016}}
* {{BanderaOL|Hong Kong|HKG|ed=Río de Janeiro 2016}}
* {{BanderaOL|Hungría|HUN|ed=Río de Janeiro 2016}}
* {{BanderaOL|India|IND|ed=Río de Janeiro 2016}}
* {{BanderaOL|Indonesia|INA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Irak|IRQ|ed=Río de Janeiro 2016}}
* {{BanderaOL|Irán|IRI|ed=Río de Janeiro 2016}}
* {{BanderaOL|Irlanda|IRL|ed=Río de Janeiro 2016}}
* {{BanderaOL|Islandia|ISL|ed=Río de Janeiro 2016}}
* {{BanderaOL|Islas Caimán|CAY|ed=Río de Janeiro 2016}}
* {{BanderaOL|Islas Cook|COK|ed=Río de Janeiro 2016}}
* {{BanderaOL|Islas Marshall|MHL|ed=Río de Janeiro 2016}}
* {{BanderaOL|Islas Salomón|SOL|ed=Río de Janeiro 2016}}
* {{BanderaOL|Islas Vírgenes Británicas|IVB|ed=Río de Janeiro 2016}}
* {{BanderaOL|Islas Vírgenes Estadounidenses|ISV|ed=Río de Janeiro 2016|nombre=Islas Vírgenes EE.&nbsp;UU.}}
* {{BanderaOL|Israel|ISR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Italia|ITA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Jamaica|JAM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Japón|JPN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Jordania|JOR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Kazajistán|KAZ|ed=Río de Janeiro 2016}}
* {{BanderaOL|Kenia|KEN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Kirguistán|KGZ|ed=Río de Janeiro 2016}}
* {{BanderaOL|Kiribati|KIR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Kosovo|KOS|ed=Río de Janeiro 2016}}
* {{BanderaOL|Laos|LAO|ed=Río de Janeiro 2016}}
* {{BanderaOL|Lesoto|LES|ed=Río de Janeiro 2016}}
* {{BanderaOL|Letonia|LAT|ed=Río de Janeiro 2016}}
* {{BanderaOL|Líbano|LIB|ed=Río de Janeiro 2016}}
* {{BanderaOL|Liberia|LBR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Libia|LBA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Liechtenstein|LIE|ed=Río de Janeiro 2016}}
* {{BanderaOL|Lituania|LTU|ed=Río de Janeiro 2016}}
* {{BanderaOL|Luxemburgo|LUX|ed=Río de Janeiro 2016}}
* {{BanderaOL|Macedonia|MKD|ed=Río de Janeiro 2016}}
* {{BanderaOL|Madagascar|MAD|ed=Río de Janeiro 2016}}
* {{BanderaOL|Malasia|MAS|ed=Río de Janeiro 2016}}
* {{BanderaOL|Malaui|MAW|ed=Río de Janeiro 2016}}
* {{BanderaOL|Maldivas|MDV|ed=Río de Janeiro 2016}}
* {{BanderaOL|Malí|MLI|ed=Río de Janeiro 2016}}
* {{BanderaOL|Malta|MLT|ed=Río de Janeiro 2016}}
* {{BanderaOL|Marruecos|MAR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Mauricio|MRI|ed=Río de Janeiro 2016}}
* {{BanderaOL|Mauritania|MTN|ed=Río de Janeiro 2016}}
* {{BanderaOL|México|MEX|ed=Río de Janeiro 2016}}
* {{BanderaOL|Micronesia|FSM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Moldavia|MDA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Mónaco|MON|ed=Río de Janeiro 2016}}
* {{BanderaOL|Mongolia|MGL|ed=Río de Janeiro 2016}}
* {{BanderaOL|Montenegro|MNE|ed=Río de Janeiro 2016}}
* {{BanderaOL|Mozambique|MOZ|ed=Río de Janeiro 2016}}
* {{BanderaOL|Namibia|NAM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Nauru|NRU|ed=Río de Janeiro 2016}}
* {{BanderaOL|Nepal|NEP|ed=Río de Janeiro 2016}}
* {{BanderaOL|Nicaragua|NCA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Níger|NIG|ed=Río de Janeiro 2016}}
* {{BanderaOL|Nigeria|NGR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Noruega|NOR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Nueva Zelanda|NZL|ed=Río de Janeiro 2016}}
* {{BanderaOL|Omán|OMA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Países Bajos|NED|ed=Río de Janeiro 2016}}
* {{BanderaOL|Pakistán|PAK|ed=Río de Janeiro 2016}}
* {{BanderaOL|Palaos|PLW|ed=Río de Janeiro 2016}}
* {{BanderaOL|Palestina|PLE|ed=Río de Janeiro 2016}}
* {{BanderaOL|Panamá|PAN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Papúa Nueva Guinea|PNG|ed=Río de Janeiro 2016}}
* {{BanderaOL|Paraguay|PAR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Perú|PER|ed=Río de Janeiro 2016}}
* {{BanderaOL|Polonia|POL|ed=Río de Janeiro 2016}}
* {{BanderaOL|Portugal|POR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Puerto Rico|PUR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Reino Unido|GBR|ed=Río de Janeiro 2016}}
* {{BanderaOL|República Centroafricana|CAF|ed=Río de Janeiro 2016}}
* {{BanderaOL|República Checa|CZE|ed=Río de Janeiro 2016}}
* {{BanderaOL|República Democrática del Congo|COD|ed=Río de Janeiro 2016|nombre=República Dem. del Congo}}
* {{BanderaOL|República Dominicana|DOM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Ruanda|RWA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Rumanía|ROU|ed=Río de Janeiro 2016}}
* {{BanderaOL|Rusia|RUS|ed=Río de Janeiro 2016}}
* {{BanderaOL|Samoa|SAM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Samoa Americana|ASA|ed=Río de Janeiro 2016}}
* {{BanderaOL|San Cristóbal y Nieves|SKN|ed=Río de Janeiro 2016}}
* {{BanderaOL|San Marino|SMR|ed=Río de Janeiro 2016}}
* {{BanderaOL|San Vicente y las Granadinas|VIN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Santa Lucía|LCA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Santo Tomé y Príncipe|STP|ed=Río de Janeiro 2016}}
* {{BanderaOL|Senegal|SEN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Serbia|SRB|ed=Río de Janeiro 2016}}
* {{BanderaOL|Seychelles|SEY|ed=Río de Janeiro 2016}}
* {{BanderaOL|Sierra Leona|SLE|ed=Río de Janeiro 2016}}
* {{BanderaOL|Singapur|SIN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Siria|SYR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Somalia|SOM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Sri Lanka|SRI|ed=Río de Janeiro 2016}}
* {{BanderaOL|Suazilandia|SWZ|ed=Río de Janeiro 2016}}
* {{BanderaOL|Sudáfrica|RSA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Sudán|SUD|ed=Río de Janeiro 2016}}
* {{BanderaOL|Sudán del Sur|SSD|ed=Río de Janeiro 2016}}
* {{BanderaOL|Suecia|SWE|ed=Río de Janeiro 2016}}
* {{BanderaOL|Suiza|SUI|ed=Río de Janeiro 2016}}
* {{BanderaOL|Surinam|SUR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Tailandia|THA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Tanzania|TAN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Tayikistán|TJK|ed=Río de Janeiro 2016}}
* {{BanderaOL|Timor Oriental|TLS|ed=Río de Janeiro 2016}}
* {{BanderaOL|Togo|TOG|ed=Río de Janeiro 2016}}
* {{BanderaOL|Tonga|TGA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Trinidad y Tobago|TRI|ed=Río de Janeiro 2016}}
* {{BanderaOL|Túnez|TUN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Turkmenistán|TKM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Turquía|TUR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Tuvalu|TUV|ed=Río de Janeiro 2016}}
* {{BanderaOL|Ucrania|UKR|ed=Río de Janeiro 2016}}
* {{BanderaOL|Uganda|UGA|ed=Río de Janeiro 2016}}
* {{BanderaOL|Uruguay|URU|ed=Río de Janeiro 2016}}
* {{BanderaOL|Uzbekistán|UZB|ed=Río de Janeiro 2016}}
* {{BanderaOL|Vanuatu|VAN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Venezuela|VEN|ed=Río de Janeiro 2016}}
* {{BanderaOL|Vietnam|VIE|ed=Río de Janeiro 2016}}
* {{BanderaOL|Yemen|YEM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Yibuti|DJI|ed=Río de Janeiro 2016}}
* {{BanderaOL|Zambia|ZAM|ed=Río de Janeiro 2016}}
* {{BanderaOL|Zimbabue|ZIM|ed=Río de Janeiro 2016}}