El uso de Wiki API por formato JSON no puede obtener el contenido
-
06-07-2019 - |
Pregunta
Utilizo este código para recopilar la información de Wiki:
Y puedo obtener una cadena JSON como esta
{
"query": {
"normalized": [{
"from": "apple",
"to": "Apple"
}],
"pages": {
"18978754": {
"pageid": 18978754,
"ns": 0,
"title": "Apple",
"revisions": [{
"*": "Something....."
}]
}
}
}
}
Puedo evaluarlo en JSON, pero el problema es que puedo ingresar a las páginas de consulta > después de eso no puedo profundizar más, fue porque la API Wiki me devolvió como una Cadena 18978754, pero puede ' t obtenga el valor por esto:
jsonObject.query.pages.18978754
Alguna suposición que necesito aclarar, no sé el número 18978754. ¿Debo obtener el número primero o aún puedo obtener "Algo ..."? dentro de saber el número.
Solución
¿Qué pasa con el uso de la sintaxis de matriz:
jsonObject.query.pages[18978754]
Parece estar funcionando, usando firebug:
>>> data.query.pages[18978754]
Object pageid=18978754 ns=0 title=Apple revisions=[1]
Y:
>>> data.query.pages[18978754].title
"Apple"
Tenga en cuenta que el acceso al objeto de datos con una sintaxis de matriz también es posible para las otras propiedades; por ejemplo:
>>> data['query'].pages[18978754].title
"Apple"
Esa es una sintaxis JS perfectamente válida :-)
Agregado después de ver el comentario / editar
Si no conoce los identificadores de las páginas, puede iterar sobre las páginas, con algo como esto:
for (var pageId in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageId)) {
console.log(data.query.pages[pageId].title);
}
}
Tenga en cuenta que estoy usando hasOwnProperty
para asegurarse de que el objeto en el que estoy tiene la propiedad, y que no proviene de ningún tipo de herencia ni nada por el estilo:
Todos los objetos descienden de Object hereda el método hasOwnProperty. Este método puede usarse para determinar si un objeto tiene el especificado propiedad como propiedad directa de ese objeto; a diferencia del operador in, esto El método no marca el cadena prototipo del objeto.
Dependiendo de lo que se encuentre en " revision
" ;, es posible que también tenga que hacer lo mismo en ese caso, por cierto ...
Espero que esto ayude mejor :-)
Segunda edición, después del segundo conjunto de comentarios:
Bueno, yendo un poco más lejos (no pensé que lo dijeras literalmente):
data.query.pages[pageId].revisions
es una matriz (tenga en cuenta los símbolos []
) que parece ser capaz de contener varios objetos.
entonces, puedes obtener el primero de estos de esta manera:
data.query.pages[pageId].revisions[0]
El segundo de esta manera:
data.query.pages[pageId].revisions[1]
(no hay un segundo en el ejemplo que proporcionó, por cierto, esto es en teoría ^^)
Y así sucesivamente.
Para obtener todos esos objetos, tendría que hacer algún tipo de bucle, como este:
var num_revisions = data.query.pages[pageId].revisions.length;
var i;
for (i=0 ; i<num_revisions ; i++) {
console.log(data.query.pages[pageId].revisions[i]);
}
Y ahora, dentro de ese ciclo, debería poder obtener la propiedad '*' del objeto dado:
data.query.pages[pageId].revisions[i]['*']
Entonces, el código final se convierte en:
for (var pageId in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageId)) {
var num_revisions = data.query.pages[pageId].revisions.length;
var i;
for (i=0 ; i<num_revisions ; i++) {
console.log(data.query.pages[pageId].revisions[i]['*']);
}
}
}
Usando este código en firebug, ahora obtengo la picadura literal que estás buscando:
Something.....
Por supuesto, probablemente podría usar:
for (var pageId in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageId)) {
console.log(data.query.pages[pageId].revisions[0]['*']);
}
}
Que funcionará bien si siempre desea tratar solo con el primer elemento de la matriz revisiones
.
Solo tenga cuidado: en su ejemplo, solo hubo una revisión; el código que proporcioné debería poder tratar con muchos; depende de usted determinar qué quiere hacer con ellos ;-)
Otros consejos
Tarde pero quizás útil para alguien más.
Cuando agrega & amp; indexpageids
a su solicitud, obtendrá los pageids
. Más información aquí .
Tuve este mismo problema al crear un analizador basado en php para la API Wiki: así es como lo resolví.
$new_result = array_pop($result["query"]["pages"]);
$final_result = $new_result["pageid"];
Nota: Sé que este es el código PHP en una pregunta de JS, pero no pude encontrar exactamente la misma pregunta / problema en ese foro. Estoy seguro de que esto será útil para alguien.