Existe-t-il un moyen d'accéder à la vignette de n'importe quelle page wikipedia en utilisant une API ? Je veux dire l'image en haut à droite dans la boîte. Existe-t-il des API pour cela ?
Réponses
Trop de publicités?Ver cette question connexe sur une API pour Wikipédia . Cependant, je ne sais pas s'il est possible de récupérer la vignette par le biais d'une API.
Vous pouvez également envisager d'analyser la page Web pour trouver l'URL de l'image et la récupérer de cette façon.
Voici ma liste de XPaths qui, selon moi, fonctionnent pour 95 % des articles. Les principaux sont 1, 2, 3 et 4. Beaucoup d'articles ne sont pas formatés correctement et ce sont des cas limites :
Vous pouvez utiliser une librairie de parsing DOM pour récupérer l'image en utilisant le XPath.
static NSString *kWikipediaImageXPath2 = @"//*[@id=\"mw-content-text\"]/div[1]/div/table/tr[2]/td/a/img";
static NSString *kWikipediaImageXPath3 = @"//*[@id=\"mw-content-text\"]/div[1]/table/tr[1]/td/a/img";
static NSString *kWikipediaImageXPath1 = @"//*[@id=\"mw-content-text\"]/div[1]/table/tr[2]/td/a/img";
static NSString *kWikipediaImageXPath4 = @"//*[@id=\"mw-content-text\"]/div[2]/table/tr[2]/td/a/img";
static NSString *kWikipediaImageXPath5 = @"//*[@id=\"mw-content-text\"]/div[1]/table/tr[2]/td/p/a/img";
static NSString *kWikipediaImageXPath6 = @"//*[@id=\"mw-content-text\"]/div[1]/table/tr[2]/td/div/div/a/img";
static NSString *kWikipediaImageXPath7 = @"//*[@id=\"mw-content-text\"]/div[1]/table/tr[1]/td/div/div/a/img";
J'ai utilisé un wrapper ObjC appelé Hpple autour de libxml2.2 pour extraire l'url de l'image. J'espère que cela vous aidera
Vous pouvez également utiliser la gousse de cacao appelée SDWebImage
Exemple de code (n'oubliez pas d'ajouter également import SDWebImage
):
func requestInfo(flowerName: String) {
let parameters : [String:String] = [
"format" : "json",
"action" : "query",
"prop" : "extracts|pageimages",//pageimages allows fetch imagePath
"exintro" : "",
"explaintext" : "",
"titles" : flowerName,
"indexpageids" : "",
"redirects" : "1",
"pithumbsize" : "500"//specify image size in px
]
AF.request(wikipediaURL, method: .get, parameters: parameters).responseJSON { (response) in
switch response.result {
case .success(let value):
print("Got the wikipedia info.")
print(response)
let flowerJSON : JSON = JSON(response.value!)
let pageid = flowerJSON["query"]["pageids"][0].stringValue
let flowerDescription = flowerJSON["query"]["pages"][pageid]["extract"].stringValue
let flowerImageURL = flowerJSON["query"]["pages"][pageid]["thumbnail"]["source"].stringValue //fetching Image URL
self.wikiInfoLabel.text = flowerDescription
self.imageView.sd_setImage(with: URL(string : flowerImageURL))//imageView updated with Wiki Image
case .failure(let error):
print(error)
}
}
}
- Réponses précédentes
- Plus de réponses