wiquipèdia portada gratis español buscador php api wikipedia-api

php - portada - Accediendo a la imagen principal de la página de wikipedia por API



wikipedia.com buscador (13)

Aquí está mi lista de XPaths que he encontrado que funciona para el 95 por ciento de los artículos. los principales son 1, 2 3 y 4. Muchos artículos no están formateados correctamente y estos serían casos extremos:

Puede utilizar una lib de análisis DOM para obtener imágenes usando 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";

Usé un contenedor ObjC llamado Hpple alrededor de libxml2.2 para extraer la url de la imagen. Espero que esto ayude

¿Hay alguna manera de que pueda acceder a la imagen en miniatura de cualquier página de wikipedia mediante el uso de una API? Me refiero a la imagen en el lado superior derecho de la caja. ¿Hay alguna API para eso?


Como mencionó Anuraj, el parámetro pageimages lo es. Mira la siguiente url que traerá algunas cosas ingeniosas:

https://en.wikipedia.org/w/api.php?action=query&prop=info|extracts|pageimages|images&inprop=url&exsentences=1&titles=india

Ella son algunos parámetros interesantes:

  • Los dos extractos y exsentences de los parámetros le dan una breve descripción que puede usar. (Exsentences es el número de oraciones que desea incluir en el extracto)
  • La información y los parámetros inprop = url le dan la url de la página
  • La propiedad prop tiene múltiples parámetros separados por un símbolo de barra
  • Y si inserta el formato = json allí, es aún mejor

Consulte el ejemplo de API de MediaWiki para obtener la imagen principal de una página de wikipedia: https://www.mediawiki.org/wiki/API:Page_info_in_search_results .

Como han mencionado otros, usaría prop=pageimages en su consulta API.

Si también desea la descripción de la imagen, usaría prop=pageimages|pageterms en su consulta API.

Puedes obtener la imagen original usando piprop=original . O puede obtener una imagen en miniatura con un ancho / alto especificado. Para una miniatura con ancho / alto = 600, piprop=thumbnail&pithumbsize=600 . Si omite cualquiera de los dos, la imagen devuelta en la devolución de llamada de la API tendrá una miniatura predeterminada con ancho / alto de 50 píxeles.

Si está solicitando resultados en formato JSON, siempre debe usar formatversion=2 en su consulta API (es decir, format=json&formatversion=2 ) porque facilita la recuperación de la imagen de la consulta.

Imagen de tamaño original:

https://en.wikipedia.org/w/api.php?action=query&format=json&formatversion=2&prop=pageimages|pageterms&piprop=original&titles=Albert Einstein

Tamaño de miniatura (600px ancho / alto) Imagen:

https://en.wikipedia.org/w/api.php?action=query&format=json&formatversion=2&prop=pageimages|pageterms&piprop=thumbnail&pithumbsize=600&titles=Albert Einstein


Creo que no, pero puedes capturar la imagen usando un analizador de enlaces documentos HTML



Existe una forma de obtener de manera confiable una imagen principal para una página de wikipedia: la extensión llamada PageImages

La extensión PageImages recopila información sobre las imágenes utilizadas en una página.

Su objetivo es devolver la miniatura más adecuada asociada con un artículo, intentando devolver solo imágenes significativas, p. Ej., No las de plantillas de mantenimiento, talones o íconos de banderas. Actualmente utiliza la primera imagen sin sentido utilizada en la página.

https://www.mediawiki.org/wiki/Extension:PageImages

Simplemente agregue las imágenes de la página de utilería a su consulta API:

/w/api.php?action=query&prop=pageimages&titles=Somepage&format=xml

¡Esto filtra de manera confiable las molestas imágenes predeterminadas y evita que tenga que filtrarlas usted mismo! La extensión está instalada en todas las páginas principales de wikipedia ...


He escrito un código que obtiene la imagen principal (URL completa) por título del artículo de Wikipedia. No es perfecto, pero en general estoy muy satisfecho con los resultados.

El desafío fue que cuando se le preguntó por un título específico, Wikipedia devuelve múltiples nombres de archivo de imagen (sin ruta). Además, la búsqueda secundaria (utilicé el código varatis publicado en este hilo, ¡gracias!) Devuelve las URL de todas las imágenes encontradas en función del nombre de archivo de la imagen que se buscó, independientemente del título del artículo original. Después de todo esto, podemos terminar con una imagen genérica irrelevante para la búsqueda, por lo que filtramos. El código itera sobre los nombres de archivo y las URL hasta que encuentra (con suerte, la mejor) coincidencia ... un poco complicado, pero funciona :)

Nota sobre el filtro genérico: he estado compilando una lista de cadenas de imágenes genéricas para la función isGeneric (), pero la lista sigue creciendo. Estoy considerando mantenerlo como una lista pública; si hay algún interés, háganmelo saber.

Pre:

protected static $baseurl = "http://en.wikipedia.org/w/api.php";

Función principal: obtener la URL de la imagen del título:

public static function getImageURL($title) { $images = self::getImageFilenameObj($title); // returns JSON object if (!$images) return ''''; foreach ($images as $image) { // get object of image URL for given filename $imgjson = self::getFileURLObj($image->title); // return first image match foreach ($imgjson as $img) { // get URL for image $url = $img->imageinfo[0]->url; // no image found if (!$url) continue; // filter generic images if (self::isGeneric($url)) continue; // match found return $url; } } // match not found return ''''; }

== Las siguientes funciones son llamadas por la función principal anterior ==

Obtener el objeto JSON (nombres de archivo) por título:

public static function getImageFilenameObj($title) { try // see if page has images { // get image file name $json = json_decode( self::retrieveInfo( self::$baseurl . ''?action=query&titles='' . urlencode($title) . ''&prop=images&format=json'' ))->query->pages; /** The foreach is only to get around * the fact that we don''t have the id. */ foreach ($json as $id) { return $id->images; } } catch(exception $e) // no images { return NULL; } }

Obtiene el objeto JSON (URL) por nombre de archivo:

public static function getFileURLObj($filename) { try // resolve URL from filename { return json_decode( self::retrieveInfo( self::$baseurl . ''?action=query&titles='' . urlencode($filename) . ''&prop=imageinfo&iiprop=url&format=json'' ))->query->pages; } catch(exception $e) // no URLs { return NULL; } }

Filtra imágenes genéricas:

public static function isGeneric($url) { $generic_strings = array( ''_gray.svg'', ''icon'', ''Commons-logo.svg'', ''Ambox'', ''Text_document_with_red_question_mark.svg'', ''Question_book-new.svg'', ''Canadese_kano'', ''Wiki_letter_'', ''Edit-clear.svg'', ''WPanthroponymy'', ''Compass_rose_pale'', ''Us-actor.svg'', ''voting_box'', ''Crystal_'', ''transportation_inv'', ''arrow.svg'', ''Quill_and_ink-US.svg'', ''Decrease2.svg'', ''Rating-'', ''template'', ''Nuvola_apps_'', ''Mergefrom.svg'', ''Portal-'', ''Translation_to_'', ''/School.svg'', ''arrow'', ''Symbol_'', ''stub'', ''Unbalanced_scales.svg'', ''-logo.'', ''P_vip.svg'', ''Books-aj.svg_aj_ashton_01.svg'', ''Film'', ''/Gnome-'', ''cap.svg'', ''Missing'', ''silhouette'', ''Star_empty.svg'', ''Music_film_clapperboard.svg'', ''IPA_Unicode'', ''symbol'', ''_highlighting_'', ''pictogram'', ''Red_pog.svg'', ''_medal_with_cup'', ''_balloon'', ''Feature'', ''Aiga_'' ); foreach ($generic_strings as $str) { if (stripos($url, $str) !== false) return true; } return false; }

Comentarios bienvenidos.


Lamento no haber respondido específicamente a tu pregunta sobre la imagen principal . Pero aquí hay un código para obtener una lista de todas las imágenes:

function makeCall($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); return curl_exec($curl); } function wikipediaImageUrls($url) { $imageUrls = array(); $pathComponents = explode(''/'', parse_url($url, PHP_URL_PATH)); $pageTitle = array_pop($pathComponents); $imagesQuery = "http://en.wikipedia.org/w/api.php?action=query&titles={$pageTitle}&prop=images&format=json"; $jsonResponse = makeCall($imagesQuery); $response = json_decode($jsonResponse, true); $imagesKey = key($response[''query''][''pages'']); foreach($response[''query''][''pages''][$imagesKey][''images''] as $imageArray) { if($imageArray[''title''] != ''File:Commons-logo.svg'' && $imageArray[''title''] != ''File:P vip.svg'') { $title = str_replace(''File:'', '''', $imageArray[''title'']); $title = str_replace('' '', ''_'', $title); $imageUrlQuery = "http://en.wikipedia.org/w/api.php?action=query&titles=Image:{$title}&prop=imageinfo&iiprop=url&format=json"; $jsonUrlQuery = makeCall($imageUrlQuery); $urlResponse = json_decode($jsonUrlQuery, true); $imageKey = key($urlResponse[''query''][''pages'']); $imageUrls[] = $urlResponse[''query''][''pages''][$imageKey][''imageinfo''][0][''url'']; } } return $imageUrls; } print_r(wikipediaImageUrls(''http://en.wikipedia.org/wiki/Saturn_%28mythology%29'')); print_r(wikipediaImageUrls(''http://en.wikipedia.org/wiki/Hans-Ulrich_Rudel''));

Lo tengo para http://en.wikipedia.org/wiki/Saturn_%28mythology%29 :

Array ( [0] => http://upload.wikimedia.org/wikipedia/commons/1/10/Arch_of_SeptimiusSeverus.jpg [1] => http://upload.wikimedia.org/wikipedia/commons/8/81/Ivan_Akimov_Saturn_.jpg [2] => http://upload.wikimedia.org/wikipedia/commons/d/d7/Lucius_Appuleius_Saturninus.jpg [3] => http://upload.wikimedia.org/wikipedia/commons/2/2c/Polidoro_da_Caravaggio_-_Saturnus-thumb.jpg [4] => http://upload.wikimedia.org/wikipedia/commons/b/bd/Porta_Maggiore_Alatri.jpg [5] => http://upload.wikimedia.org/wikipedia/commons/6/6a/She-wolf_suckles_Romulus_and_Remus.jpg [6] => http://upload.wikimedia.org/wikipedia/commons/4/45/Throne_of_Saturn_Louvre_Ma1662.jpg )

Y para la segunda URL ( http://en.wikipedia.org/wiki/Hans-Ulrich_Rudel ):

Array ( [0] => http://upload.wikimedia.org/wikipedia/commons/e/e9/BmRKEL.jpg [1] => http://upload.wikimedia.org/wikipedia/commons/3/3f/BmRKELS.jpg [2] => http://upload.wikimedia.org/wikipedia/commons/2/2c/Bundesarchiv_Bild_101I-655-5976-04%2C_Russland%2C_Sturzkampfbomber_Junkers_Ju_87_G.jpg [3] => http://upload.wikimedia.org/wikipedia/commons/6/62/Bundeswehr_Kreuz_Black.svg [4] => http://upload.wikimedia.org/wikipedia/commons/9/99/Flag_of_German_Reich_%281935%E2%80%931945%29.svg [5] => http://upload.wikimedia.org/wikipedia/en/6/64/HansUlrichRudel.jpeg [6] => http://upload.wikimedia.org/wikipedia/commons/8/82/Heinkel_He_111_during_the_Battle_of_Britain.jpg [7] => http://upload.wikimedia.org/wikipedia/commons/6/66/Regulation_WW_II_Underwing_Balkenkreuz.png )

Tenga en cuenta que la URL cambió un poco en el 6º elemento de la segunda matriz. Es lo que @JosephJaber estaba advirtiendo en su comentario anterior.

Espero que esto ayude a alguien.


Modo 1: puede intentar una consulta como esta:

http://en.wikipedia.org/w/api.php?action=opensearch&limit=5&format=xml&search=italy&namespace=0

en la respuesta, puede ver la etiqueta de la Image .

<Item> <Text xml:space="preserve">Italy national rugby union team</Text> <Description xml:space="preserve"> The Italy national rugby union team represent the nation of Italy in the sport of rugby union. </Description> <Url xml:space="preserve"> http://en.wikipedia.org/wiki/Italy_national_rugby_union_team </Url> <Image source="http://upload.wikimedia.org/wikipedia/en/thumb/4/46/Italy_rugby.png/43px-Italy_rugby.png" width="43" height="50"/> </Item>

Modo 2: use la consulta http://en.wikipedia.org/w/index.php?action=render&title=italy

entonces puedes obtener un código html sin procesar, puedes hacer que la imagen use algo como PHP Simple HTML DOM Parser http://simplehtmldom.sourceforge.net

No tengo tiempo para escribelo. solo darte un consejo, gracias.


Permite tomar el Ejemplo de página http://en.wikipedia.org/wiki/index.html?curid=57570 para obtener la Imagen principal

Revisa

prop = pageprops

action = query & pageids = 57570 & prop = pageprops y format = json

Resultados Página Datos por ejemplo.

{ "pages" : { "57570":{ "pageid":57570, "ns":0, "title":"Sachin Tendulkar", "pageprops" : { "defaultsort":"Tendulkar,Sachin", "page_image":"Sachin_at_Castrol_Golden_Spanner_Awards_(crop).jpg", "wikibase_item":"Q9488" } } } }}

Obtenemos el nombre del archivo Pic principal este resultado como

** (wikiId) .pageprops.page_image = Sachin_at_Castrol_Golden_Spanner_Awards_ (crop) .jpg **

Ahora que tenemos el nombre del archivo de imagen tendremos que hacer otra llamada Api para obtener la ruta de la imagen completa desde el nombre del archivo de la siguiente manera

action = query & titles = Imagen: INSERT_EXAMPLE_FILE_NAME_HERE.jpg & prop = imageinfo & iiprop = url

P.ej.

action = query & titles = Imagen: Sachin_at_Castrol_Golden_Spanner_Awards_ (crop) .jpg & prop = imageinfo & iiprop = url

Devuelve una matriz de datos de imagen que tiene url como http://upload.wikimedia.org/wikipedia/commons/3/35/Sachin_at_Castrol_Golden_Spanner_Awards_%28crop%29.jpg


Puede obtener la miniatura de cualquier página de wikipedia utilizando prop=pageimages . Por ejemplo:

http://en.wikipedia.org/w/api.php?action=query&titles=Al-Farabi&prop=pageimages&format=json&pithumbsize=100

Y obtendrá la URL completa en miniatura.


Vea esta pregunta relacionada en una API para Wikipedia . Sin embargo, no sabría si es posible recuperar la imagen en miniatura a través de una API.

También puede considerar analizar la página web para encontrar la URL de la imagen y recuperar la imagen de esa manera.


http://en.wikipedia.org/w/api.php

Mira prop=images .

Devuelve una matriz de nombres de archivos de imágenes que se utilizan en la página analizada. A continuación, tiene la opción de hacer otra llamada a la API para encontrar la URL completa de la imagen, por ejemplo: action=query&titles=Image:INSERT_EXAMPLE_FILE_NAME_HERE.jpg&prop=imageinfo&iiprop=url

o para calcular la URL a través del hash del nombre del archivo .

Lamentablemente, aunque la matriz de imágenes devuelta por prop=images está en el orden en que se encuentran en la página, no se puede garantizar que la primera sea la imagen en el cuadro de información porque a veces una página incluirá una imagen antes del cuadro de información (la mayoría de los iconos de tiempo para los metadatos sobre la página: por ejemplo, "este artículo está bloqueado").

La búsqueda de la matriz de imágenes para la primera imagen que incluye el título de la página es probablemente la mejor suposición para la imagen del cuadro de información.