Activa JavaScript para disfrutar de los vídeos de la Mediateca.
DWES. Unidad 8. Repaso OAuth 2.0. Google Tasks API REST. Diseño solución tarea Repartos. Parte 1 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Listo. Venga, pues empezamos con la tutoría de esta semana.
00:00:00
Una de las últimas ya que tenemos pendientes en cuanto a seguir avanzando en contenido.
00:00:08
Todavía nos quedan algunas más que intentaremos, no sé, resolver exámenes del año pasado
00:00:18
o atender a dudas, si queréis, ya petición un poco, lo que podáis incluso enviar al foro, si queréis que se trate algún tema, de cara ya a la preparación de la prueba, las dos pruebas que vamos a tener en junio.
00:00:23
Ordinaria, que la pruebe, pues estupendo, y si no, pues hay otra oportunidad en la convocatoria extraordinaria.
00:00:42
Vale, pues hoy voy a hacer un poquito de breve repaso de lo último que cubrimos en la tutoría pasada,
00:00:51
que fue una tutoría, bueno, pues también bastante tensa porque se incorporó bastante código de ejercicios
00:01:04
que utilizaban APIs REST
00:01:12
es otro tipo de
00:01:14
servicios web más
00:01:16
importantes y cabe que los servicios
00:01:17
SOAP porque
00:01:20
su uso es bastante más
00:01:21
más frecuente, más popular
00:01:24
con lo cual es un
00:01:27
un ámbito de
00:01:30
de
00:01:32
trabajo
00:01:34
que os animo a que
00:01:35
trabajéis
00:01:38
y lo preparéis bien
00:01:39
lo digo porque si trabajáis en la parte backend
00:01:44
mucho de la interfaz que vais a tener con el frontend va a ser
00:01:47
vía servicios REST y muchas veces
00:01:51
es obviamente responsabilidad del programador
00:01:54
del backend el programar esos APIs
00:01:57
para que desde el frontend se pueda hacer uso
00:02:00
de ellos y se pueda solicitar toda la información que luego
00:02:03
directamente desde Javascript
00:02:05
o normalmente utilizando frameworks de cliente, pues esa información se va convirtiendo en contenido
00:02:09
dentro de las páginas que hacen de interfaz con la aplicación del usuario.
00:02:16
Entonces, es un área que debéis de dominar o debéis de alguna manera al menos de conocer
00:02:23
de cara a que si ya vais a hacer prácticas o estáis aplicando por algún puesto,
00:02:28
Que tengáis más o menos unas ideas claras que podáis un poco demostrar durante una entrevista técnica o este tipo de interacciones que podéis tener a la hora de participar en un proceso de selección.
00:02:39
Vale, pues como parte de esta estrategia, de esta tecnología de API REST y también quizá como ejercicio integrador de todo lo que hemos hecho durante el curso, tenemos esta última tarea.
00:02:55
Es una tarea en la que se os da mucho código de partida, pero luego la tarea os pide que avancéis en esa funcionalidad, la tarea 8.
00:03:16
Es una tarea compleja porque ya aparte de que hay mucho código que se os da de base y que, bueno, es código que utiliza ya muchas cosas, como digo, porque hace un poco de tarea integradora.
00:03:26
Luego el código que se pide también es un código, bueno, que requiere también tiempo y requiere trabajarlo con calma.
00:03:39
Es una tarea que os puede llevar mucho tiempo, entonces tenéis que decidir un poco hasta dónde queréis llegar profundizando en ella.
00:03:51
Podéis ver la solución cuando se publique, incluso puedo adelantar la solución si es que tenéis interés en verla antes de que cumpla el plazo para de alguna manera tener esa posibilidad de hacer ese ejercicio de inspección de código.
00:03:59
pero yo recomiendo
00:04:16
que a lo mejor no
00:04:18
dediquéis
00:04:20
demasiado tiempo en poner esta aplicación
00:04:22
a punto
00:04:24
y dejéis quizá, o os quedéis
00:04:25
sin tiempo para un repaso más general
00:04:28
de, como digo
00:04:30
si trabajáis en esta aplicación vais a
00:04:32
estar practicando, cosas de
00:04:34
que prácticamente tenéis que
00:04:36
llevar a cabo, pero bueno, dejar
00:04:38
unos días pues para ver las otras
00:04:40
tareas que se han hecho en otras unidades, para
00:04:42
de los códigos que se han ido trabajando
00:04:44
para hacer un repaso un poquito
00:04:47
más completo, porque esta tarea os puede
00:04:48
consumir, yo creo
00:04:50
muchísimo del tiempo que os queda
00:04:52
de cara
00:04:54
o hasta el final del curso
00:04:55
tampoco quedan muchas semanas
00:04:58
menos de cuatro semanas para
00:05:00
la primera prueba
00:05:02
pero digo, es un código
00:05:03
muy interesante, y entonces esta tutoría
00:05:06
y quizá la tutoría
00:05:08
de la semana que viene, os voy
00:05:10
dar mucha información sobre esta sobre esta aplicación a nivel de código para que uno
00:05:12
entendáis el código bien 2 si tenéis dudas y hay algo que no entendéis podéis preguntarlo
00:05:19
sobre la explicación de la tarea y 3 si os animáis si la hacéis que si vais un poquito
00:05:24
colgados de tiempo os lo recomiendo del todo tengáis una más fácil de alguna manera aproximación
00:05:31
a resolverlo, porque voy a trabajar la versión final, la que os voy a presentar y voy a explicar
00:05:39
la versión de la solución. Entonces, esa es un poco la idea. Voy a empezar haciendo ese breve repaso
00:05:47
de lo que es out y viene un poco a establecer un método de autenticación para que una aplicación
00:05:58
pueda acceder a datos que son privados de un usuario de nuevo imaginaros una persona que
00:06:13
tiene sus fotos en un servicio de cloud obviamente el acceso a esas fotos es autenticado porque son
00:06:20
de ese usuario y cualquiera o él cuando quiere hacer cualquier operación de gestión sobre esas
00:06:32
fotos pues se le pide que se autentique qué ocurre cuando una aplicación para ofrecer un
00:06:39
servicio a ese mismo usuario viene bien por la operativa del servicio de esa aplicación tener
00:06:46
acceso a los datos privados que su usuario puede tener una red social en un repositorio suyo privado
00:06:55
en millones de aspectos en los que nosotros estamos dados de alta y con nuestra contraseña
00:07:03
podemos acceder en temas de banca temas de registros personales etcétera cómo se soluciona
00:07:08
ese problema no hay aplicaciones muy útiles muy interesantes que por como digo por la operativa
00:07:15
y por facilitar el acceso a esa información pues el usuario ve con buenos ojos que pueda
00:07:22
poder o que tenga posibilidad de acceder a esa información privada pero claro aquí hay
00:07:30
tres agentes principales, el usuario final, esa aplicación y el proveedor o el garante
00:07:37
de que esos datos no sean accedidos por otra persona o por otro mecanismo que no sea el
00:07:50
del usuario final. En este caso, como digo, Picasa o Google Fotos o Facebook o tu banco
00:07:57
o obviamente esa aplicación esa organización no puede o no debería permitir que cualquier
00:08:04
aplicación simplemente le solicitará los datos de un usuario y dárselo sin más o sea que hay
00:08:14
como 33 agentes ahí funcionando entonces para solucionar esto se diseña este protocolo esta
00:08:20
interacción a tres bandas que se llama oce en la versión 2.0 vale una que se llama open con
00:08:32
ex hay tenido varios nombres y de ahí ha salido off 1.0 y ahora la que un poco más revisado un
00:08:42
poco más segura supongo la verdad más seguridad es la versión de off 2.0 entonces vamos a ver
00:08:50
cómo funciona en un ejemplo muy alto nivel, luego vamos a ver lo específico con la aplicación que
00:08:56
os mostré y que espero que ya esta segunda vuelta ya tenga más sentido, cómo funciona la operativa
00:09:04
y luego vamos a verlo en un tercer escenario que es el código que utilizamos dentro de la tarea
00:09:12
para hacer esta operativa
00:09:20
vale, vamos a ver un poquito
00:09:22
vamos a explicar un poquito la tarea
00:09:24
contextualmente, un poquito para que entendáis
00:09:25
por qué es necesario utilizar
00:09:28
y luego vamos a ver el código
00:09:30
que hace que esto
00:09:31
funcione y que una aplicación
00:09:34
al principio la que vosotros vais a programar
00:09:35
va a poder acceder
00:09:38
a tareas
00:09:40
que es una aplicación
00:09:43
de Google
00:09:45
obviamente cada uno tiene la suya, si no quiere que nadie
00:09:45
acceda a ellas, es un
00:09:48
servicio de este tipo
00:09:50
en el que cada usuario puede
00:09:52
establecer su agenda
00:09:54
de tareas, pero
00:09:56
es una información privada
00:09:57
¿cómo puede ser que una aplicación
00:10:00
pueda acceder a esa
00:10:02
información privada de un usuario, siempre que le dé
00:10:04
permisos?
00:10:06
Vale, entonces vamos a ver con esos tres
00:10:08
escalones y espero que con esas
00:10:10
tres perspectivas sí que
00:10:12
más o menos entendamos
00:10:14
cómo
00:10:16
funciona esto y cómo se hace
00:10:17
y cómo lo podemos poner en marcha.
00:10:19
Vale, pues este es el ejemplo que
00:10:22
os planteaba la semana pasada.
00:10:23
Es una aplicación
00:10:26
que lo que hace es
00:10:27
coger fotos e imprimir
00:10:29
álbumes que te los envía a casa.
00:10:32
Se llama Printfast.
00:10:35
Y esta es la web
00:10:36
de esa aplicación.
00:10:37
Acordaros que tenemos las tres patas.
00:10:39
El usuario,
00:10:40
la aplicación,
00:10:42
que da un servicio a ese usuario
00:10:44
y el repositorio de la información privada de su usuario al que esta aplicación tiene que acceder para llevar a cabo el servicio.
00:10:46
Entonces, esta aplicación que imprime álbumes le viene muy bien poder acceder directamente a los repositorios de fotos del usuario.
00:10:55
En vez de pedirle al usuario que esté haciendo un upload de cada foto, que eso le podría llevar mucho tiempo al usuario,
00:11:05
más fácil quizá
00:11:12
que el usuario le dé acceso
00:11:14
a esas fotos en el cloud
00:11:16
suyas
00:11:18
y pues presentárselas aquí en pantalla
00:11:19
que simplemente con un clic
00:11:22
unas cajitas de verificación diga pues
00:11:24
quiero esta y quiero esta y quiero esta
00:11:26
mejora mucho el servicio
00:11:27
mejora muchísimo la experiencia del usuario
00:11:30
que no tener que estar haciendo
00:11:33
cargas de las
00:11:34
fotos que tiene localmente
00:11:36
en su PC
00:11:38
vale
00:11:39
pero para hacer esto tenemos que involucrar aplicas a google tenemos que involucrarle de
00:11:41
alguna manera porque es el quien finalmente va a dar servicio a print fast para acceder a las
00:11:50
fotos de vamos a llamarle john juan juan entonces como como hacemos imaginaros yo en un principio
00:11:57
esto es print fast es una página que viene del servidor de print fast vale y juan yo soy juan
00:12:04
como usuario final y le doy a mi casa seleccionó cuál es el proveedor donde tengo mis fotos que
00:12:11
quiero que sean parte del álbum digo mi casa que ocurre en ese momento en ese momento lo que hace
00:12:19
print fast es reenviar mi navegador empezar como siempre yo le doy a aquí a le doy a picasa esto
00:12:28
va al servidor de picasa efectivamente y del perdón estaba el servidor de print fast y
00:12:41
efectivamente y ese servidor le manda una redirección al navegador vale no le manda
00:12:48
ninguna respuesta como página cargada sino que le hace un header location una redirección
00:12:54
a donde apunta esa redirección ahora se apunta a picasa así que el navegador lo que hace es bueno
00:13:00
le pide eso a print fast pero lo que recibe de print fast no es ninguna página sino es un mensaje
00:13:07
de print fast diciendo oye para resolver esa petición tienes que mandar otra petición a esta
00:13:12
nueva url y esa url sí que va a google sí que va a picasa para lo que antes era google fotos
00:13:18
es como de repente el navegador con este con este juego de redirecciones que hace el servidor el
00:13:27
navegador de repente en vez de estar apuntando por infas se le pide que apunte a picas vale
00:13:33
entonces ya donde pues al servidor de out 2.0 de picasa a una url donde picasa o google va a
00:13:40
a establecer un diálogo de autenticación con ese usuario pero como veis print fast ahora está fuera
00:13:49
del bucle no nunca va a poder capturar ni mis claves ni mi nombre de usuario con picasa porque
00:13:56
ya print fast no está para nada en esta petición nuestra petición sale directamente de mi navegador
00:14:05
hacia Picasa, hacia Google
00:14:12
¿vale? ¿qué hace Google?
00:14:14
pues coge el control, Google coge el control
00:14:17
y empieza a establecer un diálogo
00:14:19
conmigo, vale, ante esa petición
00:14:20
que yo le envío, que es fruto de una redirección
00:14:24
que me ha hecho Printfast
00:14:26
él pues envía, empieza a
00:14:28
mandarme información a mi navegador
00:14:30
¿vale? páginas dinámicas
00:14:32
con las que yo interacciono, y esas páginas
00:14:34
lo que me van a pedir es permiso
00:14:36
para decir, oye, hay una
00:14:38
aplicación que se llama
00:14:40
print fast que quiere tener acceso a tus fotos vale y posiblemente alguna información más a tu
00:14:42
perfil incluida tu foto tu dirección de correo de siempre se va quedando ahí con datos tuyos
00:14:51
pero bueno imaginaros principalmente tus fotos le quieres dar acceso y aquí el usuario pues tiene
00:14:59
esa posibilidad de decir no de alguna manera pues no no no quiere utilizar servicio print fast de
00:15:08
esta manera y lo venía o no dice mira me parece que voy a confiar en print fast principio a tener
00:15:14
acceso a mis fotos solamente a verlas pues le voy a dar acceso vale entonces en ese momento
00:15:20
google ya de alguna manera tiene que autorizar a print fast o tiene que permitir a print fast
00:15:32
o le va a permitir a print fast que pueda acceder a los datos de juan una vez que le ha dado acceso
00:15:40
como se hace eso nos hace con ciertos códigos con ciertos toques que llaman entonces una vez que yo
00:15:48
hago grant access vuelve en este caso google a utilizar ese mecanismo de redirección en vez de
00:15:54
mandarle una página para que cargue en el navegador en juan en el navegador de juan lo que hace una
00:16:02
redirección pero bueno pues ahora tienes que hacer es solicitar esta petición a esta otra url
00:16:08
qué url es pues este que tenemos aquí vuelvo a prinfas pero esta vez fijaros que lleva un código
00:16:17
esta url como atributo lleva un código asociado este es el código de autorización es el código
00:16:26
que va a utilizar printfast
00:16:35
se lo ha dado Google
00:16:37
con lo cual cuando printfast
00:16:39
empiece a utilizar este código
00:16:41
Google lo va a reconocer
00:16:43
y va a decir, este es el código que te di
00:16:45
porque previamente
00:16:46
Juan me dijo que efectivamente
00:16:48
te estaba dando permisos
00:16:51
para acceder a sus fotos
00:16:52
y veremos un poco la operativa
00:16:54
es un poco más compleja porque este código
00:16:57
luego hay que
00:16:58
cambiarlo o transformarlo
00:16:59
en un token
00:17:03
de acceso
00:17:03
¿vale? o sea que este código
00:17:05
de autorización no es solamente el dato
00:17:07
que se requiere para poder acceder a las
00:17:09
fotos de Juan pero si a partir de ese código
00:17:11
puedo solicitar un token de acceso
00:17:13
que es el que efectivamente luego me va a
00:17:15
permitir utilizar el API de
00:17:17
Picasa ¿vale? luego ya entra
00:17:19
en marcha
00:17:21
todas las posibilidades que tengo de
00:17:22
solicitarle cosas a Picasa utilizando un
00:17:25
API REST, API REST es básicamente
00:17:27
una URL
00:17:29
en un formato
00:17:31
concreto con una serie de partes dentro de la url establecidas para que cuando lleguen al servidor se
00:17:32
puedan interpretar y dependiendo de lo que se le está solicitando incluso parámetros que se
00:17:40
pueden introducir como partes de la url podrá satisfacer esa petición y devolver pues como
00:17:46
ocurría en ajax devolver un fichero con datos vale por aquí lo importante y para off es que
00:17:53
efectivamente a print fast y con este juego de redirecciones le llegue este código porque ya
00:18:00
con este código la aplicación de print fast ya va a poder empezar a trabajar desde el momento
00:18:07
que se hace la redirección pensar en esto en el momento que picasa la hace la redirección
00:18:15
al navegador esta es la petición que llega y esta petición llega a un script en este caso
00:18:20
al index.php
00:18:26
porque aquí no hay
00:18:27
ninguna ruta
00:18:30
hacia un script concreto, está al nivel
00:18:32
más alto, este es el
00:18:34
dominio y directamente ya
00:18:35
mete el atributo, es un ejemplo muy simplito
00:18:38
pero llegaría al index, vale, entonces
00:18:40
en el index, y esto es un
00:18:42
método get
00:18:44
siempre que estamos solicitando
00:18:45
información con la url directamente y con
00:18:47
los parámetros en la url, esto se
00:18:49
codifica como método get, como
00:18:52
mensaje get, entonces
00:18:53
iríamos a dolar get ahí encontraríamos este parámetro code y ya lo podemos procesar nosotros
00:18:55
en el servidor lo podríamos procesar y metiéndolo en la sesión para tenerlo disponible durante en
00:19:02
todas las interacciones que hagamos bien meterlo en una base de datos bien meterlo en el local
00:19:08
storage del navegador por eso ya un poco dependiendo un poco de la estrategia de manejo
00:19:13
de gestión de los tokens pero en principio esto ya una vez que se me redirige esto básicamente
00:19:18
esta petición sale del navegador de Juan hacia Printfast con estos datos, con estos parámetros.
00:19:25
Esto es importante porque no es del todo intuitivo estos cambios o estas redirecciones y cómo es posible que uno se entera
00:19:34
y cómo es posible que entran tres con un único navegador sin que el usuario realmente esté cambiando su URL,
00:19:41
sino que los mismos servidores van cambiando
00:19:48
o van redirigiendo al navegador de Juan
00:19:52
a un sitio u otro, dependiendo de si le toca intervenir
00:19:54
al servidor Auth de Google
00:19:57
o le toca intervenir al servidor de la aplicación PrintFast
00:20:00
y esta sería la última ventana
00:20:03
una vez que PrintFast ya tiene el código
00:20:08
pues ya puede, utilizando la API de Picasa
00:20:10
ya puede solicitarle a Google, oye pues dame las fotos
00:20:13
de este usuario
00:20:16
y una vez que la recibe
00:20:17
pues puede mostrárselas
00:20:20
al usuario
00:20:21
con estas cajitas
00:20:22
para que él diga
00:20:22
pues mira, quiero esta
00:20:23
quiero la primera
00:20:24
la tercera
00:20:24
la quinta
00:20:25
veamos un poco
00:20:25
¿eh?
00:20:28
cómo puede
00:20:28
cómo puede operar todo
00:20:29
vale, pues
00:20:30
yo creo que
00:20:31
he explicado
00:20:34
una segunda vuelta
00:20:35
¿eh?
00:20:37
todo esto se explicó
00:20:37
en la tutoría pasada
00:20:38
pero
00:20:39
yo creo que
00:20:40
si habéis visto
00:20:41
la tutoría
00:20:42
a lo mejor
00:20:43
todavía se os genera
00:20:44
alguna duda
00:20:45
esta vez
00:20:46
hemos
00:20:46
una segunda vuelta siempre como que viene bien para terminar un poco de asentar las
00:20:47
ideas para vamos a vamos a ver el playground entonces el playground es una aplicación que
00:20:56
ha hecho google esto sería print fast esta aplicación sería print fast yo sigo siendo
00:21:03
en este caso soy el usuario givan rock soy yo con mi usuario este sería print fast y google
00:21:10
tendría información mía distintos tipos y mediante alguno de estos apis yo voy a permitir que el
00:21:20
playground pueda acceder a mis datos que son privados le voy a dar acceso a mis datos que
00:21:31
son privados y que requeriría de alguna manera autenticación por mi parte para poder acceder a
00:21:37
ellos pero le voy a dar permiso a esta aplicación para que pueda hacer uso de ellos y pueda acceder
00:21:44
mediante una pires a esos datos a qué servicio a google estás google estás es una pequeña agenda
00:21:49
básica que todos tenemos y tenemos cuenta con gmail todos tenemos acceso a esa aplicación de
00:21:57
agenda y obviamente tú que te auténticas como ocurre aquí vale esta es la agenda está que
00:22:05
tengo aquí a la derecha entonces hay listas de tareas vale y puedo añadir una tarea pues
00:22:15
añado tarea título puede recoger en el colegio vale los detalles yo que sé puerta delantera
00:22:24
fecha puedo poner una fecha soy yo que sé 18 horas estas son las yo puedo ir añadiendo cosas
00:22:42
vale ya tengo aquí la de alta la tarea podría ir añadiendo más tareas entonces voy a hacer
00:23:05
ese ejercicio en el que le voy a dar permiso a playground para que pueda acceder en mi nombre
00:23:12
a esta esta información que es mía privada y que ningún otro usuario debería de poder acceder
00:23:19
vale como lo hacemos vale pues lo primero esta aplicación sigue una serie de pasos que son los
00:23:24
que normalmente se realizan en cualquier aplicación
00:23:30
para poder acceder a la información privada.
00:23:33
Aquí hay APIs que no son de ese tipo.
00:23:37
Por ejemplo, si accedes a Google Maps,
00:23:39
en principio Google Maps no es información privada de nadie,
00:23:42
es un servicio de Google.
00:23:46
Tú necesitas una clave que te da Google,
00:23:47
pero en principio tú estás accediendo a una capacidad
00:23:51
que tiene Google de poder proporcionarte un mapa,
00:23:54
pero no estás accediendo a la información de nadie.
00:23:57
No es lo mismo que si estás accediendo a los correos de una persona, a los vídeos de YouTube de una persona, a los mensajes de la red social de una persona. Todo eso sí que requeriría auth. Pero hay servicios generales que, en principio, si Google te da, tienes una clave que te da acceso y estás dado de alta y demás, si es el procedimiento habitual, pues, en principio, eso no sigue auth2.
00:23:59
tenéis que distinguir servicios que sí que necesitan dos y otros que no normalmente es
00:24:25
esa la idea si tú accedes a la información privada de alguien sí que lo necesitas porque
00:24:32
necesitas que sea alguien un momento dado de permiso si es un servicio genérico una plataforma
00:24:36
de búsqueda si le pides a google que te busque algo eso no requiere dos no estás entrando en
00:24:44
la información privada vale pues vamos a buscar google tasks como dice donde ha visto estos api
00:24:50
son api rest luego obviamente que alguna tiene su documentación tienes que conocerlo tienes que
00:24:56
saber cómo invocar lo tienes pero antes de invocar estos apis vamos a configurar y vamos a establecer
00:25:02
todo el mecanismo de 2.0 entonces venimos a google estás este vale hay dos opciones uno puede ser
00:25:11
tasks que puedo editar tareas o sea que si yo le doy esta posibilidad esa aplicación va a poder
00:25:25
crear tareas en mi agenda va a poder borrar las va a poder esto ocurre mucho por ejemplo con los
00:25:34
las aplicaciones de correo o de gestión de organización de tiempo que te dicen quieres
00:25:41
que te lo añada a tu calendar de google entonces si cierras una cita pues directamente encoge y
00:25:46
te lo de manera automática sin que entre estuve en tu calendar te lo te lo añade para que esa
00:25:54
aplicación funcione tú tienes que haberle posiblemente cuando lo instalaste te ha
00:26:01
ha pedido oye me das acceso a tu calendar de google de hecho sí porque prefiero que no tengo
00:26:07
nada que tan confidencial como para que una aplicación no lo pueda ver y en principio pues
00:26:13
agradezco que no tenga yo que hacerlo eso manualmente sino que directamente sea en todas
00:26:19
estas aplicaciones utilizan ese tipo de mecanismo para podemos coger tasks genérico aunque no vamos
00:26:24
a crear ninguna tarea vamos a ver un poco lápiz por encima pero vale entonces autorizó
00:26:29
Vale, hay que definir cuáles son los APIs que vas a usar. ¿Por qué? Porque cuando establezca Google, establezca la comunicación con el usuario, le tiene que informar qué es lo que, para lo cual tiene que dar permiso, ¿vale? No es un mensaje tan genérico como decir, oye, que alguien quiere hacer algo con tu información. ¿Le das permiso? No, no, tiene que decir con qué información es con la que efectivamente la aplicación va a contar.
00:26:37
Entonces, bueno, pues autorizo este scope. Eso normalmente se llama scope. ¿Veis? Aquí ya empieza la interacción conmigo, ¿vale? Entonces, fijaros que yo ya estoy dentro del navegador, con lo cual no me va a pedir autenticación.
00:27:03
Vale, quizá voy a salir, voy a cerrar para que veáis que si no, en principio me pediría, ¿vale? He salido, ya no estoy autenticado con el navegador. Ah, no, quizá sí, ¿vale? Porque lo que he hecho es salir.
00:27:18
Voy a entrar a modo invitado, voy a entrar como modo invitado, ¿vale? De tal manera que, ¿vale? Playground, voy a entrar de nuevo en Playground para que veáis que efectivamente me pide autenticación si es que no estoy aquí, ¿vale?
00:27:43
ahora ya no estoy autenticado con lo cual le digo a playground que quiere utilizar google
00:28:10
tasks que estaba quiero autorizar este api vale como veis me pide que inicie sesión
00:28:17
vale para que yo también pueda autenticar y decir si yo soy la persona que digo que
00:28:32
soy que él tiene que tiene que interactuar con el usuario final con juan entonces pues
00:28:38
vale
00:28:44
vale y ahora ahora es cuando él me está me está pidiendo permiso
00:28:53
ya no estoy ahora ya no estoy interaccionando con playground
00:29:08
interactuando con esta url que es una url de google donde de alguna manera gestiona
00:29:12
esos accesos de
00:29:22
Auth, ¿vale? Cuando
00:29:24
un usuario final tiene que dar esos permisos.
00:29:25
Entonces dice, confirma
00:29:29
que confías en Google Auth 2.0
00:29:30
Playground. Como veis, esta es la aplicación.
00:29:32
Esta es la aplicación.
00:29:34
Esto es PrintFast, una aplicación que está
00:29:36
programada en
00:29:38
te da una serie de historias
00:29:39
de, pues bueno, que sepas
00:29:42
de alguna manera que va a
00:29:44
tener acceso a eso y que
00:29:46
tengas eso claro, ¿no? Porque
00:29:47
alguien que no lee mucho los mensajes
00:29:49
pues puede dar
00:29:52
una serie de accesos, de permisos
00:29:53
que no son deseados
00:29:56
entonces te dice aquí lo que permites
00:29:58
permite que se creen, que se modifiquen, organizen
00:30:00
y eliminen tareas
00:30:02
de tu Google Tasks, vale yo lo voy a permitir
00:30:03
¿vale? pues
00:30:06
una vez que le he dado a permitir
00:30:11
fijaros que
00:30:12
mi navegador ha sido redireccionado
00:30:14
ahora vuelvo a otra vez
00:30:17
a estar direccionando
00:30:19
mi navegador hacia Playground
00:30:21
pero además
00:30:23
fijaros que le estoy enviando este código
00:30:27
el código
00:30:29
y el scope que es básicamente el API
00:30:31
para el cual ha sido autorizado
00:30:33
¿vale? y aquí tengo
00:30:35
el código de autorización
00:30:40
esto que aparece aquí es el código de autorización
00:30:41
¿es suficiente
00:30:44
ese código para poder ya solicitarle
00:30:46
información de mis tareas
00:30:48
a Google? no
00:30:50
¿vale? tiene que hacer un intercambio
00:30:52
del código de autorización por tokens
00:30:54
de acceso. Se hace como un doble
00:30:57
nivel de seguridad.
00:30:59
Una vez que tengo el código
00:31:01
puedo recibir un token.
00:31:02
¿Por qué? Porque estos
00:31:05
tokens expiran.
00:31:07
¿Veis que tenemos aquí
00:31:08
en el paso 2?
00:31:10
Tienes aquí una cuenta atrás
00:31:13
porque el token de acceso expira.
00:31:15
No es para siempre.
00:31:19
Pero si es verdad que hay
00:31:21
una manera de utilizar el API en la que
00:31:23
no solamente te envían
00:31:25
un código, perdón, no solamente
00:31:26
te envían un token de acceso, sino que
00:31:28
te envían también
00:31:31
un token de refresco.
00:31:32
Vale, y ese token de
00:31:36
refresco simplemente significa
00:31:37
que cuando esto caduca
00:31:39
yo no tengo que volver
00:31:40
otra vez a pedirle permiso al usuario,
00:31:42
sino que puedo utilizar este
00:31:45
token de refresco para volver a pedir otro
00:31:46
token de acceso con otra
00:31:48
duración de
00:31:50
en este caso una hora creo que es vale o sea que hay veces que se utiliza la pip simplemente para
00:31:52
utilizarlo una vez y otras veces que se pide este toque de refresco porque te permite no marear al
00:32:02
cliente cada poco pidiéndole ese permiso sino refrescando en el toque vale veis aquí tendríamos
00:32:07
una opción de auto refrescar el token y ese auto refresco se haría con este refresh toquen que
00:32:18
tenemos aquí vale ya tenemos nuestro token de acceso que es este de aquí ya podríamos solicitar
00:32:24
información desde playground podría entrar a la información privada de juan bueno pues vamos a
00:32:36
vamos a pedirle cosas como le pedimos información de las tareas utilizando la pirres y el api res
00:32:43
¿Qué es? Pues básicamente son mensajes HTTP. Puede ser GET, puede ser POST, PUT, DELETE. Normalmente estos mensajes tienen una semántica asociada. GET normalmente se utiliza para interrogar, para consultar, para solicitar información. POST, sin embargo, se utiliza para enviar. Si quiero que inserte algo, quiero que tome nota de algo, quiero que el API o el servicio de alguna manera reciba información desde el usuario, normalmente se envía por POST.
00:32:49
también puede ser algo
00:33:18
que permita de alguna manera
00:33:21
enviar datos, delete es para borrar
00:33:23
son peticiones de borrar, oye pues bórrame esto
00:33:25
en este caso por ejemplo
00:33:27
puede ser que para borrar una
00:33:28
tarea pues le pueda enviar un delete
00:33:31
y patch normalmente es
00:33:33
para cambiar, para
00:33:35
modificar cosas, es como
00:33:37
un modify
00:33:39
de por si
00:33:40
tienen cierta semántica
00:33:42
porque pensar todo el
00:33:45
API y
00:33:47
toda la semántica de las operaciones
00:33:49
tiene que
00:33:51
integrarse en el
00:33:52
protocolo HTTP. Esa es la grandeza
00:33:55
de REST, que no necesitas más niveles
00:33:57
por encima. Con HTTP
00:33:59
te apañas.
00:34:01
¿Qué tiene HTTP? Pues el tipo
00:34:03
del mensaje y obviamente
00:34:05
el mensaje sí, el mensaje en sí.
00:34:07
Y el mensaje en sí normalmente es
00:34:09
la URL, puede
00:34:10
ser un cuerpo donde
00:34:13
están los datos y unas cabeceras.
00:34:15
Acordaros un poquito de lo que o cómo se planteaba un mensaje HTTP, pero tampoco tiene mucha más variación, ¿vale?
00:34:17
Entonces, puedo jugar con el tipo del mensaje y puedo jugar efectivamente con lo que escribo dentro de la URL, los parámetros que añado.
00:34:27
Eso es un poco el juego que me da.
00:34:36
Recordar también, los API REST, otra característica importante es que no dependen de ningún estado, ¿vale?
00:34:38
No pueden depender de cosas que pasaron antes, porque HTTP no tiene memoria. No está dentro de ninguna operativa que sepa que anteriormente ha pasado por tal mensaje antes de llegar al otro o que se ha intercambiado tal información. Eso en HTTP no ocurre. Cada mensaje es uno nuevo y se procesa como uno nuevo, sin tener en cuenta nada que haya pasado anteriormente.
00:34:45
Vale, pues vamos a ver, aquí te da una ayuda, ¿no? Si no sería un poco complicado, habría que acordarse de esos mensajes. Entonces, aquí te da una ayuda con las posibles operaciones que puedes realizar en este API de Google Tasks, que es el que vamos a utilizar, el que hemos autorizado.
00:35:07
entonces tenemos cosas que tienen que ver con
00:35:28
task list, es decir
00:35:31
con listas de tareas
00:35:32
acordaros que teníamos aquí
00:35:34
había listas de tareas
00:35:36
lo he cerrado
00:35:38
el otro, lo he cerrado con un montón
00:35:42
de cosas, vale, dejarme
00:35:44
que lo
00:35:46
abra
00:35:46
tenía preparado aquí un montón de cosas
00:35:48
vale, vamos a entrar en gmail
00:35:51
vuelvo a estar aquí, estas son mis tareas
00:35:56
entonces, estas son listas
00:36:07
de tareas
00:36:09
y si ya entro en alguna de ellas
00:36:10
pues estas son tareas dentro de las listas de tareas
00:36:13
vale, entonces
00:36:16
pues vamos por ejemplo a ver
00:36:17
cuántas listas de tareas tengo
00:36:21
vale, entonces esta operación
00:36:23
fijaros que va
00:36:25
a este dominio
00:36:26
y esto todo ya es parte
00:36:29
de
00:36:31
lo que en realidad
00:36:32
bueno
00:36:35
vamos a obtener las listas de tareas
00:36:37
primero, yo creo que para eso en realidad
00:36:39
no es get task list sino list
00:36:41
vale, vamos a listarlas primero
00:36:43
vale, como veis aquí
00:36:45
hay cosas dentro, esto es básicamente
00:36:47
se va a sustituir
00:36:49
por mi usuario id
00:36:51
dentro de google y vamos a hacer
00:36:52
alguna que sí que tenga que meter ahí algún
00:36:55
parámetro como el ID
00:36:57
de la lista de tareas, pero de momento vamos a listarlas
00:36:58
¿vale? Entonces enviamos la petición
00:37:01
esto va a ir acompañado del token
00:37:03
aunque aquí no se vea, pero el token
00:37:06
obviamente este de acceso también viaja para que
00:37:09
se verifique y si se envía, pues aquí
00:37:11
tengo la información que me llegó
00:37:13
Google me lo ha, desde Playground
00:37:14
una aplicación
00:37:17
le ha permitido
00:37:18
acceder a toda esta información mía privada
00:37:20
¿vale? Porque hemos
00:37:23
seguido el proceso de OZ2
00:37:25
antes de llegar a este punto.
00:37:28
Y aquí tienes las listas de tareas, pues lista
00:37:30
de Hibam Robot, repartos
00:37:31
y todas estas listas de
00:37:33
tareas que luego ya entenderéis
00:37:35
por qué se llaman así, porque están dentro
00:37:38
de la aplicación de repartos
00:37:39
que es la que vamos a decir.
00:37:42
Iván, te puedo hacer una pregunta.
00:37:43
Sí, es que para entenderlo
00:37:46
un poco, porque también vi la clase esta
00:37:48
el otro día, lo que veo es que esto es
00:37:49
como si tuvieras
00:37:51
una API personal
00:37:53
que está encriptada con una clave
00:37:55
quiero decir que
00:37:58
puedes tratarlo como una API de tareas
00:37:59
que tiene endpoints en las que
00:38:02
pides una tarea o haces cosas
00:38:04
con tareas, solo que bueno
00:38:06
como son mis tareas, pues le tengo que dar una clave
00:38:07
para que pueda acceder a diferencia
00:38:10
de APIs públicas tipo
00:38:12
datos meteorológicos
00:38:13
claro, claro, sí, ahora
00:38:15
entiendo lo que dices como API personal, efectivamente
00:38:18
es un API que entra a datos personales
00:38:19
es una API
00:38:21
que te permite acceder a datos privados de otro usuario, desde una aplicación, sin que ese usuario realmente sea el que está solicitando los datos,
00:38:23
porque los datos ahora los está solicitando Playground. Y Google, como hemos pasado por ese paso intermedio de que me ha pedido permiso
00:38:35
yo se lo he dado, Google
00:38:46
ya sí que le permite a Playground
00:38:48
entrar a
00:38:50
consultar mis datos a Playground
00:38:52
que de otra manera
00:38:54
sería imposible, ¿no? Que Google le diera
00:38:56
acceso a nadie, ya sean otros
00:38:58
usuarios o incluso aplicaciones
00:39:00
que le pudieran dar acceso a mis datos
00:39:01
no tendría ningún sentido, ¿no?
00:39:04
Sin yo
00:39:05
tener
00:39:07
¿sabes? Sin tener
00:39:08
mi permiso, mi aprobación
00:39:13
Sí, efectivamente. En realidad son APIs de servicios, no es algo que solamente puedas utilizar una persona, es un API definido, documentado, pero sirve para acceder a datos.
00:39:15
Como dices, hay otros servicios que no necesitan este proceso previo de permisos para solicitar un mapa o para solicitar información meteorológica o para solicitar datos generales de clima. Todo eso no requeriría hacer optos porque no estás entrando a los datos de nadie. Estás entrando a los datos que te ofrece un servicio web que tiene esa posibilidad.
00:39:31
Vale, pues sí, pero aprovechar para hacer esa pregunta. Y si todavía no encajo bien mi respuesta con vuestro modelo mental, seguir ahondando en las preguntas hasta que yo dé quizá con la respuesta o confirme que lo que vosotros tenéis en la cabeza es realmente lo que intento describir.
00:40:00
Bueno, no os quedéis con dudas, porque ahora es el momento. Bueno, yo tengo un modelo en la cabeza y me está contando cosas que parece que sí, pero todavía cosas que no me encajan. Necesito encajarlo del todo. Bueno, pues, hacerme preguntas de ese tipo porque son las que realmente os permiten tener la base bien entendida.
00:40:27
vale, bueno pues
00:40:48
esta es
00:40:50
un archivo de datos
00:40:53
que viaja
00:40:55
de vuelta al navegador
00:40:56
en este caso
00:40:59
a la aplicación
00:41:00
en este caso posiblemente
00:41:03
yo estoy ejecutando aquí una aplicación
00:41:04
esto puede viajar o bien a un servidor
00:41:06
o bien puede viajar directamente
00:41:09
al cliente
00:41:11
la conexión, los API REST
00:41:12
se pueden utilizar, nosotros vamos a utilizarlos
00:41:15
algunos los de los dos los vamos a utilizar en php o sea que sería el servidor php durante la
00:41:18
ejecución del script el que se comunicaría con google tasks pero podríamos utilizarlo desde el
00:41:26
mismo javascript que está corriendo en el cliente aquí hay dos posibilidades los del servidor o
00:41:34
directamente desde el cliente con lo cual el cliente directamente decía el otro día coge
00:41:40
el control, ya no necesita el servidor
00:41:45
para el que le vaya a buscar esta información,
00:41:47
sino que él directamente
00:41:49
establece este mecanismo
00:41:50
y una vez que tiene el token,
00:41:52
directamente desde Javascript puede solicitar
00:41:55
la información a Google Tasks.
00:41:57
Y se salta.
00:41:59
Todo el paso intermedio, toda la
00:42:01
comunicación con el servidor
00:42:03
desde el que se ha descargado
00:42:04
el Javascript. El servidor de
00:42:09
Printfast, en este caso el servidor de Playground.
00:42:10
Vale, pues
00:42:14
aquí tendría la información
00:42:14
esto todo está documentado
00:42:17
luego veremos un poco
00:42:18
aunque
00:42:19
por alguna razón
00:42:20
sí
00:42:21
esta documentación
00:42:22
no está del todo
00:42:24
clara de Google Tasks
00:42:25
a lo mejor no es un servicio
00:42:26
así muy útil
00:42:27
pero vamos a ver
00:42:27
dentro de las páginas
00:42:28
que tiene Google
00:42:29
de Google Tasks
00:42:30
vamos a ver un poquito
00:42:31
la documentación
00:42:32
y aquí te viene
00:42:33
Task List
00:42:34
vamos a entrar
00:42:35
a ver una Task List
00:42:36
concreta
00:42:37
entonces
00:42:38
fijaros que
00:42:38
la Task List
00:42:39
tiene este ID
00:42:41
y me va a servir
00:42:42
para pedirle
00:42:42
al API
00:42:44
que me dé las tareas
00:42:46
dentro de esta task list, ¿no?
00:42:48
Entonces, entro aquí en las posibles operaciones
00:42:51
y digo, dame las tareas, ¿vale?
00:42:53
Va a ser esta.
00:42:56
Returns, authenticated users, specified,
00:42:57
no, task list, insert, update, clear, delete,
00:43:00
¿qué task?
00:43:04
Vamos a ver esto.
00:43:05
Sí, no, pero necesito una tarea.
00:43:07
Vamos a ver esto, ¿qué task list?
00:43:09
Vale.
00:43:12
Entonces, aquí veis que tiene esta parte entre llaves, ¿vale?
00:43:13
la voy a sustituir por el id de la task list como veis voy metiendo dentro de la url voy metiendo
00:43:17
parámetros también voy metiendo datos que luego cuando llegan al servidor se extraen de la url y
00:43:25
se utilizan para que mi consulta sea concreta sobre una task list determinada no sobre cualquiera
00:43:33
Tengo que decir sobre cuál es sobre la que quiero enviar la consulta. Vale, envío la petición y aquí la tengo, ¿veis? Y aquí tengo mi tarea. Ah, no, no, no, en realidad, aquí tengo información de mi task list, ¿vale? Definida sobre una concreta.
00:43:42
Entonces, vamos a ver cómo puedo listar updates, returns, listas. Vale, estaba así. Vale, entonces, para ver las tareas dentro de esa task list, utilizo esta operación.
00:43:56
si lo envío, aquí me llega
00:44:14
lo que metí antes, recoger a niños
00:44:17
en el colegio, la puerta
00:44:19
delantera, la hora, etc
00:44:21
y también
00:44:23
la task, la tarea en sí, también tiene
00:44:25
un identificador, por si quiero
00:44:27
establecer algún tipo de información
00:44:29
vamos a ver si puedo cambiar
00:44:32
por ejemplo, en esta tarea
00:44:33
utilizando el API
00:44:35
update
00:44:37
esto va a ser complicado porque tendría que
00:44:39
escribir
00:44:44
request. ¿Ves? En update
00:44:45
manda un put.
00:44:48
Vale, manda un put.
00:44:51
Pero tendría que escribir
00:44:54
informaciones
00:44:56
Json para describir el cambio.
00:44:58
Bueno, yo creo que para el ejemplo no
00:45:00
va a ser necesario. ¿Ven? Para que cojáis
00:45:02
un poquito la idea.
00:45:04
¿Ven?
00:45:06
De cómo he seguido todo el proceso
00:45:07
hasta conseguir
00:45:10
poder interaccionar con Google
00:45:12
para que me enviara la información del usuario final vale alguna pregunta entonces sobre esta
00:45:14
operativa no sé si se me escucha ahora sí no es que estaba intentando seguir un poco lo que
00:45:25
estabas haciendo iván pero no me sale la opción de elegir en el paso 3 de listas de operaciones
00:45:34
¿Me falta algo más ahí?
00:45:41
Está abajo, mira a ver si está aquí abajo
00:45:43
A ver
00:45:45
Claro, yo veo
00:45:47
Que tú, efectivamente, a ti te sale la opción
00:45:49
De elegirlo, pero
00:45:51
A mí me parece como en gris, sin posibilidad de
00:45:52
Aquí, en el primer paso
00:45:55
En el de selección
00:45:57
Authorize APIs
00:45:58
No, en el tercero
00:46:00
En el tercero
00:46:01
Cuando dices configure
00:46:03
Request
00:46:05
Donde sale está en request
00:46:06
te sale la opción de lo que estabas hablando antes,
00:46:09
lo de elegir operaciones.
00:46:11
A mí no me sale.
00:46:13
¿Has seleccionado, has autorizado los APIs primero?
00:46:14
Sí.
00:46:17
Has venido aquí.
00:46:18
Comprueba que tienes esto marcado en Google Tasks.
00:46:19
Ah, vale.
00:46:23
Vale, quizá por...
00:46:24
Sí, seguramente es por eso.
00:46:24
Perfecto, vale, gracias.
00:46:26
Vale, vale.
00:46:27
Me lo has sacado de ahí.
00:46:27
También, para que los veas, entra en tu agenda y mete cosas.
00:46:28
Vale.
00:46:33
Para ver que efectivamente te puede traer lo que tengas allí metido.
00:46:34
Perfecto, gracias.
00:46:38
Vale.
00:46:39
Eh, bueno, vamos a, vamos a verlo desde el código. Vale, vamos a verlo desde el código. Eh, para lo cual vamos a poner, vamos a borrar quizá para que veamos un poco cómo se me pide la autorización.
00:46:39
Voy a borrar por si acaso queda algún, yo creo que no va a quedar ningún token en la sesión de alguna ejecución previa, pero voy a mirar aquí en las herramientas, herramientas para desarrolladores, vale, no parece que haya ninguna cookie de sesión de PHP, con lo cual supongo que me va a volver a pedir autorización.
00:47:00
entonces voy a depurarlo
00:47:29
voy a colocarme aquí en el index
00:47:31
no os preocupéis, luego vamos a hablar
00:47:33
de la aplicación un poquito más en detalle
00:47:37
de momento solo quiero que veáis
00:47:39
cómo se hace este intercambio
00:47:41
dentro del código y cómo se hace esta operativa
00:47:43
para hacer todo esto
00:47:45
desde PHP necesitas
00:47:49
una librería
00:47:51
una librería PHP que la programa
00:47:52
Google, se llama Google Client
00:47:55
entonces como veis aquí en el
00:47:57
Composer, en la definición
00:47:59
de Composer Json, está
00:48:02
la librería
00:48:04
Google Client, ¿vale?
00:48:05
Entonces, bien podéis
00:48:08
añadir esto a mano o bien podéis
00:48:10
hacer un Require,
00:48:11
Composer Require para instalarla.
00:48:13
Yo en la
00:48:17
última versión, creo que es la 2.12,
00:48:18
yo creo que puse la última.
00:48:20
Y luego aquí hay una serie de
00:48:21
añadidos
00:48:23
a Composer que básicamente
00:48:25
tienen que ver con que cuando te la descargues no se descarguen todos los apis rest o la parte
00:48:27
cliente del api red de todos los servicios de google sino solamente de los que vayas a usar
00:48:36
vale si no pones esto él se descarga todos los clientes es decir pensar que ahora como pasaba
00:48:41
con SOAP, yo voy a establecer
00:48:50
peticiones desde mis scripts
00:48:52
PHP hacia el servidor
00:48:54
de Google, ¿no? Y que
00:48:57
de alguna manera maneja ese servicio.
00:48:58
Igual que ocurría con SOAP
00:49:03
cuando hacíamos, a partir del WSDL
00:49:04
generábamos un objeto de servicio,
00:49:07
un objeto cuyos métodos
00:49:09
eran realmente las peticiones
00:49:11
que le enviábamos desde el cliente al servidor,
00:49:12
aquí ocurre lo mismo. Esta librería
00:49:14
de PHP de Google
00:49:16
me va a facilitar el uso
00:49:18
de este API y en vez de tener que utilizar yo las direcciones
00:49:20
URL, HTTP, como pasaba en el
00:49:25
Playground, me lo va a simplificar. ¿De qué manera? Bueno, pues me va a dar
00:49:28
unos objetos que yo voy a instanciar cuyos
00:49:32
métodos directamente se van a codificar
00:49:36
como digo, a mí me va a ofrecer construir objetos
00:49:40
de unas clases y sobre esos objetos voy a poder invocarle
00:49:44
métodos luego internamente esa librería esos métodos lo que van a hacer es establecer la
00:49:48
url correspondiente a la función de ese método y enviársela al servidor pero todo eso a mí como
00:49:55
usuario de ese api me es transparente yo la operativa que tengo desde php es muy sencilla
00:50:01
es instancia del objeto y le invocó un método elite de todo en este básicamente que se se
00:50:08
mapean muy bien con lo que teníamos
00:50:17
aquí, con estas operaciones
00:50:20
¿vale? con estas operaciones de aquí
00:50:21
pero en vez de yo
00:50:24
tener que escribir todo esto
00:50:26
de aquí, que podría ser un poquito
00:50:29
podría meter errores
00:50:31
etcétera, etcétera, porque en realidad
00:50:33
el API REST es enviarle
00:50:35
este mensaje HTTP al
00:50:37
servidor, eso es realmente lo que
00:50:39
es el API REST
00:50:41
pero en vez de tener yo que escribir todo
00:50:42
esto, lo que me hace es
00:50:45
me construyo un objeto
00:50:46
pues posiblemente un objeto task list
00:50:48
y al que
00:50:51
le puedo invocar
00:50:53
estos métodos, me paso como parámetros
00:50:54
de entrada al método los datos que
00:50:56
tiene que ir
00:50:58
incrustando en la url
00:51:00
y a mi me hace la vida
00:51:02
bastante más fácil, bueno pues ese código
00:51:04
esa librería de cliente
00:51:07
ya es la que proporciona
00:51:08
google, pero
00:51:11
si yo no le pongo esto en el
00:51:12
composer, el me instala
00:51:14
a todos los clientes de todos los servicios.
00:51:17
Finalmente, la distribución del código es muy grande
00:51:21
para cosas que nunca voy a utilizar
00:51:24
porque solo voy a utilizar tasks, ¿vale?
00:51:25
O sea que si utilizas este extra,
00:51:27
te dices, mira, de los servicios de clientes,
00:51:30
solo quiero que me instales tasks.
00:51:33
Solamente te va a incluir ese servicio.
00:51:36
Vale.
00:51:39
Listo.
00:51:40
Con lo cual, tenemos un módulo más,
00:51:41
una librería más
00:51:43
que descargamos de Google
00:51:45
esto lo programa Google
00:51:48
entonces
00:51:50
decía, vamos a
00:51:54
depurar el código
00:51:56
para que veáis como nos va a funcionar
00:51:58
vale, vamos a empezar aquí
00:52:00
vamos a empezar aquí
00:52:01
y vamos a depurarlo
00:52:04
y vamos a ir ejecutándolo poco a poco y os digo un poquito
00:52:06
que hace cada parte del código
00:52:09
ah, perdón, dejarme que arranque
00:52:12
la base de datos y no lo funciona porque en la primera en la primera
00:52:15
en la primera versión no necesita base de datos pero si en la segunda si está
00:52:28
ya en la versión final entonces si no arranca la base de datos
00:52:33
lo tengo parado aquí acordaros en la sesión anterior en la sesión anterior
00:52:41
otra cosa importante que hicimos fue configurar nuestra cuenta de aplicación con google para
00:52:48
solicitar credenciales vale o sea que esto no es tan sencillo como bueno yo soy fulano dale
00:52:58
permisos o consulta juana a ver si quiere que yo entre no no no previamente yo como playground o
00:53:04
como print fast como en este caso esta aplicación de repartos tengo que ir a google y tengo que
00:53:12
registrarme dice yo soy la aplicación repartos y voy a utilizar este mecanismo de poder acceder a
00:53:18
información del usuario final si es que él me da permiso y eso lo hicimos en la tutoría pasada
00:53:27
añadimos información configuración de la venta de la ventana de consentimiento esa ventana que
00:53:33
se retorna al usuario porque es configurable vale para que sea un poquito más personalizada para que
00:53:39
yo pueda poner mi logo pueda poner informaciones que yo pueda entender que son interesantes de
00:53:44
cara a mejorar ese diálogo y luego además pongo información de la redirección que va a hacer
00:53:49
google hacia mi sitio web vale cuando en este momento que teníamos aquí este momento importante
00:53:56
En el que, vale, yo le he dado permiso y en el momento que le doy permiso,
00:54:06
Picasa redirecciona el navegador a mi web.
00:54:13
Bueno, pues esta dirección, esta URI, que llamo URI de redirección,
00:54:17
también la he tenido que configurar cuando me he dado de alta en el Google Developer Console.
00:54:22
Lo que hicimos en la tutoría pasada.
00:54:29
Es otra manera de comprobar que efectivamente está en sincronía, coincide lo que configuró la persona que registró la aplicación, coincide con lo que efectivamente o el sitio donde finalmente se están esperando que lleguen estos datos, ¿vale?
00:54:31
Porque aquí voy a configurar qué script, puede ser el index si es que no pongo nada o puede ser un script concreto, es el que va a recibir estos datos. Y eso tiene que coincidir. Si no coincide, de alguna manera no funciona porque lo que va a hacer Google siempre va a ser redirigir al navegador a una URI que está configurada en ese registro de la aplicación con Google.
00:54:52
o sea que hay cosas
00:55:17
si no os funciona, pues no
00:55:20
tenéis que comprobar que todo eso coincide, es muy importante
00:55:21
si no hay un
00:55:24
error y no se
00:55:25
lleva a cabo la comunicación
00:55:28
aparte que se hacen esas comprobaciones de
00:55:29
seguridad, efectivamente
00:55:32
eso es así
00:55:34
y que coincide con lo que tú lo has configurado
00:55:35
vale
00:55:38
cuando hicimos el
00:55:39
registro de la aplicación
00:55:41
descargamos unos credenciales
00:55:43
un ficherito Json
00:55:45
que me daba la opción de descargarlo
00:55:47
eso lo necesitamos
00:55:50
porque son los credenciales con los que
00:55:51
yo voy a también interaccionar con
00:55:54
Google y con los servicios de Google
00:55:56
yo soy la aplicación
00:55:57
Tracatrac con este
00:55:59
credencial, ¿por qué?
00:56:01
por control también, porque Google
00:56:03
tiene que saber cuantas veces le estoy pidiendo las cosas
00:56:05
porque si paso en un límite
00:56:08
me va a cobrar
00:56:10
entonces Google cada vez que
00:56:10
hago un registro, de alguna manera
00:56:14
me tiene identificado, ¿vale? Mis credenciales
00:56:16
me identifican
00:56:18
para que yo no pueda exceder un poco
00:56:18
el uso que tengo acordado con Google.
00:56:21
Si es que he pagado una tasa, pues
00:56:23
si he pagado una tasa. Si es que tengo un acceso gratuito,
00:56:25
que es lo que estamos haciendo ahora, estamos
00:56:27
accediendo con este
00:56:29
digamos nivel gratuito, que son
00:56:31
muy pocas peticiones, pero suficientes como
00:56:33
para probar
00:56:35
la aplicación.
00:56:37
Pero él sabe que yo estoy accediendo.
00:56:39
No es gratuito, venga, tú haz lo que
00:56:42
quieras, no, no, él tiene control sobre ti
00:56:43
te da unas credenciales y tú tienes que
00:56:45
atenerte un poco a Zeus
00:56:47
vale, pues esto sale del entorno
00:56:48
y el entorno, acordaros, es este ficherito
00:56:51
.ef, no lo voy a visualizar
00:56:53
bueno, no lo voy a visualizar
00:56:55
porque hay claves
00:56:57
aquí es donde van a parar todas las claves
00:56:59
de todos los APIs
00:57:01
como yo creo que os enseñé también
00:57:02
en la auditoría pasada
00:57:05
entonces
00:57:06
ahí es donde tenéis que ir dando de alta
00:57:08
tenéis un ejemplo
00:57:11
.env.ejemplo
00:57:13
que os dice los nombres de los campos
00:57:15
y luego ya tenéis que
00:57:18
rellenar ese ficherito de configuración
00:57:19
con vuestras claves
00:57:22
ir a cada sitio, ir a Big Maps
00:57:23
ir a OpenWeather
00:57:26
si es que queréis
00:57:28
vosotros también ejecutar el código
00:57:28
de OpenWeather, en todos esos sitios
00:57:32
os registráis y
00:57:34
gratuitamente os van a dar las claves
00:57:36
de alguna manera lo necesitáis
00:57:37
también para que estas aplicaciones
00:57:40
funcionan, si no ningún proveedor
00:57:42
os va a dar acceso a sus servicios
00:57:43
vale
00:57:45
pues vamos a hacerlo correr, aquí tengo ya las
00:57:46
credenciales, fijaros en
00:57:50
el URI, vale
00:57:52
el URI que tenemos nosotros
00:57:53
es http://localhost
00:57:55
8000
00:57:58
¿qué hay aquí?
00:57:58
aquí tenéis que poner donde está ejecutando
00:58:01
el script
00:58:04
que tiene que recibir
00:58:06
el código, en este caso es index
00:58:09
index.php va a recibir el código
00:58:11
Y este es el sitio donde está ubicado. Fijaros que pone 8000. ¿Por qué? Porque estoy trabajando con el servidor interno de NetBeans. Si lo tuvierais alojado en Apache, el URI, tanto cuando registráis la aplicación como aquí en este parámetro, tenéis que direccionarlo a donde tengáis desplegada vuestra aplicación en Apache.
00:58:13
que puede ser http://localhost
00:58:37
barra y el nombre
00:58:40
de la carpeta donde hayáis puesto vuestro proyecto
00:58:44
el tws08tarea
00:58:46
pero tiene que estar
00:58:49
redirigido a la ubicación
00:58:53
donde está el script
00:58:57
al que va el navegador a solicitarle
00:58:58
oye pues ahora me han pedido
00:59:03
que te contacte a ti y que te envíe
00:59:06
Obviamente con esta URL que lleva este parámetro de código asociado para hacerte llegar este código.
00:59:08
Sí, o sea que esto es importante.
00:59:16
¿Se entiende más o menos esta jugada de los URIs y la de redirección?
00:59:17
¿Se intuye?
00:59:23
Va, perfecto.
00:59:25
Vale, una vez que tengo ya estos parámetros, ya puedo crear una instancia de Google Client.
00:59:26
Acordaros.
00:59:32
acordaros
00:59:32
que todo esto es orientado a objetos
00:59:38
¿vale? de nuevo, todos los APIs
00:59:42
que encontráis ya modernos
00:59:44
todos van orientados a objetos
00:59:46
entonces aquí ya no hay funciones
00:59:48
aquí siempre funciona de la misma manera
00:59:50
tienes un API que significa
00:59:52
un conjunto de clases
00:59:54
que puedes ir instanciando objetos de ellas
00:59:55
y que invocándole
00:59:58
métodos a los objetos que has instanciado
01:00:00
te dan la funcionalidad
01:00:02
¿vale? de ese app
01:00:04
entonces, esta librería Google Client
01:00:05
pues ¿cómo la vamos a usar? instanciando
01:00:08
un objeto, como hacíamos
01:00:10
con SwapServer o SwapClient, todo esto
01:00:12
al final son clases
01:00:14
de las cuales instancias objetos y le
01:00:16
invocas métodos
01:00:18
vale, pues a este cliente que creas, le vamos
01:00:19
asociando distintos
01:00:22
datos, vale, vamos a ir corriendo
01:00:24
el script
01:00:26
paso a paso, hemos creado, pero bueno
01:00:28
Le podemos ir dando información de cómo se llama la aplicación.
01:00:30
Le vamos a dar información de cuáles son mis credenciales con
01:00:34
este método set of config, ¿vale?
01:00:38
Le doy el ficherito, ese json que me bajé cuando creé las
01:00:40
credenciales.
01:00:44
Le doy información del redirect URI.
01:00:45
Este tiene que coincidir, repito,
01:00:48
tiene que coincidir con el que configure cuando configure la
01:00:50
redirección en Google, en la consola de Google.
01:00:54
¿Vale?
01:00:59
Y también le configuro cuál va a ser lo que va a requerir como permiso.
01:00:59
El scope, básicamente, significa cuando tú vayas a pedirle permisos al cliente final,
01:01:07
¿sobre qué le vas a pedir permisos?
01:01:13
¿Vale?
01:01:15
Y con esta constante, yo le estoy diciendo que tiene que pedir permisos para gestionar sus tareas.
01:01:15
¿Vale?
01:01:22
Si fuera cosas de Gmail, pues aquí cambiaría.
01:01:22
Sería service, Gmail, ta, ta, ta.
01:01:24
O YouTube.
01:01:26
o lo que en principio
01:01:27
necesitar
01:01:29
vale
01:01:30
le digo set access type offline
01:01:32
esto es para poder refrescar el token
01:01:35
vale, quiero un token de refresco también
01:01:37
le voy a solicitar un token de refresco
01:01:39
y set prompt
01:01:40
es para que efectivamente
01:01:43
pida consentimiento, vale, que no sea un proceso
01:01:44
distinto
01:01:47
sino que le presente la ventana
01:01:49
de consentimiento al usuario para poder
01:01:51
yo luego acceder a sus datos
01:01:53
vale
01:01:54
Y ahora empieza el script, ¿no? Y aquí tengo varias casuísticas. Acordaros siempre de el script arranca y tiene que ir averiguando en qué casuística está. Este es index, ¿vale? Con lo cual, yo no sé, puede ser que esté ejecutando en un momento cuando en realidad está llegando la redirección de Google y dentro de la URL tiene este parámetro code.
01:01:56
Es decir, viene algo en $GET de CODE, ¿vale?
01:02:23
Os vuelvo a poner este, ¿no?
01:02:30
Imaginaros que estoy aquí.
01:02:32
Si yo he mandado esta petición a un script PHP, $GET de CODE va a tener este dato, con lo cual va a ser inset.
01:02:35
Y esto va a dar true, o sea, que va a entrar por esta rama, ¿vale?
01:02:45
¿Ese es el caso?
01:02:51
No, de momento no es el caso, porque todavía no se le ha pedido la solicitud de permiso al cliente final, con lo cual, $GET no tiene datos. Si lo vemos, tiene el dato del debug, pero no tiene el código todavía, porque obviamente todavía el usuario no le ha dado el permiso a Google para que yo pueda acceder en su nombre o para que repartos pueda acceder a su nombre.
01:02:52
con lo cual esto se va a saltar
01:03:18
vamos al otro iset
01:03:22
puede ocurrir otro escenario
01:03:24
es en el que
01:03:26
ya me ha llegado el código
01:03:28
y lo he guardado en la sesión
01:03:30
que es como lo voy a implementar
01:03:33
en esta aplicación, hay otras
01:03:35
de implementarlo, de guardarlo en una base de datos
01:03:36
o guardarlo en otros medios
01:03:38
persistentes para que no se pierda
01:03:41
entre petición y petición
01:03:43
yo aquí, un método muy sencillo es guardarlo en la sesión
01:03:44
¿cuándo ocurre esto?
01:03:47
Bueno, pues cuando ya me ha llegado, lo meto en la sesión y me siguen llegando peticiones para yo necesitar acceder a tareas, pero en vez de tener que volver otra vez a solicitar el token a Google, como lo tengo en la sesión, lo cojo y con ese token ya puedo establecer de nuevo las peticiones a tasks.
01:03:49
ese es el caso, no, porque sesión
01:04:07
en principio está vacía
01:04:09
no hay nada en la sesión de
01:04:11
de PHP
01:04:15
con lo cual este tampoco es el caso
01:04:16
lo saltamos, vamos a este
01:04:19
y si no, ya aquí, este sí que
01:04:21
va a ser el caso, lo que voy a hacer
01:04:23
es crear la URL
01:04:25
que va a redirigir
01:04:27
al navegador
01:04:29
para que empiece la comunicación
01:04:30
2.0 con Google
01:04:33
¿vale? este paso
01:04:35
es este de aquí, ¿vale?
01:04:37
Este paso es este de aquí.
01:04:39
Este primer paso en el que
01:04:43
una vez que el usuario dice,
01:04:45
vale, pues quiero entrar en Picasa,
01:04:49
lo que hace PrintFast es decir,
01:04:51
vale, pues habla con Picasa.
01:04:52
Y esta URL de aquí,
01:04:55
que es a la que se redirecciona
01:04:57
al navegador, es justo
01:04:58
esta URL que se crea
01:05:00
automáticamente, que yo no tengo que
01:05:03
construirla porque es una URL un poquito
01:05:05
larga y compleja, pero con este
01:05:07
método del cliente me la crea
01:05:09
automáticamente. Vale, de hecho
01:05:11
si yo le doy un paso
01:05:13
y miro cuál es el...
01:05:14
¿Ves? Es una URL compleja.
01:05:17
Tiene mis...
01:05:20
Vale.
01:05:21
Vale, ¿sí?
01:05:24
Es una URL compleja.
01:05:25
Listo.
01:05:30
Y con esa URL
01:05:32
lo que hago es
01:05:34
hacer la redirección
01:05:36
aquí es donde le pido
01:05:38
al navegador
01:05:39
que redireccione
01:05:41
hacia esa url que he creado
01:05:43
con este método
01:05:46
que me da la librería de google
01:05:47
con lo cual
01:05:50
lo que voy a conseguir es que el navegador
01:05:52
directamente
01:05:54
coja y envíe
01:05:56
en vez de recibir una página
01:05:57
esta petición que ha hecho inicial
01:06:00
en vez de recibir una página del servidor
01:06:02
creada por este script
01:06:04
Lo que recibe es una cabecera simplemente diciéndole, no, no, yo no te voy a dar la respuesta, tienes que buscarla en este otro sitio. ¿Y cuál es ese otro sitio? Pues vamos a ver ahora. Bueno, dejamos correr y vemos que el navegador inicia, este ya es Google, ¿vale? Esto ya es el servicio de Auth2 de Google.
01:06:05
Y me dice, selecciona la cuenta con la que quiero dar permisos a esta aplicación para que entre en mis tareas. Y yo, pues, esta misma. Vale, como estoy, me dice, te han dado acceso a una aplicación que aún se está probando.
01:06:33
acordaros que también os dije estas aplicaciones de momento google cuando las registras las pone
01:06:55
como en prueba no son aplicaciones de las que te dan todas las garantías porque tampoco hemos
01:07:00
pasado por ningún mecanismo de verificación de esta aplicación que siempre te avisa puede ser
01:07:07
que tú puedas añadir estos usuarios como usuarios de prueba y a lo mejor posiblemente de esa manera
01:07:13
no te avise cuando registras la aplicación puede estar de alta unos usuarios de prueba en este caso
01:07:19
yo no registré ninguno y sí que me sale este mensajito este este aviso diciendo cuidado que
01:07:25
esta aplicación está un poquito de esa manera vale yo le digo continuar y ahora ya si me da
01:07:31
vale me dice confirma ya tengo cierto acceso de ejecuciones previas vale pero tengo que de alguna
01:07:38
Y el servicio al que he dado permiso es este, ¿no?
01:07:49
Crear, modificar, organizar y eliminar tareas.
01:07:51
Luego lo veremos.
01:07:58
Desde tu cuenta de Google tienes acceso, a ver si me da acceso desde aquí.
01:07:59
Desde mi cuenta de Google, como veis, aquí tengo todas las aplicaciones que me han pedido permisos.
01:08:04
Y si lo comprobáis vosotros en vuestras cuentas de Google podéis ver a quién habéis dado permiso.
01:08:14
Yo doy permiso a Mailbird porque es un cliente de correo y Screencastify porque es una aplicación para hacer lecturas de pantallas, etc. Esta es mi aplicación, esta de repartos es la que hemos construido y obviamente le estoy dando permiso y esta es la de Playground, que también ha requerido mi permiso para acceder a mis tareas y yo se lo he dado para poder continuar con la demo.
01:08:20
Y vosotros aquí podéis ver listadas todas las aplicaciones que en un momento dado, que a lo mejor no sois ni conscientes, tienen permiso a vuestros datos, ¿vale? Mailver, pues aquí posiblemente, estos son todos los permisos que tiene, leer, redactar, enviar, eliminar, correos, a menos, bueno, decidido que yo quiero tener un cliente de correo, pues estos son los permisos que yo le he dado, ¿no?
01:08:46
de gmail a esta aplicación calendarios contactos con estas aplicaciones es tema profesional pues
01:09:12
no pasa nada profesionales tampoco pero si son personales cuidado con todo esto porque todas
01:09:23
estas aplicaciones pueden ir a vale y lo mismo con las otras aplicaciones vale podéis revisar
01:09:29
un poco qué tipo de permiso les habéis dado a cada una de ellas vale yo estaba estaba aquí
01:09:38
vale hecho le digo venga pues continuar confirmó que confío en esta aplicación cuando voy a
01:09:47
continuar es que se me vuelve otra vez activar el script index porque porque google ha redireccionado
01:09:55
de nuevo el navegador para que acceda a la uri extra de redirección que es http 2 punto barra
01:10:05
barra localhost 2.8 mil es decir activa mi índex de nuevo y ahora sí que tengo en dólares como
01:10:12
veis y que tengo datos en dólares y que tengo datos porque de hecho bueno sí que tengo me ha
01:10:19
llegado esa petición con esos datos si yo vuelvo a ejecutar el script vuelvo a creer el google
01:10:32
client con los mismos datos llegó a este if pero este if ahora sí que retorna verdadero el y set
01:10:42
de get the code me dice si lo puedo evaluar true vale así que entra por esta rama porque sí que me
01:10:51
llega en este mensaje url yo he dado el permiso me llega el código que hago con este código vale
01:11:05
por lo primero es cambiarlo por un token de acceso y un método también de la librería que se llama
01:11:12
fetch access token with of code yo le pasó el código es este de aquí y me lo va a convertir me
01:11:19
lo va a transformar en un access token que es lo que nosotros hacíamos con el playground vale
01:11:28
Acordaros aquí, ¿no? Aquí hacía un intercambio, ¿no? Este era off-code y yo voy a recibir, voy a intercambiarlo por un token de acceso. Vale, pues ejecuto esto, ¿vale? Aquí tengo el token. Y el token, pues tiene mucha información. Tiene información del token como tal, pero también tiene información de cuando aspira, me da un token de refresco, de qué scope es el que tiene permitido, una serie de datos.
01:11:34
y yo que hago con ese token, lo guardo
01:12:04
en la sesión, vale, este token
01:12:06
que he recibido aquí
01:12:08
que he obtenido, habiendo
01:12:10
ejecutado este método, lo que hago es lo meto
01:12:12
en el campo
01:12:14
token de la sesión
01:12:16
que tengo en PHP
01:12:18
que también expira en su momento, o sea con esto
01:12:20
tampoco te salvas, porque llega un momento
01:12:22
en que estos tokens también
01:12:24
dentro de la sesión, esta información expira
01:12:26
y no quedaría otra que
01:12:28
volver a refrescar y volver otra vez a
01:12:30
a molestar al usuario para que te diera permiso de nuevo para entrar aquí tampoco es una si tú
01:12:32
no quieres molestar al usuario una vez que te ha dado el permiso ya funcionar con ese toque
01:12:40
tendrías que guardar este toque en otro sitio y hacer cierta gestión de ir refrescando los
01:12:44
tokens vale guardo también el refresh toque por si lo necesito que en este caso no en principio
01:12:48
no bueno sí sí que utiliza pues si está aspirado lo intentó refrescar vale y ahora en esta en este
01:12:56
en este escenario sí que ya voy a entrar también por aquí porque hice sesión de toquen sí sí sí
01:13:05
ahora sí ahora esto es true porque lo acabo de meter aquí arriba estoy en una sesión en la que
01:13:12
ya tengo el código y lo tengo metido en la sesión que hago bueno pues establezco en el cliente
01:13:20
establezco ahora el token de sesión vale set access token es decir le doy de alta el token
01:13:29
de acceso dentro del objeto este de cliente que me representa un poco el google client
01:13:36
pregunto está expirado puede que haya expirado ya lo tenga pero a efectos de google dice no
01:13:43
no esté este token y aspirado no puedes usarlo entonces tendría que entrar en el proceso de
01:13:51
refrescarlo vale pasándole el refresh token con este otro método fech access token with
01:13:56
refresh toque en este caso no debería estar inspirado con lo cual si no está
01:14:02
si no está expirado salta este if
01:14:11
y directamente me viene aquí, ¿vale?
01:14:14
Salto este if y directamente
01:14:18
vengo aquí.
01:14:20
¿Vale?
01:14:25
Una vez que estoy en este punto
01:14:26
yo ya puedo
01:14:29
solicitar
01:14:31
la posibilidad de hacer
01:14:32
o de usar el API
01:14:34
de Google Tasks. ¿Vale?
01:14:36
Porque hasta aquí todavía
01:14:38
lo que he hecho es este proceso de aquí arriba.
01:14:40
Esto de aquí arriba.
01:14:43
pero todavía no enviado ningún mensaje para solicitar información de tareas este punto
01:14:44
3 todavía no lo he hecho hecho este primero y hecho este segundo y me encuentro con que ya
01:14:50
tengo estos tokens y estoy preparado para enviar mensajes http con el formato correcto para poder
01:14:56
solicitar información de tareas vale y entonces este objeto esta clase google service tasks es
01:15:06
parte de lo que me descarga el cliente de google para interaccionar con el api de google estás vale
01:15:15
si tuviera que interaccionar interaccionar con otro servicio con gmail o con youtube pues que
01:15:25
tendría que crear otro objeto tendría que crear new google service youtube vale pero fijaros que
01:15:30
le pasó el objeto cliente donde está el toque en donde está hay un montón de información para que
01:15:37
con esa información y mis peticiones él compruebe pues sí pues tiene el toque de autorización todo
01:15:42
es correcto la información de las tareas de juan vale pues y hasta aquí y hasta aquí hasta aquí la
01:15:48
parte del cliente google que os quería mostrar antes de empezar ya con el código concreto de
01:16:01
la aplicación porque os lo quiero mostrar desde más alto nivel no entrar en código tan bajo nivel
01:16:06
de alguna manera asegurarme de que todo este proceso se ha quedado más o menos claro
01:16:13
y que lo tenéis entendido bien pues voy a enseñaros por encima el api de google task
01:16:22
y ya arranco directamente
01:16:39
con la aplicación de reportes
01:16:41
por ejemplo, tenéis estos dos enlaces
01:16:47
y os llevan
01:17:01
a una descripción
01:17:03
genérica
01:17:06
aquí tenéis las operaciones
01:17:06
que podéis hacer sobre
01:17:10
las listas de tareas
01:17:11
aquí tenéis en principio
01:17:12
como digo
01:17:15
vosotros no vais a utilizar las urls
01:17:17
Sino que vais a utilizar la librería PHP
01:17:19
Que os va a simplificar todo esto
01:17:22
Vamos a entrar luego en el código de la librería
01:17:24
Para que veáis un poquito
01:17:26
Las operaciones que tenéis disponibles
01:17:27
Pero esto es un poco conceptualmente
01:17:29
Aquí os muestra
01:17:31
Cuál va a ser un poco la URL
01:17:32
Donde tenéis que poner los parámetros
01:17:36
Y os da un poquito
01:17:38
Una descripción textual
01:17:39
De qué operaciones tenéis
01:17:41
Entonces tenéis delete, get, insert, list, patch, update
01:17:42
Y luego sobre la tarea
01:17:45
Que aquí dice del equipo
01:17:47
puedan asignar tareas. Esto no lo entiendo muy bien.
01:17:49
Esto está mal traducido. En realidad esto es
01:17:51
listas de tareas y esto es tareas,
01:17:53
operaciones que podéis hacer sobre tareas
01:17:55
concretas. Podéis borrar,
01:17:57
podéis obtener, podéis insertar,
01:17:59
podéis listar, podéis mover
01:18:01
el orden, podéis
01:18:03
modificar cosas,
01:18:05
podéis hacer distintas cosas
01:18:07
con una tarea concreta.
01:18:08
¿Cómo vamos
01:18:12
a utilizar nosotros estas operaciones?
01:18:13
Pues,
01:18:16
os adelanto. Recordad que
01:18:17
en su momento
01:18:18
nosotros en nuestro diseño orientado a objetos
01:18:19
en nuestra aplicación vamos a tener
01:18:22
objetos listas de tareas y objetos
01:18:24
tareas y objetos
01:18:26
producto del que teníamos de toda la vida
01:18:28
que hemos ido utilizando
01:18:30
las distintas aplicaciones
01:18:32
y en su día
01:18:33
programamos DAOs
01:18:36
programamos objetos DAO
01:18:40
que permitían que esos
01:18:41
objetos que íbamos creando pudieran
01:18:44
ser persistidos, pudieran ser
01:18:46
guardados, almacenados
01:18:48
en ese medio persistente
01:18:49
cuando creamos un nuevo producto
01:18:51
pues lo podíamos meter en la base de datos
01:18:54
bueno, pues ahora ese medio persistente
01:18:55
ya no va a ser una base de datos
01:18:57
MySQL que tengamos asociada al script
01:18:59
sino que va a ser el servicio
01:19:02
de tasks
01:19:03
¿sí? se coge un poquito la idea, entonces
01:19:04
yo en vez de cuando vaya
01:19:07
a utilizar el API o la aplicación
01:19:09
perdón, cuando voy a utilizar la aplicación
01:19:12
voy a tener un pequeño formulario
01:19:13
que me va a permitir
01:19:15
guardar un reparto
01:19:16
¿vale? ese reparto
01:19:19
estamos hablando de logística ¿vale? estamos hablando
01:19:21
de que tengo que llevar una impresora
01:19:23
a tal sitio de Madrid ¿vale? esos son repartos
01:19:25
es una empresa de logística
01:19:28
entonces
01:19:29
esos repartos
01:19:31
¿dónde se van a guardar? se tienen que guardar porque una vez
01:19:32
que lo he creado, si no lo guardo
01:19:35
desaparece ¿no? una vez que la script
01:19:38
termina, toda esa información que tengo
01:19:39
en memoria desaparecería, tengo que guardarlo
01:19:41
en algún sitio, bueno pues ¿dónde lo voy a guardar?
01:19:44
en mi agenda de Google Tasks.
01:19:46
Voy a codificar esa información para que aparezca de alguna manera
01:19:50
toda representada, porque la tarea tiene pocos campos,
01:19:53
pero ya la voy a codificar de una manera que pueda meter la dirección,
01:19:59
pueda meter datos de las coordenadas,
01:20:02
puede meter información distinta que voy a requerir,
01:20:04
y la voy a guardar en mis tareas.
01:20:09
Entonces, una task list.
01:20:12
Y ahora viene un poco la explicación de por qué esto está básico. Una task list representa los repartos de un día. Como veis, repartos del 22 del 4 del 2022 o del 29 del 4 del 2024.
01:20:13
o sea que una lista de tareas me va a permitir representar los repartos de un día
01:20:27
si yo abro uno de ellos, aquí están los repartos individuales
01:20:39
vale, entonces, ¿dentro de qué información quiero representar para un reparto?
01:20:46
Pues el producto que quiero repartir, un monitor, LCDTDT, reconocéis posiblemente el nombre del producto porque está sacado de la base de datos del producto, ¿vale? Porque vamos a interaccionar también solicitando esa información a la base de datos del producto.
01:20:52
luego tengo una persona que lo separa de la calle de la información de la dirección a la que tengo
01:21:09
que llevarlo esto sería el título vale pero como veis lo tengo codificado con un aquí en el medio
01:21:18
para que luego cuando lo lea pueda sacar por un lado el nombre y por otro lado la dirección y
01:21:25
luego aquí hay una nota asociada que es la información de coordenadas geográficas la
01:21:31
latitud pero en la longitud y la latitud vale también separado con un ant vale voy a leer esto
01:21:38
voy a tener que partir ese script pero en ese string en dos trocitos con un separador que se
01:21:48
la voy a los dos datos en cada lado delante y uno va a ser un dato de coordenada y otro
01:21:54
otro vale es un poco para que os voy a enseñar la aplicación funcionando y luego la vemos un
01:22:00
poco a nivel de diseño vale entonces vale vamos a verlos esto estaba vamos a cortar es así
01:22:10
vale continuar vale está iniciando la sesión y este es el interfaz no es demasiado fancy
01:22:32
demasiado vistoso pero bueno suficiente es un interfaz orientado a tabla muy tabular
01:22:42
entonces por ejemplo que puedo hacer desde este interfaz puedo crear una lista de reparto es
01:22:47
decir puede decir bueno pues voy a iniciar el reparto del día 8 sí y creo una nueva lista de
01:22:56
reparto. ¿Vale?
01:23:02
¿Cómo que vale?
01:23:13
A ver.
01:23:16
Estaba tocando cosas.
01:23:19
¿Qué pasa?
01:23:21
¿Por qué no funciona?
01:23:22
Dame un segundito.
01:23:24
Voy a cerrar
01:23:27
todo esto que pueda tener por aquí.
01:23:30
Voy a cerrar
01:23:36
cualquier aplicación que tenga por aquí.
01:23:39
A ver si se ha quedado en algún...
01:23:41
y este tiene algo corriendo
01:23:45
vale
01:23:50
está haciendo algún cambio, espero que no
01:23:57
cargando
01:24:00
vale, como veis, ya le he dado el permiso
01:24:04
ya tiene ese toque, ya puede
01:24:08
ya puede acceder directamente
01:24:10
vamos a ver si no me deja
01:24:14
cargar la lista
01:24:16
bueno, no sé
01:24:17
os lo muestro en la siguiente
01:24:26
algo he tocado
01:24:28
aparte de
01:24:28
Vamos a probar otras cosas, ¿vale? Vamos a probar, por ejemplo, que pueda borrar, vamos a añadir un nuevo reparto, ¿vale? A este día, al 30 del 4, vamos a añadir un nuevo reparto, ¿vale?
01:24:31
entonces digo dirección calle pues un paseo castellano así no estás
01:24:47
vale puedo ver las coordenadas vale acordaros de esto esto no lo hacía el servicio de mapas
01:24:56
de bing podría obtener a partir de una castilla de una dirección una sobre un poquito más vale
01:25:04
Aquí puedo tener información del producto, ¿vale?
01:25:17
Que quiero llevar y creo un nuevo envío, ¿vale?
01:25:22
Y aquí lo tengo, ¿vale?
01:25:28
Entonces, tengo este nuevo envío con estos datos.
01:25:29
Si lo vemos en Tasks, vemos que efectivamente,
01:25:33
¿dónde lo he añadido?
01:25:40
Lo he añadido en la lista de tareas del día 30, ¿vale?
01:25:41
Era este de aquí, Asia Castellana 245.
01:25:47
el día 30
01:25:50
¿vale? y aquí lo tenemos
01:25:52
como veis, está conectado y ya
01:25:53
los datos que yo voy creando
01:25:56
alguna los va depositando
01:25:58
en
01:26:00
en Google Tasks
01:26:01
voy a borrar una, para que veáis
01:26:04
también en la operación de borrado
01:26:06
que también desaparece
01:26:07
si queréis vamos a borrar
01:26:09
pues en el mismo día 30
01:26:11
vamos a borrar la otra que teníamos
01:26:14
voy a borrar, confirmarlo
01:26:15
la borra en Google Tasks
01:26:19
y luego refresca
01:26:22
de nuevo el listado que me muestra
01:26:24
ahora ya sin esa
01:26:27
esa tarea, vale
01:26:28
aquí ya ha desaparecido, con lo cual
01:26:30
esa conexión
01:26:32
entre
01:26:33
¿qué más cosas hace la aplicación?
01:26:35
podemos encontrar
01:26:43
los mapas, vale, entonces digo
01:26:44
pues paseo castellana 245
01:26:46
enséñame el mapa
01:26:48
y te muestra aquí el mapa
01:26:49
esto también lo hacemos con un API REST
01:26:51
en principio
01:26:54
este API por ejemplo es distinto
01:26:56
porque este API lo estamos utilizando
01:26:58
directamente desde el cliente
01:26:59
no lo utilizamos a través del servidor
01:27:01
por ejemplo el de las coordenadas
01:27:04
sí que lo utilizamos a través del servidor
01:27:05
yo le envío la petición al servidor
01:27:07
al script.hp, él se pone en contacto
01:27:09
con el API de Microsoft
01:27:12
recibe la información
01:27:14
y la pasa
01:27:15
al cliente, o sea que es el servidor
01:27:18
un poco el que tiene la comunicación con el API REST
01:27:20
eso sin embargo no, los mapas
01:27:22
directamente desde el cliente Javascript
01:27:24
se ejecuta un Javascript que permite cargar
01:27:26
este pequeño mapa
01:27:28
dentro de la página
01:27:30
que está cargada en ese momento
01:27:32
vale
01:27:34
volvemos
01:27:35
ya hemos hecho, ya hemos añadido cosas
01:27:39
ya hemos borrado, vamos a
01:27:42
hay una cosa interesante que es la de ordenar
01:27:44
vale, entonces
01:27:46
la de ordenar, lo que hace es
01:27:48
poner de alguna manera, hacer un recorrido
01:27:49
óptimo, que también
01:27:52
es una funcionalidad del API de Microsoft
01:27:54
poner un recorrido
01:27:55
óptimo para hacer
01:27:58
un poco
01:27:59
la entrega
01:28:00
la persona que conduce la furgoneta
01:28:03
pues que sepa que ruta
01:28:07
es la más adecuada dependiendo
01:28:09
de donde están situados
01:28:12
los destinos de los envíos
01:28:12
entonces, vamos a hacer
01:28:15
una cosa, vamos a entrar aquí, vamos a
01:28:17
cambiarlo, a ver si
01:28:19
aquí el día 29
01:28:20
vale
01:28:23
no sé si puedo, podría
01:28:25
cambiar esto, moverlo
01:28:28
vale, voy a moverlo un poquito, vale, para
01:28:29
cambiarlo de orden
01:28:31
vale, lo he cambiado
01:28:33
de orden, con lo cual si yo refresco
01:28:35
la aplicación
01:28:38
pues que tenemos el
01:28:41
Nintendo Epson al final
01:28:43
y Nintendo al principio
01:28:45
vale, donde estaba
01:28:49
vale, estos han cambiado
01:28:52
de alguna manera
01:28:57
y Epson voy a ponerlo al primero
01:28:58
para que se vea más claro el cambio
01:29:00
vale
01:29:03
voy a volver otra vez a cargar
01:29:08
el navegador
01:29:10
voy a refrescar esto, vale, para que me dé
01:29:11
ahora Epson lo va a poner al primero
01:29:14
vale, lo ha cambiado
01:29:16
y ha sido fiel, digamos, al orden
01:29:20
en el que estaba en las tareas de Google Tasks
01:29:22
si yo le pido que lo ordene
01:29:26
ahora de alguna manera va a buscar la ruta óptima
01:29:27
vale, me dice que está ordenada
01:29:32
y como veis ha cambiado el orden
01:29:35
en el que sitúa los productos
01:29:37
en la tabla, ¿por qué?
01:29:41
pues porque en el mapa de la ruta
01:29:43
ha ido colocando los distintos productos
01:29:45
en el orden que piensa que es más óptimo
01:29:52
para hacer un poco la ruta final
01:29:54
este es el punto de partida, que es un punto configurable
01:29:56
Dentro de la configuración de entorno, tú puedes decirle cuál es la latitud y longitud del punto de partida donde está tu almacén y luego directamente, pues, con los elementos que tú le has dado, pues, va de alguna manera conectándolos, haciendo la ruta, pues, imagino que dependiendo del tráfico, dependiendo de...
01:30:00
Todo esto, como digo, lo hace Microsoft, ¿vale?
01:30:18
Él sabe un poco cuál es la ruta óptima en coche para hacer eso.
01:30:22
Y aquí te los ordena.
01:30:25
También te ordena estos elementos para que los vayas viendo en el orden que se van a entregar.
01:30:28
Vale, vamos a borrar una, a ver si esto funciona, una lista de repartos del día 30.
01:30:35
esto sí funciona, no sé por qué
01:30:49
tengo que mirar lo de la lista de reparto
01:30:52
a ver por qué falla
01:30:54
vale, pues esta es la aplicación
01:30:55
un poco para que
01:31:01
veáis un poco
01:31:02
la magnitud y todo
01:31:04
lo que conlleva
01:31:07
hay que gestionar esos APIs REST, hay que gestionar
01:31:08
los APIs también de coordenada
01:31:11
la base de datos de productos
01:31:13
aunque no vayamos a tocar nada en productos
01:31:14
o sea no vamos a insertar nada ni a modificar
01:31:17
nada, pero sí que vamos a extraer información
01:31:19
porque cuando queremos
01:31:21
añadir un reparto
01:31:23
nuevo
01:31:25
obviamente hay que rellenar este
01:31:25
este menú
01:31:29
contextual y todos estos nombres
01:31:31
salen de los nombres de la base de datos
01:31:33
vale
01:31:35
entonces
01:31:37
os voy a
01:31:38
os voy a
01:31:41
iniciar, no me va a dar mucho más tiempo
01:31:43
para entrar en el código, quizás
01:31:45
la semana que viene lo vemos más en el código
01:31:47
hoy voy a trabajar un poquito más
01:31:49
como os decía, en la parte más de diseño
01:31:51
¿vale? y el próximo día
01:31:53
entramos un poquito más
01:31:55
en el código real
01:31:57
entonces
01:31:59
de todas maneras
01:32:00
quizás pueda adelantar
01:32:02
esta presentación para que la tengáis
01:32:05
vosotros ya
01:32:07
disponible
01:32:08
¿vale? para si queréis empezar a codificar
01:32:11
o a entender código os va a facilitar
01:32:13
el trabajo
01:32:15
entonces vamos a ver un poco el diseño de la misma manera
01:32:15
que os he ido presentando
01:32:19
los diseños de otras aplicaciones
01:32:21
que es primero
01:32:22
teniendo claro cuáles van a ser las
01:32:24
ventanas con las que voy a interaccionar
01:32:26
y aquí esta es
01:32:29
posiblemente la ventana más importante
01:32:31
donde hay más botones, donde hay más cosas que tengo que interaccionar
01:32:32
tanto para crear una lista de reparto
01:32:35
como para crear nuevos repartos
01:32:37
borrarlos
01:32:39
pedir información de
01:32:40
mapa de cada uno de ellos
01:32:42
donde están situados
01:32:44
un mapa de la ruta
01:32:45
de todo el reparto
01:32:47
de todos los envíos de ese día
01:32:50
bueno pues
01:32:52
esta ventana tiene bastante funcionalidad
01:32:54
luego tengo este formulario
01:32:57
que es el formulario para crear un reparto
01:32:58
con una dirección
01:33:01
la que tengo que
01:33:02
completarla con las coordenadas
01:33:03
de la dirección, el usuario
01:33:07
el tío de la docencia solo metería la dirección
01:33:08
y en principio el producto
01:33:11
¿vale? no metemos
01:33:13
de más información, esto es un poquito
01:33:14
de juguete, pero bueno, por lo menos el producto
01:33:17
que tenemos que repartir.
01:33:19
Y las coordenadas, tenemos
01:33:21
la altitud, longitud y altitud,
01:33:23
que esta finalmente no se usa, obviamente, para
01:33:24
saber dónde está el tema, pero bueno,
01:33:26
la utilizamos también como ejercicio
01:33:29
de recuperación de
01:33:31
información geográfica.
01:33:32
¿Vale? Tenemos los mapas
01:33:35
que solamente tienen este botón de volver.
01:33:37
Tanto el mapa de situación
01:33:39
de un reparto como el
01:33:40
de la ruta completa. Bueno, solo tiene
01:33:43
este botón.
01:33:45
Vale, pues una vez que tenemos ya claro cuáles son las pantallas de mi aplicación, yo puedo empezar a pensar un poco más en la aplicación como tal. Y posiblemente lo que os interesa es pensar, para empezar, en este tipo de diagrama.
01:33:45
Un diagrama de arquitectura. Es un diagrama en el que tenéis que empezar a tomar decisiones de cómo vais a llevar a cabo, cómo vais a implementar la funcionalidad, qué elementos necesitáis y qué elementos vais a tener a vuestra disposición.
01:34:03
cada uno va a necesitar
01:34:20
una parte de implementación
01:34:22
entonces este es el cliente
01:34:24
y este es el servidor
01:34:26
aquí es donde vamos a tener nuestros scripts PHP
01:34:28
y aquí es donde se va a ejecutar
01:34:31
o ejecutar nuestros scripts Javascript
01:34:32
y vamos a tener por un lado
01:34:35
una comunicación estándar, por ejemplo
01:34:39
si enviamos un formulario
01:34:40
pues vamos a solicitar
01:34:42
que se haga cierta funcionalidad
01:34:44
dentro del servidor
01:34:47
que se ejecute en script y posiblemente
01:34:49
que se lance una VistaBlade, ¿vale?
01:34:50
Este es uno de los flujos que ya hemos visto.
01:34:53
Yo le pido una petición, hay un script de control,
01:34:56
recibe esa petición, la procesa y lanza una VistaBlade
01:35:00
que he tenido, obviamente, que he programado previamente.
01:35:05
Esa VistaBlade retorna y se carga en el navegador, ¿vale?
01:35:09
Uno de los flujos.
01:35:13
Otro de los flujos que va a haber dentro de esta aplicación
01:35:15
es IaaS, ¿vale?
01:35:17
O sea que no voy a recargar la página, sino que voy a solicitar directamente mediante AJAX una información, unos datos. Por ejemplo, el tema de las coordenadas. Pues a lo mejor el tema de las coordenadas lo puedo pedir por AJAX.
01:35:18
Aquí cuando pido coordenadas, en vez de volver otra vez a representar todo este formulario, a lo mejor este botón, como veis, tiene que funcionar por AJAX.
01:35:33
Y yo le envío la petición al servidor, el servidor hace la comunicación con su servicio REST, se hace con las coordenadas y me las envía en un ficherito a Json.
01:35:43
Y yo directamente, pim, pim, pim, las coloco aquí.
01:35:52
¿Vale?
01:35:56
Puede ser un uso sin falta de tener que volver a recargar el formulario completo.
01:35:57
puede ser un uso interesante de IAX
01:36:01
así que va a haber ciertas comunicaciones
01:36:03
entonces tengo que empezar a pensar un poco
01:36:05
qué comunicaciones quiero hacer mediante el flujo
01:36:07
estándar y qué comunicaciones
01:36:09
pues puede ser interesante que haga mediante
01:36:11
IAX
01:36:13
dentro del servidor yo obviamente
01:36:13
voy a tener que por un lado
01:36:17
establecer comunicación con la base de datos
01:36:18
de proyecto utilizando PDO
01:36:21
o sea que voy a tener un DAO
01:36:22
para productos
01:36:24
un producto DAO
01:36:27
No va a tener implementado ningún método de insertar, ni modificar, ni borrar, pero sí a lo mejor alguno de obtener, ¿no? Obtener productos, porque los necesito, los nombres al menos, para poder rellenar este formulario, ¿vale? Todos los productos aquí, este menú desplegable.
01:36:28
voy a tener esta parte de pd voy a también interacción interaccionar con con mapas vale
01:36:45
esto para que esto es para la parte de obtener las coordenadas esto es la parte de obtener las
01:36:54
coordenadas no los voy a obtener yo con mi código voy a interaccionar con bing map rest services
01:37:01
vale tengo que tener mi cuenta que voy a tener registrada mi clave etcétera etcétera para hacer
01:37:07
lo que hicimos en la primera tutorial
01:37:12
¿verdad? en la primera tutorial hicimos ya
01:37:14
esto de dar una dirección
01:37:16
y él directamente me da la información
01:37:18
de coordenadas
01:37:20
pero también voy a interaccionar
01:37:22
con Google Tasks
01:37:24
¿vale? y este es otro
01:37:25
API de otro proveedor, en este caso
01:37:28
Google, obviamente
01:37:30
previo, este es un servicio que requiere
01:37:32
este tipo de autorización previa con
01:37:34
auth 2.0
01:37:36
¿vale? o sea que voy a interaccionar
01:37:37
con Google, primero
01:37:40
en con su servidor de off que es justo el código que os enseñe hace un momentito pero también
01:37:42
utilizando el toque de acceso voy a utilizar el api de taxis todo esto en comunicación con
01:37:49
google vale y desde el cliente aparte de aquí de ejecutar javascript que voy a tener que programar
01:37:56
también cierto javascript para ciertas funcionalidades ya veréis el programa y
01:38:02
y veréis un poco lo fácil y lo
01:38:08
flexible y lo interesante
01:38:10
que puede ser jQuery
01:38:12
si es que no utilizáis un framework de cliente
01:38:13
y desde aquí también voy
01:38:16
a interaccionar, desde el cliente voy a
01:38:18
interaccionar con Microsoft
01:38:20
Maps, ¿vale? ¿Para qué? Pues para
01:38:21
construir estos mapas de aquí
01:38:24
estos mapas de aquí
01:38:25
directamente
01:38:27
desde la aplicación
01:38:29
JavaScript
01:38:31
¿vale? Y esto ya os empieza
01:38:32
a dar una idea de cómo se
01:38:36
programan sin frameworks
01:38:38
que obviamente
01:38:40
no es la manera
01:38:42
siempre se va a programar con frameworks, pero podéis intuir
01:38:43
cómo
01:38:46
se pone de alguna manera
01:38:48
todo el conjunto de lo que es una aplicación web
01:38:50
aquí ya veis
01:38:52
desde el cliente, javascript
01:38:53
vocación a APIs desde el mismo cliente
01:38:55
código que se ejecuta en el servidor
01:38:58
una base de datos de la que se
01:39:00
recuperan informaciones, consultas
01:39:02
a servicios externos
01:39:04
utilización de AJAX
01:39:06
en ciertas de las peticiones
01:39:07
en las que no conviene recargar toda la página
01:39:10
bueno, ahora
01:39:12
esto un poco también para que veáis un poco
01:39:14
la imagen completa
01:39:17
de lo que puede ser una aplicación
01:39:19
semi-real
01:39:20
como digo, todavía no
01:39:22
yo creo que no se lo puede considerar real del todo
01:39:24
pero sí que ya podéis un poco vislumbrar
01:39:27
que aquí pues tendremos
01:39:29
un framework PHP
01:39:30
como Laravel o como Zend
01:39:32
Aquí tendremos un framework de cliente como Angular y empezamos un poco a vislumbrar cómo podemos construir una aplicación web ya profesional o ya en el ámbito real, ¿no? Finalmente, ¿no? Con todo lo que hemos ido o habéis ido trabajando con los módulos del curso, finalmente llegáis a tener quizás esa visión completa y este ejercicio os da un poco la posibilidad de ponerlo todo junto.
01:39:34
Vale. Tenemos un diseño orientado a objetos, ¿sí? Obviamente, las aplicaciones siempre van a trabajar con ese diseño. Los objetos nos van a ir bien porque va a ser con lo que van a interaccionar los scripts de control.
01:40:05
Los clientes de control van a trabajar con objetos de lista de reparto, van a trabajar con objetos de reparto y cada reparto va a estar linkado de alguna manera a un producto, ¿vale? Que es el producto que reparte, ¿sí? Cada uno tiene sus propiedades, ¿sí? Este es el diagrama de clases.
01:40:20
que conviene también tener claro un poco
01:40:38
por eso esta documentación
01:40:40
siempre que podáis
01:40:42
establecer un poquito estos diagramas básicos
01:40:44
con qué vais a estar trabajando
01:40:47
y qué tipo de información
01:40:49
vais a representar como objetos
01:40:51
conviene un poco que la
01:40:53
que la tengáis
01:40:55
más o menos clara
01:40:56
y en cuanto a los scripts de control
01:40:57
vamos a trabajar con un único script de control
01:41:00
esto quizá os llame la atención
01:41:03
podríamos haberlo separado en varios
01:41:05
porque sí que hay varios tipos de funcionalidad
01:41:06
pero ya veréis como con un único
01:41:09
script de control, un index
01:41:11
bueno, largo pero bien estructurado
01:41:12
tampoco va a ser muy complicado
01:41:15
de seguir porque
01:41:17
cada proceso de cada operación nos va a llevar
01:41:18
muy poco código, ¿por qué? porque siempre va a
01:41:21
delegar, desde el script de control rápidamente
01:41:23
se delega la funcionalidad en objetos
01:41:25
que se han creado
01:41:27
no se pone el script de control a hacer
01:41:28
cosas demasiado complejas, a desarrollar
01:41:31
lógicas complejas, no, crea un objeto
01:41:33
y le pasa la funcionalidad.
01:41:35
Le devuelve el resultado del objeto
01:41:38
y con eso continúa con el proceso de la solicitud.
01:41:39
Y ya veréis cómo, a lo mejor son 6, 7 líneas
01:41:43
de código en cada una de las peticiones
01:41:46
que le pueden llegar a index.
01:41:49
Pero vamos a tener un único index.
01:41:50
Y por lo demás, vamos a tener
01:41:52
varios ficheritos Javascript
01:41:54
que me van a hacer ciertas de las operativas
01:41:56
y de las funcionalidades requeridas.
01:41:59
Y por otro lado, vamos a tener
01:42:02
conexión a la base de datos,
01:42:03
vamos a hacer unos DAOs
01:42:04
por DAOs
01:42:05
parte del producto DAO
01:42:07
el producto DAO
01:42:08
ataca a la base de datos
01:42:09
MySQL
01:42:11
pero estos dos DAOs
01:42:11
atacan
01:42:12
al servicio REST
01:42:14
de Google Tasks
01:42:16
bueno, así que cuando
01:42:17
queramos
01:42:19
dar persistencia
01:42:20
a una tarea
01:42:22
obviamente
01:42:23
le vamos a pasar
01:42:24
esa tarea
01:42:25
a este
01:42:26
perdón
01:42:27
un reparto
01:42:28
le vamos a dar ese reparto
01:42:29
a este DAO
01:42:30
para que lo cree
01:42:31
pero no
01:42:32
ese código de crear
01:42:33
no va a tener PDO, sino que va a tener
01:42:36
llamadas a la API REST
01:42:38
de Google Tasks para que
01:42:40
se almacene
01:42:42
ese reparto en formato
01:42:43
tarea dentro del
01:42:46
servicio de Google Tasks.
01:42:48
Y luego una serie de vistas
01:42:52
que también vamos a tener.
01:42:53
Vamos a utilizar también
01:42:55
el formato estándar en el que
01:42:56
le escribe control.
01:42:58
También tira de vistas
01:43:01
Blade que se han escrito previamente.
01:43:03
para que le pasa parámetros para que finalmente se visualicen en en el navegador vale pues yo creo
01:43:05
que hasta aquí hasta aquí un poco os adelanto un poquito toda la operativa y la semana que viene
01:43:12
entramos ya en el código concreto por cada una de las peticiones vamos a ver qué parte se hace con
01:43:18
ayax qué parte requiere una persistencia con los dados qué parte y vamos a ir revisando el código
01:43:26
de cada una
01:43:34
de las partes de la aplicación
01:43:36
para ver cómo realmente la operación
01:43:38
se lleva a cabo. Vale, pues
01:43:40
venga, ¿preguntas finales?
01:43:44
No, muchas gracias
01:43:48
por la clase. No, pues
01:43:50
venga, pues a vosotros. Yo solo
01:43:51
quería preguntar lo del doten.
01:43:53
Eso es para lo de las variables
01:43:56
de entorno, ¿no? Sí, justo.
01:43:57
El doten es un ficherito
01:44:00
que tienes...
01:44:01
Te viene un ejemplo, ¿vale?
01:44:03
Entonces, aquí tienes que
01:44:05
En vez de poner doten.ejemplo, le borras .ejemplo
01:44:07
y aquí le metes todos los datos tuyos concretos.
01:44:11
Vale, entonces, map api key es la clave que te haya dado Big Maps
01:44:15
cuando te ha registrado.
01:44:19
Lat base es la latitud en la que está tu almacén.
01:44:21
Busca una ubicación en Madrid, ¿vale?
01:44:26
Y con Google Maps consulta cuál es el dato de latitud.
01:44:29
Vale, será un numerito.
01:44:35
Vale.
01:44:37
Lo mismo con longitud, lo mismo con país, ciudad, localidad, para ver la base y luego tienes aquí los datos de la base de datos. ¿Y hay algún dato más? A ver, dame un segundito, ¿hay algún dato más? Espera, que te lo refresco. No te lo voy a poner en pantalla, ¿vale? Porque aquí yo tengo mis datos, pero te voy a poner algún dato más, es verdad.
01:44:37
Vale, te voy a poner estos datos, son, dame un segundito, y te lo pongo todo, veo que se ha quedado un poco obsoleto, aquí, vale, no, no, sí, no, es parecido, pensé que era más distinto, pero es parecido.
01:44:58
Tienes toda la parte de base de datos
01:45:34
Listo
01:45:52
Sería algo de este tipo
01:45:53
Aquí está utilizando por ejemplo
01:45:56
Root sin password
01:45:58
Pero sería algo de este tipo
01:46:00
Sería algo de este tipo
01:46:01
Vale
01:46:05
El DB host 127.0.1
01:46:07
la puerta 3306, el nombre de la base
01:46:09
de datos. Recuerda que accedemos
01:46:11
a la base de datos proyecto.
01:46:13
Route sin password. Esto no te va a dar
01:46:16
problemas de permisos. Luego tienes
01:46:17
Map API Key, que es lo que
01:46:20
efectivamente
01:46:21
te dé
01:46:22
la web de Microsoft.
01:46:24
Tienes la latitud,
01:46:28
la longitud, el país, la ciudad, la localidad
01:46:30
donde está tu almacén.
01:46:32
Para que luego, cuando
01:46:35
quiera elaborar la ruta, sepa de dónde tiene
01:46:36
que salir el camión.
01:46:38
Y el único que te queda que tienes que rellenar es este de aquí, que es donde están tus credenciales de Google, ¿vale? Entonces, este es el ficherito, el ficherito que te has descargado, el ficherito Json que te has descargado de Google, ¿eh? Cuando has hecho el registro de la aplicación, puede ser algo así, por ejemplo.
01:46:39
vale
01:47:09
y ese sería el nombre del fichero
01:47:11
en el que te has descargado
01:47:13
los credenciales
01:47:16
vale
01:47:17
con estos datos de configuración ya debería
01:47:19
de funcionar
01:47:22
la aplicación, vale, si los tienes correctos
01:47:23
vale
01:47:26
muchas gracias Iván
01:47:27
vale, venga Luis
01:47:29
ya la otra semana es la última tutoría, verdad
01:47:31
no, va a haber alguna más
01:47:33
va a haber alguna más
01:47:35
La semana que viene voy a terminar ya con el código de la tarea 8 y ya en principio terminaría, digamos, de presentar material, pero el resto yo estaré disponible ya sea para resolver a lo mejor ejercicios de los exámenes de otros años o para resolver dudas directamente.
01:47:36
Vale.
01:47:56
vale, o sea que
01:47:57
veré, si yo traigo material
01:47:59
y merece la pena lo grabaré, si no pues
01:48:02
básicamente me conectaré
01:48:03
y si la gente tiene dudas pues que se conecte
01:48:05
y os puedo echar una mano
01:48:07
en el proceso este de preparación
01:48:09
vale, muchas gracias
01:48:11
venga Luis, ánimo
01:48:14
hasta luego
01:48:15
- Autor/es:
- Iván Rodríguez
- Subido por:
- Jorge Iván R.
- Licencia:
- Reconocimiento - No comercial - Compartir igual
- Visualizaciones:
- 16
- Fecha:
- 27 de junio de 2024 - 15:48
- Visibilidad:
- URL
- Centro:
- IES VIRGEN DE LA PAZ
- Duración:
- 00′ 30″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 149.78 MBytes