Como otros han señalado, los artículos de Wikipedia en realidad no tienen ninguna tal cosa como una "imagen principal" , entonces su primer problema será decidir cómo elegir entre las diferentes imágenes utilizadas en una página determinada. Algunos criterios de selección posibles podrían ser:
- Imagen más grande en el artículo.
- Primera imagen que supera algunas dimensiones mínimas específicas, p. 60 × 60 píxeles.
- Primera imagen referenciada directamente en el texto fuente del artículo, en lugar de a través de una plantilla.
Para las dos primeras opciones, usted querrá a buscar el código HTML representado a través de la página action=parse
y utilizar un analizador de HTML para encontrar los img
etiquetas en el código, así:
http://en.wikipedia.org/w/api.php?action=parse&page=English_language&prop=text|images
(la razón por la que no se puede sólo obtener los tamaños de las imágenes, tal como se utiliza en la página, directamente desde la API es que esa información no se almacena en cualquier parte de la base de datos de MediaWiki.)
Para la última opción, lo que quiere es la wikitexto fuente del artículo, disponible a través de prop=revisions
con rvprop=content
:
http://en.wikipedia.org/w/api.php?action=query&titles=English_language&prop=revisions|images&rvprop=content
Tenga en cuenta que muchas imágenes en infoboxes y de que se especifiquen como parámetros a una plantilla, por lo que solo el análisis de la sintaxis [[Image:...]]
omitirá algunos de ellos. Una mejor solución es simplemente obtener la lista de todas las imágenes utilizadas en la página a través del prop=images
(que puede hacer en la misma consulta, como mostré arriba) y buscar sus nombres (con o sin Image:
/File:
prefijo) en el wikitext.
Tenga en cuenta las diversas formas en que MediaWiki normaliza automáticamente los nombres de página (e imagen): sobre todo, guiones bajos se asignan a los espacios, los espacios consecutivos se desplomó a un solo espacio y la primera letra del nombre se capitaliza.Si decide seguir este camino, aquí hay algo de código PHP de muestra que convertirá una lista de nombres de archivo en una expresión regular que debe coincidir con cualquiera de ellos en wikitexto:
foreach ($names as &$name) {
$name = trim(preg_replace('/[_\s]+/u', ' ', $name));
$name = preg_quote($name, '/');
$name = preg_replace('/^(\\\\?.)/us', '(?i:$1)', $name);
$name = preg_replace('/\\\\? /u', '[_\s]+', $name);
}
$regexp = '/' . implode('|', $names) . '/u';
Por ejemplo, cuando se les da la lista:
Anglospeak(800px)Countries.png
Anglospeak.svg
Circle frame.svg
Commons-logo.svg
Flag of Argentina.svg
Flag of Aruba.svg
la expresión regular generada será:
/(?i:A)nglospeak\(800px\)Countries\.png|(?i:A)nglospeak\.svg|(?i:C)ircle[_\s]+frame\.svg|(?i:C)ommons\-logo\.svg|(?i:F)lag[_\s]+of[_\s]+Argentina\.svg|(?i:F)lag[_\s]+of[_\s]+Aruba\.svg/u
lo que las imágenes es lo que espera obtener? ¿No son estas las imágenes que aparecieron en la página wiki sobre el idioma inglés? Los datos de Wiki no están estructurados para identificar una imagen del "idioma inglés", pero puedes consultar proyectos como http://dbpedia.org/, que pueden ser útiles. – Noam