Usuario:JoaquinFerrero/Medallero2012

De Wikipedia, la enciclopedia libre

Programa para la actualización automática del Medallero de los Juegos Olímpicos Londres 2012[editar]

#!/usr/bin/env perl
#
# medalleroLondres2012.pl
#
# Autor:
#       Joaquín Ferrero
#
# Descripción:
#       Actualización automática del medallero olímpico en Wikipedia para los Juegos Londres 2012.
#
# Entrada: ninguna
# Salida:  ninguna
#
# Historial:
#   2012.07.31 : Versión para Londres 2012
#   2010.03.20 : Versión para Sudamericanos Medellin 2010
#   2010.03.13 : Versión para Vancouver 2010 Paralimpiadas
#   2010.02.16 : Versión para Vancouver 2010
#   2008.09.07 : Versión inicial para Pekín 2008
#

use Modern::Perl 2012;          # Somos modernos
use autodie;                    # «Es mejor morir que regresar con deshonor» --proverbio Klingon
use utf8::all;                  # Activar todo el soporte para UTF-8. Realmente todo.

use POSIX 'strftime';
use Mojo::UserAgent;            # Un poco de mojo...
use MediaWiki::API;             # Conexión con MediaWiki
#use File::Slurp;

### Configuración ###########################################################
my $MEDALLERO_OFICIAL   = 'http://www.london2012.com/medals/medal-count/index.html';
my $WIKIPEDIA_MEDALLERO = 'Anexo:Medallero de los Juegos Olímpicos de Londres 2012';
my $WIKIPEDIA_TEST_PAGE = 'Wikipedia:Zona de pruebas/5';
#my $wikipedia_resultado = $WIKIPEDIA_TEST_PAGE;   # Para hacer pruebas
my $wikipedia_resultado = $WIKIPEDIA_MEDALLERO;    # En producción, cambiarla por $WIKIPEDIA_MEDALLERO
my $DEBUG               = 0;
### Fin de la configuración #################################################

### Constantes ##############################################################
my $HOMEDIR     = '/home/explorer/bin';
my $LAST_UPDATE = "$HOMEDIR/last_update";
my $AVISO       = qq(<includeonly><!-- Para cerrar la tabla en el artículo principal -->|}</includeonly><noinclude>\n);
my $FECHA       = strftime "%F %R (GMT%z)", localtime;
#############################################################################

### Variables ###############################################################
my %paises;                     # $paises{AFG} = "{{BanderaOL|Afganistán|AFG|ed=Londres 2012}}"
my @tabla_medallero_oficial;    # $tabla_medallero_oficial[$i] = [$posicion,$pais,@medallas,$total]
my @totales_medallero;          # Almacena la suma de las medallas
my $wiki_pagina;                # Contenido de la página en formato wiki
my $wiki_medallero;             # Tabla del medallero en formato wiki
#############################################################################

## Obtención de los resultados
my $intentos = 3;               # Lo intentaremos tres veces

RETRY:
my $ua = Mojo::UserAgent->new(
    name                => 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1',
    request_timeout     => 5,
);

my $div = $ua->get(
    $MEDALLERO_OFICIAL,
    {
        'Accept'                => 'text/html',
        'Referer'               => 'http://www.london2012.com/medals/',
        'Accept-Encoding'       => 'none',
        'DNT'                   => 1,
        'Accept-Language'       => 'es,es-es;q=0.8,en;q=0.5,en-us;q=0.3',
    }
)
->res                            # de la respuesta
->dom                            # generamos el DOM de la página
->find("div[id=lgc-main]")       # buscamos esa marca
->[0];                           # y la extraemos

if (! defined $div) {
    sleep 30;
    goto RETRY if $intentos--;  # ¿goto? ¡Aggg!
    die "ERROR: No he leído la página del medallero oficial\n";
}

## Tiempo de resultados
#my($last_update)= $div =~ m{Generated on: ([\d/]+ +[\d:]+)};
#my $previous_update = read_file($LAST_UPDATE);
#if ($last_update eq $previous_update) {
#    say "No es necesario actualizar";
#    exit;
#}
#say "Es necesario actualizar: $previous_update ne $last_update";
#write_file($LAST_UPDATE, $last_update);

## Extracción de resultados
my @filas = $div->find("tr")->each;    # todas las filas dentro $div

my %attr_to_pos = (
    position    => 0,
    country     => 1,
    gold        => 2,
    silver      => 3,
    bronze      => 4,
    total       => 5,
);

for my $fila (@filas) {                      # para todas las @filas
    next if $fila !~ /<td class="position/;

    my @celdas = $fila->find("td")->each;    # todas las @celdas de la $fila
    my @resultado;

    for my $celda (@celdas) {                       # para todas las @celdas
        my($clase)= $celda =~ /class="(\w+)/;       # clase de la celda y
        my $content = $celda->text;                 # su contenido

        if ($clase eq 'athleteInfo') {
            $clase = 'country';
            ($content) = $celda =~ m{([^/]+?)\.png};
        }

        if (exists $attr_to_pos{$clase}) {
            $resultado[$attr_to_pos{$clase}] = $content;
        }

    }

    push @tabla_medallero_oficial, [ @resultado ] if @resultado;
}

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

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

die "ERROR: no tengo una lista correcta de países\n"  if ! %paises;

## Conexión con Wikipedia
my $mw = MediaWiki::API->new({
    api_url     => 'http://es.wikipedia.org/w/api.php',
    retries     => 3,
    retry_delay => 30,
});

$mw->login({
    lgname      => 'JoaquinFerrero',
    lgpassword  => 'contraseña',
})
or die $mw->{error}->{code} . ': ' . $mw->{error}->{details};

## Medallero en formato wiki
$wiki_medallero  = <<"EOF";
== Medallero ==
<!--
        ATENCIÓN: La tabla se actualiza de forma automática cada 5 min. durante el periodo de los juegos.

                         CUALQUIER cambio realizado de forma manual se perderá.

                                AVISAR de incidencias a JoaquinFerrero.

--></noinclude>
{| {{Medallero|tipo = 1|ancho = 60%}}
EOF

my $se_ha_puesto_el_aviso = 0;

foreach my $fila (@tabla_medallero_oficial) {                   # Para todas las filas del medallero

    my @medallas = @{$fila}[2 .. 5];                            # Desde Oro a Total

    map { $totales_medallero[$_-2] += $fila->[$_] } 2 .. 5;     # Cálculo de los totales

    if ($fila->[0] > 10  and  ! $se_ha_puesto_el_aviso++) {     # Poner nota de corte a los diez primeros clasificados
        $wiki_medallero .= $AVISO;
    }

    $wiki_medallero                                             # Cada $fila del medallero
        .= "|-\n"
        .  "|'''$fila->[0]'''\n"
        .  "|" . join( ' || ', $paises{$fila->[1]}, @{$fila}[2 .. 5] )
        .  "\n"
        ;
}

# Totales y fin de la tabla
$wiki_medallero
    .= "|-\n" . join(' || ', '! colspan="2" | Total', @totales_medallero) . "\n|}"
    ;

if (not $se_ha_puesto_el_aviso) {
    $wiki_medallero .= '<noinclude>';
}

$wiki_medallero .= "\n\n";

## Actualización de la página del medallero
my $wiki_pagina_ref = $mw->get_page({ title => $wikipedia_resultado });
die "ERROR: No conseguí la página del medallero\n"  if $wiki_pagina_ref->{missing};

my $wiki_pagina_antes = $wiki_pagina = $wiki_pagina_ref->{'*'};     # Cómo es la página ahora

# Hacemos la actualización
if ($wiki_pagina =~ s/^=+ Medallero =+.+?(?=^=)/$wiki_medallero/sm) {

    if ($wiki_pagina ne $wiki_pagina_antes) {                       # Si hay realmente un cambio la editamos
         $mw->edit({
             action        => 'edit',
             title         => $wikipedia_resultado,
             basetimestamp => $wiki_pagina_ref->{timestamp},
             text          => $wiki_pagina,
             summary       => 'Actualización automática del medallero',
         })
         or die $mw->{error}->{code} . ': ' . $mw->{error}->{details}
         ;

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

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