2012-01-19 14 views
10

Estoy estudiando Wikipedia REST API pero no puedo encontrar la opción correcta para obtener también URLs para una consulta de búsqueda.Wikipedia list = search API REST: cómo recuperar también Url de artículos coincidentes

Esta es la URL de la solicitud:

http://it.wikipedia.org/w/api.php?action=query&list=search&srsearch=calvino&format=xml&srprop=snippet 

este pedido salidas sólo el título y el fragmento, pero no hay URLs para los artículos. He comprobado la documentación de la API de wikipedia para la búsqueda de la lista = búsqueda pero parece que no hay ninguna opción para obtener también las URL.

Best Regards, Fabio Buda

Respuesta

21

Se puede formar la URL del artículo fácilmente por sí mismo a partir del título. Para la Wikipedia italiana, es http://it.wikipedia.org/wiki/ seguido del título URL-encoded del artículo. Es tan simple como eso.

La URL real del artículo también reemplaza los espacios con guiones bajos, pero no tiene que hacer eso si no lo desea, la URL con espacios redirige a la que tiene caracteres de subrayado.

EDITAR: Puede obtener la URL, pero no es posible obtener información relacionada con la búsqueda al mismo tiempo. Para hacer eso, use la lista como generator. Por ejemplo:

http://it.wikipedia.org/w/api.php?action=query&generator=search&gsrsearch=calvino&format=xml&gsrprop=snippet&prop=info&inprop=url 

pero creo que el cambio de formato de URL de páginas es muy poco probable: demasiadas otras personas dependen de eso.

+2

Tiene razón pero esperaba URLs en la respuesta XML | JSON: ¿qué pasaría si wikipedia cambiara la estructura de la URL (it.wiki .../wiki /) en el futuro? tener URL directamente de la API de wikipedia garantiza la consistencia de la url. Pero no hay problema y gracias por tu respuesta. –

+0

En realidad, puedes hacer eso, ver mi edición. – svick

+0

En realidad, no es solo la codificación URL. Compare: https://en.wikipedia.org/wiki/пиетет a su contraparte URL codificada: –

0

que he encontrado imposible recuperar tanto la descripción y URL a la vez, por lo que se partió en dos javascript método, la primera descripción get, el segundo get url:

function get_wiki_info() { 
    $.ajax({ 
     url: 'http://it.wikipedia.org/w/api.php', 
     data: { action: 'query', list: 'search', srsearch: $("input[name=city]").val(), format: 'json' }, 
     dataType: 'jsonp', 
     success: function (data) { 
      console.log('wiki', data.query.search[0].snippet); 
      $('#info-wiki-text').html(data.query.search[0].snippet); 
      get_wiki_links(); 
     }, 
     fail: function (data) { 
      $('#info-wiki-text').html("Impossible retrieve information for " + $("input[name=city]").val()); 
     } 
    }); 
} 

function get_wiki_links() { 
    $.ajax({ 
     url: 'http://it.wikipedia.org/w/api.php', 
     data: { action: 'query', generator: 'allpages', search: $("input[name=city]").val(), format: 'json', gapfrom: $("input[name=city]").val(), gapto: $("input[name=city]").val(), prop: 'info', inprop: 'url' }, 
     dataType: 'jsonp', 
     success: function (data) { 
      console.log('wiki', data.query.pages); 
      $.each(data.query.pages, function (key, val) { 
       $('#wiki-city-link').attr('href', val.fullurl); 
      }); 
     }, 
     fail: function (data) { 
      console.log(data); 
     } 
    }); 
} 

Si lo prefiere, para recuperar la descripción :

https://it.wikipedia.org/w/api.php?action=query&list=search&srsearch=Your%20Params&utf8=

para recuperar url:

https://it.wikipedia.org/w/api.php?action=query&generator=allpages&search=Your%20Params&gapfrom=Your%20Params&gapto=Your%20Params&prop=info&inprop=url&utf8=