Interfaz de usuario
En el primer segmento de este artículo, se lo presenté a la API de servicios Web Stack Exchange, que ofrece una manera para que los desarrolladores crear aplicaciones Web personalizadas que utilizan el contenido de desbordamiento de la pila y sus sitios hermanos. En ese artículo, que te presenté el paquete StackPHP, y yo también le di un curso acelerado en el uso del paquete de la búsqueda de preguntas, respuestas y comentarios recuperar y trabajar con las etiquetas.
Lo que hay que recordar acerca de preguntas, respuestas y comentarios, sin embargo, es que no existen en el vacío. Son creados por los usuarios, y es que los usuarios que hacen que la garrapata sitio. Es por eso que la API Stack Exchange incluye un gran número de métodos diseñados para permitir a los desarrolladores acceder a los perfiles de usuario y los plazos, y desvela las relaciones entre los usuarios y sus mensajes.
En este artículo se centrará principalmente en esta dimensión de la API Stack Exchange, que ilustra cómo buscar usuarios, obtener perfiles de usuario y los plazos, y recuperar información en preguntas, respuestas, comentarios, insignias y etiquetas de un usuario. Para envolver las cosas, también a discutir un par de maneras sencillas en las que se puede mejorar el rendimiento de su aplicación con la paginación y el almacenamiento en caché. ¡Entonces empecemos!
¿Quién de The Who
Vamos a empezar con algo básico: conseguir una lista de usuarios. Esto se logra fácilmente con el método (), ListUsers que se asigna a la API / usuarios de punto final. Los resultados devueltos por el método pueden ser filtrados y ordenados por atributos específicos, como cuenta la fecha de creación, la reputación o nombre. He aquí un ejemplo, que devuelve una lista de usuarios según la reputación:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = Nuevo servicio User_Exchange ( 'stackoverflow', null, 30); // Obtener la lista de usuarios $ = $ Servicio- usuarios & gt; ListUsers (array ( 'especie' = & gt; "reputación", "orden" = & gt; 'desc')); ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; & gt estilo; .title { color verde; } & Lt; / estilo de & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; Usuarios & lt; / h2 & gt; & Lt; foreach PHP ($ usuarios como $ U): & gt;? & Lt; p style = "border-bottom: 2px negro salpicado;" & gt; & Lt; div style = "float: left; anchura: 40%" & gt; & Lt; a href = "echo $ U & gt; user_id; & gt;" & gt; & lt;? Php echo $ U & gt; nombre_de_presentación; ? & Gt; & lt; / a & gt; & lt; br / & gt; & Lt; & gt pequeña; Cuenta registrado en & lt; fecha de php echo ( 'd M y H: i', $ U & gt; creation_date?); ? & Gt; & Lt; br / & gt; & Lt;? Php echo $ U & gt; ubicación; ? & Gt; & Lt; br / & gt; & Lt;? Php echo $ U & gt; question_count; ? & Gt;respuestas | & Lt;? Php echo $ U & gt; answer_count; ? & Gt; respuestas | & Lt;? Php echo $ U & gt; reputación; ? & Gt; reputación & lt; br / & gt; & Lt;? Php echo $ U & gt; up_vote_count; ? & Gt; por votos | & Lt;? Php echo $ U & gt; down_vote_count; ? & Gt; votos Bajar & Lt; / small & gt; & Lt; / div & gt; & Lt; div style = "float: right; anchura: 60%" & gt; Más información & lt; br / & gt; & Lt; & gt pequeña; & Lt;? Php echo $ U & gt; ABOUT_ME; ? & Gt; & Lt; / small & gt; & Lt; / div & gt; & Lt; / p & gt; & Lt; br style = "clear: both" / & gt; & Lt;? Php endforeach; ? & Gt; & Lt; / body & gt; & Lt; / html & gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = nuevo servicio User_Exchange ( 'stackoverflow', null, 30); // Obtener usuarioLista de usuarios $ = Servicio $ - & gt; ListUsers (array ( 'especie' = & gt; "reputación", "orden" = & gt; 'desc')); ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; estilo & gt; . título {color: green; } & Lt; / Style & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; Usuarios & lt; / H2 & gt; & Lt; ? php foreach ($ usuarios como $ U):? & Gt; & Lt; p style = "border-bottom: 2px punteado negro;" & Gt; & Lt; div style = "float: left; anchura: 40%" & gt; & Lt; a href = "echo $ U & gt; user_id; & gt;" & Gt; & Lt; ? php echo $ u - & gt; mostrar nombre ; ? & Gt; & Lt; / A & gt; & Lt; br / & gt; & Lt; pequeña & gt; Cuenta registrado en & lt; ? php fecha de eco ( "D M h: i ', $ u - & gt; creation_date); ? & Gt; & Lt; br / & gt; & Lt; ? php echo $ u - & gt; ubicación ; ? & Gt; & Lt; br / & gt; & Lt; ? php echo $ u - & gt; question_count; ? & Gt;respuestas | & Lt; ? php echo $ u - & gt; answer_count; ? & Gt; respuestas | & Lt; ? php echo $ u - & gt; reputación; ? & Gt; reputación & lt; br / & gt; & Lt; ? php echo $ u - & gt; up_vote_count; ? & Gt; por votos | & Lt; ? php echo $ u - & gt; down_vote_count; ? & Gt; abajo califican & lt; / Small & gt; & Lt; / Div & gt; & Lt; div style = "float: right; anchura: 60%" & gt; Más información & lt; br / & gt; & Lt; pequeña & gt; & Lt; ? php echo $ u - & gt; sobre mi ; ? & Gt; & Lt; / Small & gt; & Lt; / Div & gt; & Lt; / P & gt; & Lt; br style = "clear: both" / & gt; & Lt; ? endforeach php; ? & Gt; & Lt; / Body & gt; & Lt; / Html & gt;
El valor de retorno de los ListUsers () método es un conjunto de objetos, cada uno de los cuales tiene propiedades que corresponden a diversos atributos de usuario. Como demuestra el código anterior, se puede extraer una gran cantidad de información sobre el perfil de cada objeto, incluyendo el nombre del usuario, identificador de usuario, cuenta de la fecha de creación, ubicación, de preguntas y respuestas cuenta, y de forma libre biografía autoalimenta.
Observe también que el objeto de servicio en este caso no es un objeto Post_Exchange (que se utilizó ampliamente en la primera parte de este artículo), pero un objeto User_Exchange. Como su nombre indica, este objeto proporciona un repositorio común de métodos relacionados con la información de espacio de usuario, y se utiliza en casi todos los ejemplos de este artículo.
Esto es lo que la salida del script anterior podría ser:
Searching For Godot
Si sale de los ListUsers () de una cadena de búsqueda, devolverá sólo a aquellos usuarios cuyos nombres contengan esa cadena. Esto significa que es muy fácil de convertir a la lista anterior en un motor de búsqueda simple para los usuarios. Aquí está el código:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = Nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Búsqueda de usuarios que coincidan con término de búsqueda if (isset ($ _POST [ 'enviar'])) { $ Q = $ _POST [ 'q']; $ resultados = $ servicio- & gt; ListUsers (array ( "Filtro" = & gt; $ Q, 'Especie' = & gt; 'reputación', "Orden" = & gt; 'Desc' )); } ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; & gt estilo; .title { color verde; } & Lt; / estilo de & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; Buscar & lt; / h2 & gt; & Lt; form action = "& lt;? Php echo htmlentities ($ _ SERVER [ 'PHP_SELF']); & gt;" method = "post" & gt; & Lt; input type = "text" name = "q" / & gt; & Lt; input type = "submit" name = "submit" / & gt; & Lt; / form & gt; & Lt;? Php if (count ($ resultado) & gt; 0):? & Gt; & Lt; h2 & gt; Resultados de la búsqueda & lt; / h2 & gt; & Lt; foreach PHP ($ resultados como resultado $): & gt;? & Lt; intervaloclass = "titulo" & gt; & lt; a href = "echo $ resultante & gt; user_id; & gt;" & gt; & lt;? php echo $ resultante & gt; nombre_de_presentación; ? & Gt; & lt; / a & gt; & lt; / span & gt; & Lt; br / & gt; & Lt; & gt pequeña; & Lt;? Php echo $ resultante & gt; ubicación; ? & Gt; & Lt; br / & gt; ? Creado en & lt; fecha de php echo ( 'd M y H: i', $ resultante & gt; creation_date); ? & Gt; & Lt; br / & gt; & Lt;? Php echo $ resultante & gt; question_count; ? & Gt; preguntas | & Lt;? Php echo $ resultante & gt; answer_count; ? & Gt; respuestas | & Lt;? Php echo $ resultante & gt; up_vote_count; ? & Gt; por votos | & Lt;? Php echo $ resultante & gt; down_vote_count; ? & Gt; abajo califican & lt; br / & gt; & Lt; / small & gt; & Lt; hr / & gt; & Lt;? Php endforeach; ? & Gt; & Lt;? Php endif; ? & Gt; & Lt; / body & gt; & Lt; / html & gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // inicializarservicio $ = nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Búsqueda de usuarios que coincidan con término de búsqueda if (isset ($ _POST [ 'enviar'])) {$ q = $ _POST [ 'q']; $ resultados = $ servicio - & gt; ListUsers (array ( "filtro" = & gt; $ q, 'especie' = & gt; "reputación", "orden" = & gt; 'desc')); }? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; estilo & gt; . título {color: green; } & Lt; / Style & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; Search & lt; / H2 & gt; & Lt; form action = "& lt;? php echo htmlentities ($ _ SERVER [ 'PHP_SELF']); & gt;" method = "post" & gt; & Lt; input type = "text" name = "q" / & gt; & Lt; input type = "submit" name = "submit" / & gt; & Lt; / Form & gt; & Lt; ? php if (count (resultados $) & gt; 0):? & Gt; & Lt; h2 & gt; Resultados & lt búsqueda; / H2 & gt; & Lt; ? php foreach ($resultados como resultado $):? & Gt; & Lt; span class = "titulo" & gt; & Lt; a href = "echo $ resultante & gt; user_id; & gt;" & Gt; & Lt; ? php echo $ resultado - & gt; mostrar nombre ; ? & Gt; & Lt; / A & gt; & Lt; / Span & gt; & Lt; br / & gt; & Lt; pequeña & gt; & Lt; ? php echo $ resultado - & gt; ubicación ; ? & Gt; & Lt; br / & gt; Creado en & lt; ? php fecha de eco ( "D M h: i ', resultado $ - & gt; creation_date); ? & Gt; & Lt; br / & gt; & Lt; ? php echo $ resultado - & gt; question_count; ? & Gt; preguntas | & Lt; ? php echo $ resultado - & gt; answer_count; ? & Gt; respuestas | & Lt; ? php echo $ resultado - & gt; up_vote_count; ? & Gt; por votos | & Lt; ? php echo $ resultado - & gt; down_vote_count; ? & Gt; abajo califican & lt; br / & gt; & Lt; / Small & gt; & Lt; hr / & gt; & Lt; ? endforeach php; ? & Gt; & Lt; ? endif php; ? & Gt; & Lt; / Body & gt; & Lt; / Html & gt;
Este script crea una forma sencilla para que el usuario introduzca una cadena de búsqueda. Una vez que se envía el formulario, la entrada del usuario se pasa a los ListUsers método (), que devuelve una lista de usuarios con nombres que coinciden con el término de búsqueda. El parámetro "filtro" se utiliza para especificar el término de búsqueda, mientras que el "tipo" y los parámetros "orden" especifican que el conjunto de resultados debe ser ordenada por la reputación, con los usuarios de mayor reputación en primer lugar.
He aquí un ejemplo de los resultados de búsqueda devueltos por esta secuencia de comandos:
Q & A
Si lo que realmente después es una lista de preguntas, respuestas y comentarios enviados por un usuario, el API Stack Exchange puede darle esa información también. Estos requisitos son atendidos por tres métodos en el paquete StackPHP, usersQuestions (), usersAnswers () y usersComments (), que se asignan respectivamente a los / usuarios / id / preguntas, / usuarios / id / respuestas y / usuarios / id / comentarios criterios de valoración . Aquí está un ejemplo rápido que muestra cómo funciona esto:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = Nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Obtener el perfil de usuario // preguntas, respuestas, comentarios // Introducir fluido válida aquí $ uid = 'xxxx'; $ User = $ servicio- & gt; userProfile ($ uid); $ = $ preguntas servicio- & gt; usersQuestions ($ uid); $ = $ respuestas servicio- & gt; usersAnswers ($ uid); $ comentarios = $ servicio- & gt; usersComments ($ UID); ? & Gt; & Lt; html & gt; & Lt; head & gt; & lt; / head & gt; & Lt; body & gt; & Lt; h2 & gt; Perfil de usuario & lt; / h2 & gt; & Lt; div & gt; & Lt; a href = "echo $ usuario- & gt; user_id; & gt;" & gt; & lt;? Php echo $ usuario- & gt; nombre_de_presentación; ? & Gt; & lt; / a & gt; & Lt; br / & gt; & Lt; & gt pequeña; Cuenta registrado en & lt; fecha de php echo ( 'd M y H: i', $ usuario- & gt; creation_date?); ? & Gt; & Lt; br / & gt; & Lt;? Php echo $ usuario- & gt; ubicación; ? & Gt; & Lt; br / & gt; & Lt;? Php echo $ usuario- & gt; question_count; ? & Gt; respuestas | & Lt;? Php echo$ Usuario- & gt; answer_count; ? & Gt; respuestas | & Lt;? Php echo $ usuario- & gt; reputación; ? & Gt; reputación & lt; br / & gt; & Lt;? Php echo $ usuario- & gt; up_vote_count; ? & Gt; por votos | & Lt;? Php echo $ usuario- & gt; down_vote_count; ? & Gt; votos Bajar & Lt; / small & gt; & Lt; / div & gt; & Lt;? Php if (preguntas is_array ($)): & gt;? & Lt; h2 & gt; preguntas de usuario & lt; / h2 & gt; & Lt; ul & gt; & Lt;? Php foreach ($ preguntas como $ q): & gt;? & Lt; li & gt; & Lt; p & gt; & Lt; a href = "echo $ Q & gt; question_id; & gt;" & gt; & lt;? Php echo $ Q & gt; título; ? & Gt; & lt; / a & gt; & Lt; br / & gt; & Lt; & gt pequeña; ? Creado en & lt; fecha de php echo ( 'd M y H: i', $ q- & gt; creation_date); ? & Gt; | & Lt;? Php echo $ Q & gt; answer_count; ? & Gt; respuestas & lt; br / & gt; Etiquetas: & lt;? Php echo implosión ( ',', $ q- & gt; etiquetas); ? & Gt; & Lt; / small & gt; & Lt; / p & gt; & Lt; / li & gt; & Lt;? Php endforeach; ? & Gt; & Lt; / ul & gt; & Lt;? Php endif; ? & Gt; & Lt;? Phpsi (is_array respuestas ($)): & gt;? & Lt; h2 & gt; respuestas de usuario & lt; / h2 & gt; & Lt; ul class = "respuestas" & gt; & Lt;? Php foreach ($ respuestas como $ a):? & Gt; & Lt; li & gt; & Lt; p & gt; & Lt; span class = "titulo" & gt; & lt;? Php echo $ a & gt; título; ? & Gt; & lt; / span & gt; & Lt; br / & gt; & Lt; & gt pequeña; Respuesta añadido el & lt; fecha de php echo ( 'd M y H: i', $ a- & gt; creation_date?); ? & Gt; por & lt;? php echo $ a & gt; el usuario & gt; nombre_de_presentación; ? & Gt; | & Lt;? Php echo $ a- & gt; up_vote_count; ? & Gt; por votos | & Lt;? Php echo $ a- & gt; down_vote_count; ? & Gt; votos Bajar & Lt; / small & gt; & Lt;? Php echo $ a- & gt; corporal; ? & Gt; & Lt; / p & gt; & Lt; / li & gt; & Lt;? Php endforeach; ? & Gt; & Lt; / ul & gt; & Lt;? Php endif; ? & Gt; & Lt;? Php if (comentarios is_array ($)): & gt;? & Lt; h2 & gt; Comentario del usuario & lt; / h2 & gt; & Lt; ul & gt; & Lt;? Php foreach ($ comentarios como $ c):? & Gt; & Lt; li & gt; & Lt; p & gt; & Lt;? Php echo $ c- & gt; corporal;? & Gt; & Lt; br / & gt; & Lt; & gt pequeña; Comentario añadido el & lt; fecha de php echo ( 'd M y H: i', $ c- & gt; creation_date?); ? & Gt; por & lt;? php echo $ c- & gt; & gt apropiación; nombre_de_presentación; ? & Gt; & Lt; / small & gt; & Lt; / p & gt; & Lt; / li & gt; & Lt;? Php endforeach; ? & Gt; & Lt; / ul & gt; & Lt;? Php endif; ? & Gt; & Lt; / body & gt; & Lt; / html & gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Obtener perfil de usuario // preguntas, respuestas, comentarios // introducir fluido válida aquí $ uid = 'xxxx'; $ User = $ servicio - & gt; userProfile ($ uid); $ = $ Preguntas servicio - ygt; preguntas de los usuarios ($ UID); $ = $ Respuestas servicio - & gt; usuarios respuestas ($ UID); Comentarios $ = $ servicio - & gt; usuarios en los comentarios ($ UID); ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; / Head & gt; & Lt; body & gt; & Lt; h2 & gt; perfil & lt usuario; / H2 & gt; & Lt; div & gt; & Lt; a href = "echo $ usuario- & gt; user_id ;? & gt;" & Gt; & Lt; ? php echo $ usuario - & gt; nombre_de_presentación; ? & Gt; & Lt; / A & gt; & Lt; br / & gt; & Lt; pequeña & gt; Cuenta registrado en & lt; ? php fecha de eco ( 'y h d M: i', $ usuario - & gt; creation_date); ? & Gt; & Lt; br / & gt; & Lt; ? php echo $ usuario - & gt; ubicación; ? & Gt; & Lt; br / & gt; & Lt; ? php echo $ usuario - & gt; question_count; ? & Gt; respuestas | & Lt; ? php echo $ usuario - & gt; ANSWER_COUNT; ? & Gt; respuestas | & Lt; ? php echo $ usuario - & gt; tación repu; ? & Gt; repu tación & lt; br / & gt; & Lt; ? php echo $ usuario - & gt;up_vote_count; ? & Gt; por votos | & Lt; ? php echo $ usuario - & gt; down_vote_count; ? & Gt; abajo califican & lt; / Small & gt; & Lt; / Div & gt; & Lt; ? php if ($ is_array (preguntas)):? & Gt; & Lt; h2 & gt; Preguntas y lt usuario; / H2 & gt; & Lt; ul & gt; & Lt; ? php foreach ($ preguntas como $ q):? & Gt; & Lt; li & gt; & Lt; p & gt; & Lt; a href = "echo $ Q & gt; question_id; & gt;" & Gt; & Lt; ? php echo $ q - & gt; título; ? & Gt; & Lt; / A & gt; & Lt; br / & gt; & Lt; pequeña & gt; Creado en & lt; ? php fecha de eco ( "D M h: i ', $ q - & gt; creation_date); ? & Gt; | & Lt; ? php echo $ q - & gt; answer_count; ? & Gt; respuestas & lt; br / & gt; Etiquetas: & lt; ? php echo implosión ( ',', $ q - & gt; etiquetas); ? & Gt; & Lt; / Small & gt; & Lt; / P & gt; & Lt; / Li & gt; & Lt; ? endforeach php;? & Gt; & Lt; / Ul & gt; & Lt; ? endif php; ? & Gt; & Lt; ? php if ($ is_array (respuestas)):? & Gt; & Lt; h2 & gt; respuestas & lt usuario; / H2 & gt; & Lt; ul class = "respuestas" & gt; & Lt; ? php foreach ($ respuestas como $ a):? & Gt; & Lt; li & gt; & Lt; p & gt; & Lt; span class = "titulo" & gt; & Lt; ? php echo $ a - & gt; título; ? & Gt; & Lt; / Span & gt; & Lt; br / & gt; & Lt; pequeña & gt; Respuesta añadido el & lt; ? php fecha de eco ( 'd M y H: i', $ a - & gt; creation_date); ? & Gt; por & lt; ? php echo $ a - & gt; usuario - & gt; mostrar nombre ; ? & Gt; | & Lt; ? php echo $ a - & gt; up_vote_count; ? & Gt; por votos | & Lt; ? php echo $ a - & gt; down_vote_count; ? & Gt; abajo califican & lt; / Small & gt; & Lt; ? php echo $ a - & gt; cuerpo ; ? & Gt; & Lt; / P & gt; & Lt; / Li & gt; & Lt; ? phpendforeach; ? & Gt; & Lt; / Ul & gt; & Lt; ? endif php; ? & Gt; & Lt; ? php if ($ is_array (comentarios)):? & Gt; & Lt; h2 & gt; comentarios de CH usuario; / H2 & gt; & Lt; ul & gt; & Lt; ? php foreach ($ comentarios como $ c):? & Gt; & Lt; li & gt; & Lt; p & gt; & Lt; ? php echo $ c - & gt; cuerpo ; ? & Gt; & Lt; br / & gt; & Lt; pequeña & gt; Comentario añadido en & lt; ? php fecha de eco ( "D M h: i ', $ c - & gt; creation_date); ? & Gt; por & lt; ? php echo $ c - & gt; propietario - & gt; mostrar nombre ; ? & Gt; & Lt; / Small & gt; & Lt; / P & gt; & Lt; / Li & gt; & Lt; ? endforeach php; ? & Gt; & Lt; / Ul & gt; & Lt; ? endif php; ? & Gt; & Lt; / Body & gt; & Lt; / Html & gt;
Si usted prestó atención a la primera parte de este tutorial, una buena parte de la secuencia de comandos le resultará familiar a usted. Eso es porque los objetos devueltos por los usersQuestions (), usersAnswers () y usersComments () métodos son muy similares a los devueltos por las preguntas (), questionsAnswers () y questionsComments () se discutió anteriormente. Ahora es muy fácil de iterar sobre estos objetos y ver el título y el contenido de cada tipo de puesto, junto con un enlace.
He aquí una muestra de lo que puede llegar:
Charla a la placa!
Si ha utilizado el desbordamiento de pila, es posible que esté familiarizado con el concepto de "placas". Muy simplemente, son las recompensas por la participación, y que están ganaron automáticamente a medida que más contribuye al sitio. Así, por ejemplo, si vota a 300 o más veces, ganará la insignia "deber cívico" o, si se crea una nueva etiqueta que se utiliza por 50 o más preguntas, que va a ganar la insignia "Taxonomist". Es una manera divertida de medir las contribuciones, y para aprender más acerca de otros usuarios de la comunidad.
La API ofrece un método / insignias, que devuelve una lista completa de las insignias disponibles junto con un recuento del número de veces que han sido otorgados. He aquí un ejemplo:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / Badge_Exchange.php'; // Inicializar el servicio $ = Nuevo servicio Badge_Exchange ( 'stackoverflow', null, null); // Obtener la lista de placas $ Respuesta = $ servicio- & gt; badges (); $ insignias = $ respuesta- & gt; insignias; ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; & gt estilo; mesa { border-collapse: colapso; } td { frontera: 1px negro sólido; } & Lt; / estilo de & gt; & Lt; / head & gt; & Lt; body & gt; & Lt; h2 & gt; Placas & lt; / h2 & gt; & Lt; tabla & gt; & Lt; tr & gt; & Lt; TH & gt; Rango & lt; / th & gt; & Lt; TH & gt; Tag & lt; / th & gt; & Lt; TH & gt; Descripción & lt; / th & gt; & Lt; TH & gt; Premio recuento de & lt; / th & gt; & Lt; TH & gt; a base de Tag & lt; / th & gt; & Lt; / tr & gt; & Lt;? Php foreach ($ insignias como $ b):? & Gt; & Lt; tr & gt; & Lt; td & gt; & lt;? Php echo $ b- & gt; rango; ? & Gt; & lt; / td & gt; & Lt; td & gt; & lt;? Php echo $ b- & gt; nombre; ? & Gt; & lt; / td & gt; & Lt; td & gt; & lt;? Phpecho $ b- & gt; Descripción; ? & Gt; & lt; / td & gt; & Lt; td & gt; & lt;? Php echo $ b- & gt; award_count; ? & Gt; & lt; / td & gt; & Lt; td & gt; & lt;? Php echo ($ b- & gt; tag_based)? 'Si no' ; ? & Gt; & lt; / td & gt; & Lt; / tr & gt; & Lt;? Php endforeach; ? & Gt; & Lt; / table & gt; & Lt; / body & gt; & Lt; / html & gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / Badge_Exchange.php'; // Inicializar el servicio $ = nuevo servicio Badge_Exchange ( 'stackoverflow', null, null); // Obtener la lista de placas $ respuesta = Servicio $ - & gt; (insignias); $ = $ Insignias respuesta - & gt; insignias; ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; estilo & gt; tabla {frontera - colapso: el colapso; } Td {border: 1px negro sólido; } & Lt; / Style & gt; & Lt; / Head & gt; & Lt; body & gt;& Lt; h2 & gt; Insignias & lt; / H2 & gt; & Lt; table & gt; & Lt; tr & gt; & Lt; TH & gt; Rango & lt; / Th & gt; & Lt; TH & gt; Tag & lt; / Th & gt; & Lt; TH & gt; Descripción & lt; / Th & gt; & Lt; TH & gt; & lt recuento de adjudicación; / Th & gt; & Lt; TH & gt; Tag - basada & lt; / Th & gt; & Lt; / Tr & gt; & Lt; ? php foreach ($ insignias como $ b):? & Gt; & Lt; tr & gt; & Lt; td & gt; & Lt; ? php echo $ b - & gt; rango; ? & Gt; & Lt; / Td & gt; & Lt; td & gt; & Lt; ? php echo $ b - & gt; nombre ; ? & Gt; & Lt; / Td & gt; & Lt; td & gt; & Lt; ? php echo $ b - & gt; Descripción; ? & Gt; & Lt; / Td & gt; & Lt; td & gt; & Lt; ? php echo $ b - & gt; award_count; ? & Gt; & Lt; / Td & gt; & Lt; td & gt; & Lt; ? php echo ($ b - & gt; tag_based)? 'Si no' ; ? & Gt; & Lt; / Td & gt; & Lt; / Tr & gt;& Lt; ? endforeach php; ? & Gt; & Lt; / Table & gt; & Lt; / Body & gt; & Lt; / Html & gt;
En este caso, el método de objeto insignias () invoca el / insignias API de punto final y devuelve una lista de insignias como objetos. Esto es lo que la salida será similar a:
Observe que cada etiqueta viene con un atributo 'tag_based', que define si la placa se obtuvo sobre la base de las contribuciones a una etiqueta en particular, o si se obtuvo sobre la base de una actividad en particular. También puede obtener esta información a través de otros dos métodos, badgesTag () y badgesName (), que devuelven matrices de insignias no basados en la etiqueta basada en etiquetas y respectivamente.
También es posible averiguar qué usuarios se les otorgan un distintivo particular, con el método de placas (), que acepta una placa de identificación particular y devuelve una lista de todos los usuarios que se adjudicaron esa placa particular. Considere el siguiente ejemplo, que ilustra esto mediante la recuperación de los primeros cinco insignias no basados en la etiqueta en la lista, y luego recuperar los nombres de los usuarios que han ganado esas insignias:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / Badge_Exchange.php'; // Inicializar el servicio $ = Nuevo servicio Badge_Exchange ( 'stackoverflow', null, 0); // Lista de insignias de etiquetas no conseguir $ Respuesta = $ servicio- & gt; badgesName (); $ insignias = $ respuesta- & gt; insignias; // Para los primeros 5 insignias en la lista // Conseguir que los usuarios otorgan esas insignias for ($ x = 0; $ x & lt; 5; $ x +) { $ Insignia insignias = & $ [$ x]; $ Insignia del & gt; usuarios = array (); $ Respuesta = $ servicio- & gt; insignia (insignia del $ & gt; badge_id); foreach ($ respuesta- & gt; los usuarios como $ usuario) { $ Insignia del & gt; los usuarios [] = array ( 'nombre' = & gt; & gt $ usuario-; nombre_de_presentación, 'id' = & gt; & gt $ usuario-; user_id); } } ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; & gt estilo; & Lt; / estilo de & gt; & Lt; / head & gt; & Lt; body & gt; & Lt; h2 & gt; Usuarios de placa & lt; / h2 & gt; & Lt;? Php foreach ($ $ insignias como insignia): & gt;? & Lt; h3 & gt; & lt;? Php echo $ insignia del & gt; nombre; ? & Gt; & lt; / h3 & gt; & Lt;? Php foreach ($ insignia del & gt; los usuarios como $ usuario):? & Gt;& Lt; a href = "usuario echo $ [ 'id']; & gt;" & gt; & lt;? Php echo $ usuario [ 'nombre']; ? & Gt; & lt; / a & gt; & Lt;? Php endforeach; ? & Gt; & Lt;? Php endforeach; ? & Gt; & Lt; / body & gt; & Lt; / html & gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / Badge_Exchange.php'; // Inicializar el servicio $ = nuevo servicio Badge_Exchange ( 'stackoverflow', null, 0); // Obtener la lista de no-etiqueta de insignias $ respuesta = Servicio $ - & gt; badgesName (); $ = $ Insignias respuesta - & gt; insignias; // Durante los primeros 5 insignias en la lista // conseguir que los usuarios otorgan esas placas para ($ x = 0; $ x & lt; 5; $ x +) {$ insignia insignias = & $ [$ x]; $ Insignia - & gt; usuarios = array (); $ Respuesta = $ servicio - & gt; insignia (insignia $ - & gt; badge_id); foreach ($ respuesta - & gt; los usuarios como $ usuario) {$ insignia - & gt; usuarios [] = array ( 'nombre' = & gt; $usuario - & gt; nombre_de_presentación, 'id' = & gt; $ Usuario - & gt; identidad de usuario ) ; }}? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; estilo & gt; & Lt; / Style & gt; & Lt; / Head & gt; & Lt; body & gt; & Lt; h2 & gt; Los usuarios de placa & lt; / H2 & gt; & Lt; ? php foreach ($ $ insignias como insignia):? & Gt; & Lt; h3 & gt; & Lt; ? php echo $ insignia - & gt; nombre ; ? & Gt; & Lt; / H3 & gt; & Lt; ? php foreach ($ insignia - & gt; los usuarios como $ usuario):? & Gt; & Lt; a href = "$ usuario de eco [ 'id']; & gt;" & Gt; & Lt; ? php echo $ usuario [ 'nombre']; ? & Gt; & Lt; / A & gt; & Lt; ? endforeach php; ? & Gt; & Lt; ? endforeach php; ? & Gt; & Lt; / Body & gt; & Lt; / Html & gt;
Esta secuencia de comandos para crear una primera lista de las insignias no de códigos utilizando el método badgesName (). A continuación, itera sobre los primeros cinco insignias en esta lista, y para cada placa, invoca el método de placas () y lo pasa el ID de placas como argumento. El valor devuelto por el método de placas () es una lista de usuarios que han recibido esa placa. Luego, esta información se formatea y se mostrará en la página, como se muestra a continuación:
jugar Tag
¿Por qué estoy hablando de insignias, usted pregunta? Pues bien, tal como se puede recuperar mensajes de un usuario, por lo que también se puede recuperar las insignias ganadas por un usuario, y las etiquetas que el usuario ha participado. API La Pila Exchange ofrece los / usuarios / id / insignias y / usuarios / id / Etiquetas métodos para recuperar esta información, y que están reflejadas en las usersBadges () y usersTags () en el paquete StackPHP. He aquí cómo usted puede utilizarlos:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = Nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Obtener el perfil de usuario // etiquetas e insignias // Introducir fluido válida aquí $ uid = 'xxxx'; $ User = $ servicio- & gt; userProfile ($ uid); $ tags = $ servicio- & gt; usersTags ($ uid); $ = $ insignias servicio- & gt; usersBadges ($ uid); ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; & gt estilo; mesa { border-collapse: colapso; } td { frontera: 1px negro sólido; } & Lt; / estilo de & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; Perfil de usuario & lt; / h2 & gt; & Lt; div & gt; & Lt; a href = "echo $ usuario- & gt; user_id; & gt;" & gt; & lt;? Php echo $ usuario- & gt; nombre_de_presentación; ? & Gt; & lt; / a & gt; & Lt; br / & gt; & Lt; & gt pequeña; Cuenta registrado en & lt; fecha de php echo ( 'd M y H: i', $ usuario- & gt; creation_date?); ? & Gt; & Lt; br / & gt; & Lt;? Php echo $ usuario- & gt; ubicación; ? & Gt; & Lt; br / & gt; & Lt;? Php echo$ Usuario- & gt; question_count; ? & Gt; respuestas | & Lt;? Php echo $ usuario- & gt; answer_count; ? & Gt; respuestas | & Lt;? Php echo $ usuario- & gt; reputación; ? & Gt; reputación & lt; br / & gt; & Lt;? Php echo $ usuario- & gt; up_vote_count; ? & Gt; por votos | & Lt;? Php echo $ usuario- & gt; down_vote_count; ? & Gt; votos Bajar & Lt; / small & gt; & Lt; / div & gt; & Lt;? Php if (is_array ($ insignias)): & gt;? & Lt; h2 & gt; insignias de usuario & lt; / h2 & gt; & Lt; tabla & gt; & Lt; tr & gt; & Lt; TH & gt; Rango & lt; / th & gt; & Lt; TH & gt; Tag & lt; / th & gt; & Lt; TH & gt; Descripción & lt; / th & gt; & Lt; TH & gt; Premio recuento de & lt; / th & gt; & Lt; / tr & gt; & Lt;? Php foreach ($ insignias como $ b):? & Gt; & Lt; php if ($ b- & gt; tag_based = '1'!):? & Gt; & Lt; tr & gt; & Lt; td & gt; & lt;? Php echo $ b- & gt; rango; ? & Gt; & lt; / td & gt; & Lt; td & gt; & lt;? Php echo $ b- & gt; nombre; ? & Gt; & lt; / td & gt; & Lt; td & gt; & lt;? Php echo $ b- & gt; Descripción; ? & Gt; & lt; / td & gt;& Lt; td & gt; & lt;? Php echo $ b- & gt; award_count; ? & Gt; & lt; / td & gt; & Lt; / tr & gt; & Lt;? Php endif; ? & Gt; & Lt;? Php endforeach; ? & Gt; & Lt; / table & gt; & Lt;? Php endif; ? & Gt; & Lt;? Php if (is_array ($ tag)): & gt;? & Lt; h2 & gt; etiquetas de usuario & lt; / h2 & gt; & Lt; ul & gt; & Lt;? Php foreach ($ etiquetas como $ t): & gt;? & Lt; li & gt; & lt;? Php echo $ t & gt; nombre; ? & Gt; (& Lt;? Php echo $ t & gt; contar; & gt;) & lt; / li & gt; & Lt;? Php endforeach; ? & Gt; & Lt; / ul & gt; & Lt;? Php endif; ? & Gt; & Lt; / body & gt; & Lt; / html & gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Obtener el perfil de usuario //etiquetas e insignias // entran UID válido aquí $ uid = 'xxxx'; $ User = $ servicio - & gt; userProfile ($ uid); $ Tags = Servicio $ - & gt; usersTags ($ UID); $ = $ insignias de servicio - & gt; usersBadges ($ UID); ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; estilo & gt; tabla {frontera - colapso: el colapso; } Td {border: 1px negro sólido; } & Lt; / Style & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; perfil & lt usuario; / H2 & gt; & Lt; div & gt; & Lt; a href = "echo $ usuario- & gt; user_id; & gt;" & Gt; & Lt; ? php echo $ usuario - & gt; mostrar nombre ; ? & Gt; & Lt; / A & gt; & Lt; br / & gt; & Lt; pequeña & gt; Cuenta registrado en & lt; ? php fecha de eco ( "D M h: i ', $ usuario - & gt; creation_date); ? & Gt; & Lt; br / & gt; & Lt; ? php echo $ usuario - & gt; ubicación ; ? & Gt; & Lt; br / & gt; & Lt; ? php echo $ usuario - & gt; question_count; & Lt; ? php echo $ b - & gt; rango; ? & Gt; & Lt; / Td & gt; & Lt; td & gt; & Lt; ? php echo $ b - & gt; nombre ; ? & Gt; & Lt; / Td & gt; & Lt; td & gt; & Lt; ? php echo $ b - & gt; Descripción; ? & Gt; & Lt; / Td & gt; & Lt; td & gt; & Lt; ? php echo $ b - & gt; award_count; ? & Gt; & Lt; / Td & gt; & Lt; / Tr & gt; & Lt; ? endif php; ? & Gt; & Lt; ? endforeach php; ? & Gt; & Lt; / Table & gt; & Lt; ? endif php; ? & Gt; & Lt; ? php if ($ is_array (etiquetas)):? & Gt; & Lt; h2 & gt; etiquetas & lt usuario; / H2 & gt; & Lt; ul & gt; & Lt; ? php foreach ($ etiquetas como $ t):? & Gt; & Lt; li & gt; & Lt; ? php echo $ t - & gt; nombre ; ? & Gt; (& Lt;? Php echo $ t - & gt;? Recuento; & gt;) & lt; / Li & gt; & Lt; ? endforeach php; ? & Gt; & Lt; / Ul & gt; & Lt; ? endif php; ? & Gt; & Lt; / Body & gt; & Lt; / Html & gt;
El método usersBadges () devuelve una matriz de objetos que representan las insignias ganadas por el usuario. Como se señala en la página anterior, una insignia puede ser o bien no basada en la etiqueta basada en etiquetas o; esta distinción se observa en la propiedad 'tag_based'. La secuencia de comandos anterior muestra sólo insignias no basado en la etiqueta-del usuario, incluyendo el nombre de placas, la razón de su premio, y el número de veces que se le concedió.
Los usersTags () devuelve una lista de todas las etiquetas que un usuario ha participado en las etiquetas identifican las áreas clave de una pregunta.; cuando se une con un usuario, que sirven como una indicación de la profundidad y amplitud de la actividad de ese usuario. El valor de retorno de los usersTags () método es similar a la de las etiquetas () método: una lista de etiquetas que el usuario ha publicado una pregunta, respuesta o comentario en, junto con un recuento.
Esto es lo que la salida será similar a:
El tiempo vuela cuando te estas divirtiendo
Uno de los métodos más interesantes en el paquete StackPHP es el método usersTimeline (). Este método devuelve una línea de tiempo de actividad del usuario dentro de un período definido, y se corresponde con el punto final de la API / usuarios / id / línea de tiempo. Se acepta un identificador de usuario y una matriz que contiene una lista de filtros, de los cuales los más útiles son el 'fromdate' y 'filtros' todate.
La mejor manera de explicar cómo funciona este método es con un ejemplo:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = Nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Obtener la línea de tiempo para el usuario últimas 24 horas // Introducir fluido válida aquí $ uid = 'xxxx'; $ = De mktime () - (24 * 60 * 60); $ A = mktime (); $ items = $ servicio- & gt; usersTimeline ($ uid, array ( 'Fromdate' = & gt; $ A partir, 'Todate' = & gt; $ a )); print_r ($ artículos); ? & Gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Obtener la línea de tiempo para el usuario últimas 24 horas // introducir fluido válida aquí $ uid = 'xxxx'; $ = De mktime () - (24 * 60 * 60); $ A = mktime (); $ items = $ servicio - & gt; usersTimeline ($ uid, array ( 'fromdate' = & gt; $ de, 'todate' = & gt; $ a)); print_r ($ artículos); ? & gt
El valor de retorno del objeto usersTimeline () es una corriente temporal de los eventos generados por un usuario en particular. Estos eventos se representan como elementos de una matriz, como se muestra a continuación:
Como se puede ver, cada elemento representa un evento específico en la corriente temporal. El principal atribuye a estar al tanto de aquí son los siguientes:
- La clave 'timeline_type' especifica el tipo de evento. Los valores posibles son 'comentario', 'askoranswered', 'insignia', 'revisión', o 'aceptado';
- La clave especifica en 'post_type' si el evento se llevó a cabo en una pregunta o una respuesta;
- La clave 'post_id' especifica el identificador de mensaje relacionado con el evento;
- La clave 'creation_date' especifica la fecha y hora del evento;
- La clave 'Descripción' especifica el título de la pregunta en la que se produjo el evento.
Con toda esta información a la mano, es posible construir una línea de tiempo de actividad del usuario entre un período de tiempo especificado. He aquí un ejemplo:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = Nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Obtener la línea de tiempo para el usuario últimas 24 horas // Introducir fluido válida aquí $ uid = 'xxxx'; $ = De mktime () - (24 * 60 * 60); $ A = mktime (); $ items = $ servicio- & gt; usersTimeline ($ uid, array ( 'Fromdate' = & gt; $ A partir, 'Todate' = & gt; $ a )); ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; & gt estilo; mesa { border-collapse: colapso; } td { frontera: 1px negro sólido; padding: 4 píxeles; } & Lt; / estilo de & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; línea de tiempo del usuario & lt; / h2 & gt; & Lt;? Php if (artículos is_array ($)): & gt;? & Lt; tabla & gt; & Lt; tr & gt; & Lt; td & gt; tiempo & lt; / td & gt; & Lt; td & gt; Actividad & lt; / td & gt; & Lt; / tr & gt; (Artículos como $ $ i) php foreach; & lt:?? & Gt; & Lt;? Php switch ($ i- & gt; timeline_type) {caso "comentario": $ Cadena = 'comentario Publicado el "& lt; a href =". $ I- & gt; post_id. ' "& Gt;" . $ I- & gt; Descripción. "& Lt; / a & gt;" "; descanso; caso 'revisión': $ Cadena = 'Publicado en la revisión "& lt; a href =". $ I- & gt; post_id. ' "& Gt;" . $ I- & gt; Descripción. "& Lt; / a & gt;" "; descanso; caso 'askoranswered': $ Cadena = 'publicación'. $ I- & gt; post_type. "En" & lt; a href = ". $ I- & gt; post_id. ' "& Gt;" . $ I- & gt; Descripción. "& Lt; / a & gt;" "; descanso; caso 'insignia': $ Cadena = 'Se concede insignia:'. $ I-> detalle; descanso; // y así... } ? & Gt; & Lt; tr & gt; & Lt; td & gt; & lt;? Php echo fecha ( 'd M', $ i- & gt; creation_date); ? & Gt; & lt; / td & gt; & Lt; td & gt; & lt;? Php echo $ cadena; ? & Gt; & lt; / td & gt; & Lt; / tr & gt; & Lt;? Php endforeach; ? & Gt; & Lt; / table & gt; & Lt;? Php endif; ? & Gt;& Lt; / body & gt; & Lt; / html & gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Obtener la línea de tiempo para el usuario últimas 24 horas // introducir fluido válida aquí $ uid = 'xxxx'; $ = De mktime () - (24 * 60 * 60); $ A = mktime (); $ items = $ servicio - & gt; usersTimeline ($ uid, array ( 'fromdate' = & gt; $ de, 'todate' = & gt; $ a)); ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; estilo & gt; tabla {frontera - colapso: el colapso; } Td {border: 1px negro sólido; padding: 4 píxeles; } & Lt; / Style & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; descanso ; caso 'insignia': $ cadena = 'Se concede insignia:'. $ I -> detalle; descanso ; // y así... } ? & Gt; & Lt; tr & gt; & Lt; td & gt; & Lt; ? php fecha de eco ( 'd M', $ i - & gt; creation_date); ? & Gt; & Lt; / Td & gt; & Lt; td & gt; & Lt; ? php echo $ cadena; ? & Gt; & Lt; / Td & gt; & Lt; / Tr & gt; & Lt; ? endforeach php; ? & Gt; & Lt; / Table & gt; & Lt; ? endif php; ? & Gt; & Lt; / Body & gt; & Lt; / Html & gt;
He aquí un ejemplo de lo que el resultado sería algo así como:
El juego de números
El API Stack Exchange también proporciona un método estadísticas (), un método de utilidad interesante descubrir información sobre el sitio. Los datos suministrados por este método incluye exquisiteces como el número total de preguntas y sin respuestas, el número total de votos, el número total de tarjetas emitidas, el número de preguntas enviadas por minuto, las páginas vistas por día, y así sucesivamente.
Aquí hay un ejemplo que ilustra cómo se puede utilizar este método:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = Nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Estadísticas sistema Get Estadísticas $ = $ servicio- & gt; Estadísticas (); print_r ($ estadísticas); ? & Gt; 1 2 3 4 5 6 7 8 9 10 11 12 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Obtener sistema de estadísticas estadísticas $ = $ servicio - & gt; Estadísticas (); print_r ($ estadísticas); ? & Gt;
He aquí una muestra de los datos devueltos:
Usted puede envolver estos datos en algún formato para que sea más legible:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = Nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Estadísticas sistema Get Estadísticas $ = $ servicio- & gt; Estadísticas (); $ Vars = get_object_vars ($ stats- & gt; estadísticas [0]); ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; & gt estilo; mesa { border-collapse: colapso; } td { frontera: 1px negro sólido; padding: 4 píxeles; } & Lt; / estilo de & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; estadísticas del sistema & lt; / h2 & gt; & Lt; tabla & gt; & Lt; tr & gt; & Lt; td & gt; Attribute & lt; / td & gt; & Lt; td & gt; valor & lt; / td & gt; & Lt; / tr & gt; & Lt;? Php foreach ($ vars como $ clave = & gt; valor $):? & Gt; & Lt;? Php if (is_object (valor $)!):?? & Gt; & Lt; tr & gt; & Lt; td & gt; & lt;? Php echo ucfirst (str_replace ( '_', '', $ key)); ? & Gt; & lt; / td & gt; & Lt; td & gt; & lt;? Php echo $ valor; ? & Gt; & lt; / td & gt;& Lt; / tr & gt; & Lt;? Php endif; ? & Gt; & Lt;? Php endforeach; ? & Gt; & Lt; / table & gt; & Lt; / body & gt; & Lt; / html & gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = nuevo servicio User_Exchange ( 'stackoverflow', null, 0); // Obtener sistema de estadísticas estadísticas $ = $ servicio - & gt; Estadísticas (); $ Vars = get_object_vars (estadísticas $ - & gt; estadísticas [0]); ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; estilo & gt; tabla {frontera - colapso: el colapso; } Td {border: 1px negro sólido; padding: 4 píxeles; } & Lt; / Style & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; Estadísticas & lt sistema; / H2 & gt; & Lt; table & gt; & Lt; tr & gt; & Lt; td & gt;Atributo & lt; / Td & gt; & Lt; td & gt; Valor & lt; / Td & gt; & Lt; / Tr & gt; & Lt; ? php foreach ($ vars como $ clave = & gt; $ valor):? & Gt; & Lt; ? php if (is_object (valor $)!):? & Gt; & Lt; tr & gt; & Lt; td & gt; & Lt; ? php echo ucfirst (str_replace ( '_', '', $ key)); ? & Gt; & Lt; / Td & gt; & Lt; td & gt; & Lt; ? php echo $ valor; ? & Gt; & Lt; / Td & gt; & Lt; / Tr & gt; & Lt; ? endif php; ? & Gt; & Lt; ? endforeach php; ? & Gt; & Lt; / Table & gt; & Lt; / Body & gt; & Lt; / Html & gt;
Aquí está el resultado:
Pasando la página
Hasta ahora, todos los ejemplos que he visto han mostrado una sola página de datos - por ejemplo, los primeros 20 usuarios, o los primeros 5 respuestas a una pregunta. Sin embargo, si usted está construyendo una aplicación web, por lo general desea que los usuarios puedan acceder a las páginas restantes de un conjunto de resultados también. La forma más sencilla de hacer esto es envolviendo un componente de paginación, como PEAR Pager o Zend_Paginator, todo el conjunto de resultados de una llamada al método.
La mayoría de los métodos de la API Stack Exchange admiten parámetros adicionales para la paginación: el parámetro 'pagesize' especifica el número de elementos por página del conjunto de resultados, mientras que el parámetro "página" especifica qué página va a recuperar.
El siguiente es un ejemplo del uso de estos parámetros en combinación con el paquete de PEAR Pager para agregar la paginación cuando se muestra la lista de preguntas sin respuesta:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / Post_Exchange.php'; require_once 'Pager / Pager.php'; // Inicializar el servicio $ = Nuevo servicio Post_Exchange ( 'stackoverflow', null, 0); // Número determinado de objetos por página de solicitud $ ItemsPerPage = isset ($ _ GET [ 'c'])? (Int) htmlentities ($ _ GET [ 'c']): 20; // Calcular requerido desplazamiento inicial del número de página actual $ CurrentPage = isset ($ _ GET [ 'pageID'])? (Int) htmlentities ($ _ GET [ 'pageID']): 1; // Obtener el conjunto de resultados de la página actual $ = $ preguntas servicio- & gt; sin respuesta (array ( 'Etiquetados' = & gt; 'Php', "Página" = & gt; $ CurrentPage, 'Pagesize' = & gt; $ itemsPerPage )); $ Count = $ servicio- & gt; TotalItems (); // Generar objeto localizador // Establecer el total de artículos y omitir los datos de la página actual // Con el fin de conseguir enlaces de página correctos $ Params = array ( "Modo" = & gt; 'Corredizo', 'PerPage' = & gt; $ ItemsPerPage, "Delta" = & gt; 2, '' TotalItems = & gt; $ Recuento, ); $ Localizador = &Pager :: factory ($ params); // Obtener enlaces para la página actual $ = $ enlaces pager- & gt; getLinks (); // Ahora establecer datos de la página y reconstruir el localizador $ params [ 'itemData'] = $ preguntas; $ Pager- & gt; setOptions ($ params); $ Pager- & gt; construir (); ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; & gt estilo; .title { color verde; } & Lt; / estilo de & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; preguntas sin respuesta & lt; / h2 & gt; & Lt; ul & gt; & Lt;? Php foreach ($ pager- & gt; getPageData () como $ q):? & Gt; & Lt; li & gt; & Lt; p & gt; & Lt; a href = "echo $ Q & gt; question_id; & gt;" & gt; & lt;? Php echo $ Q & gt; título; ? & Gt; & lt; / a & gt; & Lt; br / & gt; & Lt; & gt pequeña; ? Creado en & lt; fecha de php echo ( 'd M y H: i', $ q- & gt; creation_date); ? & Gt; | & Lt;? Php echo $ Q & gt; answer_count; ? & Gt; respuestas & lt; br / & gt; Etiquetas: & lt;? Php echo implosión ( ',', $ q- & gt; etiquetas); ? & Gt; & Lt; / small & gt; & Lt; / p & gt; & Lt; / li & gt; & Lt;? Php endforeach;? & Gt; & Lt; / ul & gt; & Lt; div id = "enlaces" & gt; Páginas: & lt;? Php echo $ enlaces [ 'todos']; ? & Gt; & Lt; / div & gt; & Lt; / body & gt; & Lt; / html & gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / Post_Exchange.php'; requerir _once 'Pager / Pager.php'; // Inicializar el servicio $ = nuevo servicio Post_Exchange ( 'stackoverflow', null, 0); // Establecer el número de artículos por la página de solicitud de $ itemsPerPage = isset ($ _GET [ 'c'])? (Int) htmlentities ($ _GET [ 'c']): 20; // Calcular requerido desplazamiento inicial del número de página actual $ currentPage = isset ($ _GET [ 'pageID'])? (Int) htmlentities ($ _GET [ 'pageID']): 1; // Obtener el conjunto de resultados para los actuales $ page = $ preguntas de servicio - & gt; sin respuesta (array ('Etiquetados' = & gt; 'Php', 'página' = & gt; $ CurrentPage, 'pagesize' = & gt; $ ItemsPerPage)); $ Count = $ servicio - & gt; articulos totales ( ) ; // // Generar objeto localizador ajustar elementos en total y omitir datos de la página real // con el fin de conseguir enlaces de la página correctas $ params = array ( 'modo' = & gt; 'deslizante', 'PerPage' = & gt; $ itemsPerPage, "delta" = & gt; 2, '' TotalItems = & gt; $ contar,); $ Localizador = & Pager :: factory ($ params); // Obtener enlaces para la página actual $ links = $ buscapersonas - & gt; getLinks (); // Establece ahora datos de la página y reconstruir los buscapersonas $ params [ 'itemData'] = $ preguntas; $ Localizador - & gt; setOptions ($ params); $ Localizador - & gt; construir ( ) ; ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; estilo & gt; . título {color: green; } & Lt; / Style & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; preguntas sin respuesta; & lt / H2 & gt; & Lt; ul & gt; & Lt;? php foreach ($ localizador - & gt; getPageData () como $ q):? & Gt; & Lt; li & gt; & Lt; p & gt; & Lt; a href = "echo $ Q & gt; question_id; & gt;" & Gt; & Lt; ? php echo $ q - & gt; título; ? & Gt; & Lt; / A & gt; & Lt; br / & gt; & Lt; pequeña & gt; Creado en & lt; ? php fecha de eco ( "D M h: i ', $ q - & gt; creation_date); ? & Gt; | & Lt; ? php echo $ q - & gt; answer_count; ? & Gt; respuestas & lt; br / & gt; Etiquetas: & lt; ? php echo implosión ( ',', $ q - & gt; etiquetas); ? & Gt; & Lt; / Small & gt; & Lt; / P & gt; & Lt; / Li & gt; & Lt; ? endforeach php; ? & Gt; & Lt; / Ul & gt; & Lt; div id = "enlaces" & gt; Páginas: & lt; ? php echo $ enlaces [ 'todos']; ? & Gt; & Lt; / Div & gt; & Lt; / Body & gt; & Lt; / Html & gt;
Esta secuencia comienza incluyendo el archivo de clase Pager, y establecer el número de elementos por página y número de página actual a partir de variables GET en la cadena URL. Estos valores se incorporan en la respuesta llamada al método () para recuperar el correspondiente "página" de los datos de la API Pila de Exchange. Cada llamada a la API también incluye un recuento del número total de registros coincidentes, esta información también se extrae y se almacena en la variable $ recuento, ya que es un insumo crítico para determinar el número total de páginas.
Una instancia de la clase Pager continuación, se crea a través del método de la clase "fábrica (), y se pasa una matriz asociativa de los parámetros de configuración. Esto es lo que hace cada uno de ellos:
- El parámetro "modo" dice a la clase de buscapersonas si los enlaces de la página deben ser generados en "saltar" o el modo "deslizamiento".
- El parámetro 'PerPage' indica el número de elementos del conjunto de datos se van a mostrar por página de datos.
- El parámetro '' TotalItems especifica el número total de elementos en el conjunto de datos.
- El parámetro "delta" controla la cantidad de números de página aparecen en la barra de paginación.
- El parámetro 'itemData' especifica el conjunto de datos que se quiere localizar.
Con toda esta información a la mano, los getLinks () método es capaz de devolver una matriz de enlaces a los primeros, últimos, anteriores y siguientes páginas. Este método getLinks () es importante porque genera automáticamente todo el código HTML para los enlaces de navegación de páginas, como una matriz. Para mostrar estos enlaces en la vista, es necesario simplemente salida de los contenidos de clave 'all' de esta matriz.
Una vez que se generan los enlaces, el conjunto de datos actual se pasa a la clase Pager vía el parámetro 'itemData' y el objeto se reconstruye. Este proceso de dos pasos es necesario porque si tuviéramos que proporcionar el conjunto de datos en el primer caso, el número real de elementos en el conjunto de datos para prevalecer sobre el valor del parámetro 'TotalItems', por lo que es imposible generar correctamente el juego completo de enlaces de la página.
He aquí un ejemplo de la salida:
Si prefiere Zend_Paginator a PERA Pager, es posible replicar lo anterior se utiliza el adaptador de Null Zend_Paginator para crear la barra de paginación con los enlaces apropiados. Esto es lo que esa versión del código se vería así:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / Post_Exchange.php'; require_once 'Zend / Cargador / Autoloader.php'; // Registrar cargador automático $ Loader = Zend_Loader_Autoloader :: getInstance (); // Inicializar el servicio $ = Nuevo servicio Post_Exchange ( 'stackoverflow', null, 0); // Configurar número de página de la solicitud $ CurrentPage = isset ($ _ GET [ 'p'])? (Int) htmlentities ($ _ GET [ 'p']): 1; // Número determinado de objetos por página de solicitud $ ItemsPerPage = isset ($ _ GET [ 'c'])? (Int) htmlentities ($ _ GET [ 'c']): 20; // Obtener el conjunto de resultados de la página actual $ = $ preguntas servicio- & gt; sin respuesta (array ( 'Etiquetados' = & gt; 'Php', "Página" = & gt; $ CurrentPage, 'Pagesize' = & gt; $ itemsPerPage )); $ Count = $ servicio- & gt; TotalItems (); // Inicializar localizador con el conjunto de datos $ Localizador = new Zend_Paginator (nuevaZend_Paginator_Adapter_Null ($ count)); $ Pager- & gt; setCurrentPageNumber ($ currentPage); $ Pager- & gt; setItemCountPerPage ($ itemsPerPage); $ Pager- & gt; setPageRange (5); // Obtener datos de localización $ = $ páginas pager- & gt; getPages ( 'deslizante'); // Crear enlaces de la página $ Pagelinks = array (); $ Separador = '| '; // Construir el primer vínculo $ pagelinks [] = getLink ($ páginas- & gt; en primer lugar, $ itemsPerPage, '& lt; & lt;'); // Crear el vínculo anterior if (! empty ($ páginas- & gt; anterior)) { $ pagelinks [] = getLink ($ páginas- & gt; anterior, $ itemsPerPage, '& lt;'); } // ficha Generar vínculos de número foreach ($ páginas- & gt; pagesInRange como $ x) { if ($ x == $ páginas- & gt; actual) { $ pagelinks [] = $ x; } Else { $ pagelinks [] = getLink ($ x, $ itemsPerPage, $ x); } } // Crear el vínculo siguiente if (empty ($ páginas- & gt;! siguiente)) { $ pagelinks [] = getLink ($ páginas- & gt; a continuación, $ itemsPerPage, '& gt;'); } // Construir última vínculo $ pagelinks [] = getLink ($ páginas- & gt; pasado, $ itemsPerPage,'& Gt; & gt;'); getLink funcionar ($ página, $ itemsPerPage, $ etiqueta) { $ Q = http_build_query (array ( 'P' = & gt; La página de $, 'C' = & gt; $ itemsPerPage ) ); retorno "& lt; a href = \" $ q \? "& gt; $ etiqueta & lt; / a & gt;"; } ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; & gt estilo; .title { color verde; } & Lt; / estilo de & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; preguntas sin respuesta & lt; / h2 & gt; & Lt; ul & gt; & Lt;? Php foreach ($ preguntas como $ q): & gt;? & Lt; li & gt; & Lt; p & gt; & Lt; a href = "echo $ Q & gt; question_id; & gt;" & gt; & lt;? Php echo $ Q & gt; título; ? & Gt; & lt; / a & gt; & Lt; br / & gt; & Lt; & gt pequeña; ? Creado en & lt; fecha de php echo ( 'd M y H: i', $ q- & gt; creation_date); ? & Gt; | & Lt;? Php echo $ Q & gt; answer_count; ? & Gt; respuestas & lt; br / & gt; Etiquetas: & lt;? Php echo implosión ( ',', $ q- & gt; etiquetas); ? & Gt; & Lt; / small & gt; & Lt; / p & gt; & Lt; / li & gt; & Lt;? Php endforeach; ? & Gt;& Lt; / ul & gt; & Lt; div id = "enlaces" & gt; Páginas: & lt;? Php echo implosionar (pagelinks $, $ separadores); ? & Gt; & Lt; / div & gt; & Lt; / body & gt; & Lt; / html & gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / Post_Exchange.php'; requerir _once 'Zend / Cargador / Autoloader.php'; // Registrar cargador automático $ loader = Zend_Loader_Autoloader :: getInstance (); // Inicializar el servicio $ = nuevo servicio Post_Exchange ( 'stackoverflow', null, 0); // Establecer el número de página de solicitud de $ currentPage = isset ($ _GET [ 'p'])? (Int) htmlentities ($ _GET [ 'p']): 1; // Establecer el número de artículos por la página de solicitud de $ itemsPerPage = isset ($ _GET ['C'])? (Int) htmlentities ($ _GET [ 'c']): 20; // Obtener el conjunto de resultados para los actuales $ page = $ preguntas de servicio - & gt; sin respuesta (array ( 'etiquetados' = & gt; 'php', 'página' = & gt; $ currentPage, 'pagesize' = & gt; $ itemsPerPage)); $ Count = $ servicio - & gt; articulos totales ( ) ; // Inicializar localizador con el conjunto de datos $ = localizador nueva Zend_Paginator (nueva Zend_Paginator_Adapter_Null ($ count)); $ Localizador - & gt; setCurrentPageNumber ($ currentPage); $ Localizador - & gt; setItemCountPerPage ($ itemsPerPage); $ Localizador - & gt; setPageRange (5); // Obtener los datos de localización páginas $ = $ localizador - & gt; getPages ( 'correderas'); // Crear enlaces de la página pagelinks $ = array (); $ Separador = '| '; // Construir las primeras página de enlaces $ pagelinks [] = ($ getLink páginas - & gt; en primer lugar, $ itemsPerPage, '& lt; & lt;'); // Crear el vínculo anterior if (empty ($ páginas - & gt;! Anterior)) {$ pagelinks [] = ($ getLink páginas - & gt; anterior, $ itemsPerPage,'& Lt;' ); } // Número de compilación página de enlaces foreach ($ páginas - & gt; pagesInRange como $ x) {if ($ x == $ páginas - & gt; actual) {$ pagelinks [] = $ x; } Else {$ pagelinks [] = getLink ($ x, $ itemsPerPage, $ x); }} // Ejecución siguiente vínculo si (($ páginas vacías - & gt;! Siguiente)) {$ pagelinks [] = ($ getLink páginas - & gt; a continuación, $ itemsPerPage, '& gt;'); } // Construir última página del enlace $ pagelinks [] = ($ getLink páginas - & gt; pasado, $ itemsPerPage, '& gt; & gt;'); getLink funcionar (página $, $ itemsPerPage, $ etiqueta) {$ q = http_build_query (array ( 'p' = & gt; $ página, 'c' = & gt; $ itemsPerPage)); retorno "& lt; a href = \" $ q \? "& gt; $ etiqueta & lt; / a & gt;" ; }? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; estilo & gt; . título {color: green; } & Lt; / Style & gt; & Lt; head & gt; & Lt; body & gt; & lt; h2 & gt; preguntas sin respuesta; & lt / H2 & gt; & Lt; ul & gt; & Lt; ? php foreach ($ preguntas como $ q):? & Gt; & Lt; li & gt; & Lt; p & gt; & Lt; a href = "echo $ Q & gt; question_id; & gt;" & Gt; & Lt; ? php echo $ q - & gt; título; ? & Gt; & Lt; / A & gt; & Lt; br / & gt; & Lt; pequeña & gt; Creado en & lt; ? php fecha de eco ( "D M h: i ', $ q - & gt; creation_date); ? & Gt; | & Lt; ? php echo $ q - & gt; answer_count; ? & Gt; respuestas & lt; br / & gt; Etiquetas: & lt; ? php echo implosión ( ',', $ q - & gt; etiquetas); ? & Gt; & Lt; / Small & gt; & Lt; / P & gt; & Lt; / Li & gt; & Lt; ? endforeach php; ? & Gt; & Lt; / Ul & gt; & Lt; div id = "enlaces" & gt; Páginas: & lt; ? implosión php echo ($ pagelinks, $ separador); ? & Gt; & Lt; / Div & gt; & Lt; / Body & gt; & Lt; / Html & gt;
Esta secuencia de comandos comienza con la creación del Zend cargador automático, que se encarga de cargar automáticamente los componentes de Zend Framework, según sea necesario. A continuación, inicializa una instancia de Zend_Paginator y pasa el constructor de objetos de una instancia del adaptador Null, que es a su vez inicializado con el recuento devuelto por la llamada a la API del servicio.
La página actual y el número de elementos a mostrar por página se pueden ajustar mediante setCurrentPageNumber del objeto Zend_Paginator () y métodos setItemCountPerPage (). En el ejemplo anterior, estos valores se obtienen de la propia solicitud, a través de la matriz $ _GET.
Los getPages () devuelve un objeto que contiene varios bits de información útil: el número total de páginas en el conjunto de datos; los primeros, últimos, actuales, anteriores y siguientes números de página; los números de página de la página actual "ventana"; el número total de elementos en el conjunto de datos; y el número de elementos por página. Esta información es muy útil, ya que con sólo unas pocas líneas de código, se puede convertir en un conjunto de enlaces de páginas que permiten al usuario navegar a través del conjunto de datos. En el ejemplo anterior, un bucle se utiliza para crear estos enlaces en base a la información proporcionada por el método () getPages.
He aquí una muestra de la salida:
Vaca caché
El paquete StackPHP también proporciona un mecanismo de caché integrada, que puede ser útil para las aplicaciones web de alto tráfico. Este subsistema de almacenamiento en caché requiere la extensión SQLite3 para ser instalado, y se puede activar con sólo especificar un valor de tiempo de espera de caché (en minutos) como el tercer argumento del constructor de objeto de servicio. El directorio de caché se creará en el directorio de trabajo actual de la secuencia de comandos, suponiendo que el servidor web tiene permisos de creación de archivo.
Como ejemplo, consideremos el siguiente ejemplo, que revisa el primer guión en este capítulo para presentar una lista de usuarios con el almacenamiento en caché:
& Lt;? Php // clases de carga requerida require 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = Nuevo servicio User_Exchange ( 'stackoverflow', null, 30); // Obtener la lista de usuarios $ = $ Servicio- usuarios & gt; ListUsers (array ( 'especie' = & gt; "reputación", "orden" = & gt; 'desc')); ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; & gt estilo; .title { color verde; } & Lt; / estilo de & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; Usuarios & lt; / h2 & gt; & Lt; foreach PHP ($ usuarios como $ U): & gt;? & Lt; p style = "border-bottom: 2px negro salpicado;" & gt; & Lt; div style = "float: left; anchura: 40%" & gt; & Lt; a href = "echo $ U & gt; user_id; & gt;" & gt; & lt;? Php echo $ U & gt; nombre_de_presentación; ? & Gt; & lt; / a & gt; & lt; br / & gt; & Lt; & gt pequeña; Cuenta registrado en & lt; fecha de php echo ( 'd M y H: i', $ U & gt; creation_date?); ? & Gt; & Lt; br / & gt; & Lt;? Php echo $ U & gt; ubicación; ? & Gt; & Lt; br / & gt; & Lt;? Php echo $ U & gt; question_count; ? & Gt;respuestas | & Lt;? Php echo $ U & gt; answer_count; ? & Gt; respuestas | & Lt;? Php echo $ U & gt; reputación; ? & Gt; reputación & lt; br / & gt; & Lt;? Php echo $ U & gt; up_vote_count; ? & Gt; por votos | & Lt;? Php echo $ U & gt; down_vote_count; ? & Gt; votos Bajar & Lt; / small & gt; & Lt; / div & gt; & Lt; div style = "float: right; anchura: 60%" & gt; Más información & lt; br / & gt; & Lt; & gt pequeña; & Lt;? Php echo $ U & gt; ABOUT_ME; ? & Gt; & Lt; / small & gt; & Lt; / div & gt; & Lt; / p & gt; & Lt; br style = "clear: both" / & gt; & Lt;? Php endforeach; ? & Gt; & Lt; / body & gt; & Lt; / html & gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 & lt; ? clases de carga requerida php // requieren 'StackPHP / Stack_Base.php'; require 'StackPHP / User_Exchange.php'; // Inicializar el servicio $ = nuevo servicio User_Exchange ( 'stackoverflow', null, 30); // Obtener usuarioLista de usuarios $ = Servicio $ - & gt; ListUsers (array ( 'especie' = & gt; "reputación", "orden" = & gt; 'desc')); ? & Gt; & Lt; html & gt; & Lt; head & gt; & Lt; estilo & gt; . título {color: green; } & Lt; / Style & gt; & Lt; head & gt; & Lt; body & gt; & Lt; h2 & gt; Usuarios & lt; / H2 & gt; & Lt; ? php foreach ($ usuarios como $ U):? & Gt; & Lt; p style = "border-bottom: 2px punteado negro;" & Gt; & Lt; div style = "float: left; anchura: 40%" & gt; & Lt; a href = "echo $ U & gt; user_id; & gt;" & Gt; & Lt; ? php echo $ u - & gt; mostrar nombre ; ? & Gt; & Lt; / A & gt; & Lt; br / & gt; & Lt; pequeña & gt; Cuenta registrado en & lt; ? php fecha de eco ( "D M h: i ', $ u - & gt; creation_date); ? & Gt; & Lt; br / & gt; & Lt; ? php echo $ u - & gt; ubicación ; ? & Gt; & Lt; br / & gt; & Lt; ? php echo $ u - & gt; question_count; ? & Gt;respuestas | & Lt; ? php echo $ u - & gt; answer_count; ? & Gt; respuestas | & Lt; ? php echo $ u - & gt; reputación; ? & Gt; reputación & lt; br / & gt; & Lt; ? php echo $ u - & gt; up_vote_count; ? & Gt; por votos | & Lt; ? php echo $ u - & gt; down_vote_count; ? & Gt; abajo califican & lt; / Small & gt; & Lt; / Div & gt; & Lt; div style = "float: right; anchura: 60%" & gt; Más información & lt; br / & gt; & Lt; pequeña & gt; & Lt; ? php echo $ u - & gt; sobre mi ; ? & Gt; & Lt; / Small & gt; & Lt; / Div & gt; & Lt; / P & gt; & Lt; br style = "clear: both" / & gt; & Lt; ? endforeach php; ? & Gt; & Lt; / Body & gt; & Lt; / Html & gt;
La primera vez que se ejecuta este script, se establecerá la caché, y verá un mensaje como este en la parte superior de la página de salida:
Todas las solicitudes posteriores (hasta que el tiempo de caducidad de caché) serán servidos desde la caché, y serán notificados con el siguiente mensaje en la parte superior de la página de salida:
Y eso es todo lo que tenemos tiempo para. Como este artículo de dos partes ha demostrado con suerte, hay mucho que puede hacer con la API Stack Exchange, y no se trata sólo de la recuperación de preguntas y respuestas. Un usuario de la API bien definida y flexible significa que se puede construir perfiles de usuario detallados y líneas de tiempo y también vincular a los usuarios a sus puestos y contribuciones al sitio. Añadir incorporada en caché basado en SQLite a nivel librería PHP y la capacidad de integrar fácilmente con los widgets de paginación comunes, y usted tiene todas las herramientas que necesita para construir un sólido, mashup rica en características. Darle un tiro en algún momento, y ver lo que piensa!
Los derechos de autor, 2011. Todos los derechos reservados.