Comme d'autres l'ont noté, les articles de Wikipedia n'ont pas vraiment une telle chose comme une « image principale » , donc votre premier problème sera de décider comment choisir entre les différentes images utilisées sur une page donnée. Certains critères de sélection possibles peuvent être:
- La plus grande image de l'article.
- La première image dépasse certaines dimensions minimales spécifiques, par ex. 60 × 60 pixels.
- Première image référencée directement dans le texte source de l'article plutôt que dans un modèle.
Pour les deux premières options, vous aurez envie de chercher le code HTML rendu de la page via action=parse
et utiliser un analyseur HTML pour trouver les img
balises dans le code, comme ceci:
http://en.wikipedia.org/w/api.php?action=parse&page=English_language&prop=text|images
(la raison pour laquelle vous ne pouvez pas obtenir les tailles des images, tel qu'il est utilisé sur la page, directement à partir de l'API est que ces informations ne sont pas réellement stockées partout dans la base de données MediaWiki.)
Pour la dernière option, ce que vous voulez est le wikitext source de l'article, disponible via prop=revisions
avec rvprop=content
:
http://en.wikipedia.org/w/api.php?action=query&titles=English_language&prop=revisions|images&rvprop=content
Notez que de nombreuses images dans infoboxes et tels sont spécifiés comme paramètres à un modèle, donc l'analyse juste pour la syntaxe [[Image:...]]
manquera certains d'entre eux. Une meilleure solution est probablement d'obtenir la liste de toutes les images utilisées sur la page via prop=images
(que vous pouvez faire dans la même requête, comme je l'ai montré ci-dessus) et chercher leurs noms (avec ou sans préfixe Image:
/File:
) dans le wikitext. Gardez à l'esprit les différentes façons dont MediaWiki normalise automatiquement les noms de page (et d'image): notamment, les traits de soulignement sont mappés sur des espaces, les espaces consécutifs sont réduits à un seul espace et la première lettre du nom est en majuscule.Si vous décidez d'aller dans cette voie, voici quelques exemples de code PHP qui convertit une liste de noms de fichiers dans une expression rationnelle qui doit correspondre à l'un d'eux dans wikitext:
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';
Par exemple, lorsque donné la liste:
Anglospeak(800px)Countries.png
Anglospeak.svg
Circle frame.svg
Commons-logo.svg
Flag of Argentina.svg
Flag of Aruba.svg
l'expression rationnelle générée sera:
/(?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
quelles images vous attendez-vous à obtenir? Ne sont-ce pas les images qui sont apparues dans la page wiki sur la langue anglaise? Les données Wiki ne sont pas structurées de manière à identifier une image sur la "langue anglaise" mais vous pouvez consulter des projets comme http://dbpedia.org/ qui pourraient vous aider. – Noam