1 00:00:00,560 --> 00:00:06,400 Listo. Venga, pues empezamos con la tutoría de esta semana. 2 00:00:08,640 --> 00:00:17,399 Una de las últimas ya que tenemos pendientes en cuanto a seguir avanzando en contenido. 3 00:00:18,320 --> 00:00:23,160 Todavía nos quedan algunas más que intentaremos, no sé, resolver exámenes del año pasado 4 00:00:23,160 --> 00:00:40,420 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. 5 00:00:42,920 --> 00:00:50,240 Ordinaria, que la pruebe, pues estupendo, y si no, pues hay otra oportunidad en la convocatoria extraordinaria. 6 00:00:51,039 --> 00:01:04,840 Vale, pues hoy voy a hacer un poquito de breve repaso de lo último que cubrimos en la tutoría pasada, 7 00:01:04,939 --> 00:01:12,519 que fue una tutoría, bueno, pues también bastante tensa porque se incorporó bastante código de ejercicios 8 00:01:12,519 --> 00:01:14,459 que utilizaban APIs REST 9 00:01:14,459 --> 00:01:16,480 es otro tipo de 10 00:01:16,480 --> 00:01:17,920 servicios web más 11 00:01:17,920 --> 00:01:20,500 importantes y cabe que los servicios 12 00:01:20,500 --> 00:01:21,400 SOAP porque 13 00:01:21,400 --> 00:01:24,400 su uso es bastante más 14 00:01:24,400 --> 00:01:27,640 más frecuente, más popular 15 00:01:27,640 --> 00:01:30,680 con lo cual es un 16 00:01:30,680 --> 00:01:32,739 un ámbito de 17 00:01:32,739 --> 00:01:34,420 de 18 00:01:34,420 --> 00:01:35,299 trabajo 19 00:01:35,299 --> 00:01:38,540 que os animo a que 20 00:01:38,540 --> 00:01:39,439 trabajéis 21 00:01:39,439 --> 00:01:44,819 y lo preparéis bien 22 00:01:44,819 --> 00:01:47,739 lo digo porque si trabajáis en la parte backend 23 00:01:47,739 --> 00:01:51,159 mucho de la interfaz que vais a tener con el frontend va a ser 24 00:01:51,159 --> 00:01:54,180 vía servicios REST y muchas veces 25 00:01:54,180 --> 00:01:57,060 es obviamente responsabilidad del programador 26 00:01:57,060 --> 00:02:00,099 del backend el programar esos APIs 27 00:02:00,099 --> 00:02:03,060 para que desde el frontend se pueda hacer uso 28 00:02:03,060 --> 00:02:05,799 de ellos y se pueda solicitar toda la información que luego 29 00:02:05,799 --> 00:02:09,080 directamente desde Javascript 30 00:02:09,080 --> 00:02:16,599 o normalmente utilizando frameworks de cliente, pues esa información se va convirtiendo en contenido 31 00:02:16,599 --> 00:02:22,039 dentro de las páginas que hacen de interfaz con la aplicación del usuario. 32 00:02:23,080 --> 00:02:28,740 Entonces, es un área que debéis de dominar o debéis de alguna manera al menos de conocer 33 00:02:28,740 --> 00:02:38,719 de cara a que si ya vais a hacer prácticas o estáis aplicando por algún puesto, 34 00:02:39,080 --> 00:02:55,280 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. 35 00:02:55,280 --> 00:03:16,139 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. 36 00:03:16,400 --> 00:03:26,180 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. 37 00:03:26,979 --> 00:03:38,740 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. 38 00:03:39,740 --> 00:03:46,740 Luego el código que se pide también es un código, bueno, que requiere también tiempo y requiere trabajarlo con calma. 39 00:03:51,060 --> 00:03:58,939 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. 40 00:03:59,060 --> 00:04:16,060 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. 41 00:04:16,060 --> 00:04:18,980 pero yo recomiendo 42 00:04:18,980 --> 00:04:20,040 que a lo mejor no 43 00:04:20,040 --> 00:04:22,980 dediquéis 44 00:04:22,980 --> 00:04:24,939 demasiado tiempo en poner esta aplicación 45 00:04:24,939 --> 00:04:25,420 a punto 46 00:04:25,420 --> 00:04:28,800 y dejéis quizá, o os quedéis 47 00:04:28,800 --> 00:04:30,620 sin tiempo para un repaso más general 48 00:04:30,620 --> 00:04:32,480 de, como digo 49 00:04:32,480 --> 00:04:34,899 si trabajáis en esta aplicación vais a 50 00:04:34,899 --> 00:04:36,439 estar practicando, cosas de 51 00:04:36,439 --> 00:04:38,579 que prácticamente tenéis que 52 00:04:38,579 --> 00:04:40,779 llevar a cabo, pero bueno, dejar 53 00:04:40,779 --> 00:04:42,759 unos días pues para ver las otras 54 00:04:42,759 --> 00:04:44,699 tareas que se han hecho en otras unidades, para 55 00:04:44,699 --> 00:04:47,100 de los códigos que se han ido trabajando 56 00:04:47,100 --> 00:04:48,839 para hacer un repaso un poquito 57 00:04:48,839 --> 00:04:50,939 más completo, porque esta tarea os puede 58 00:04:50,939 --> 00:04:52,180 consumir, yo creo 59 00:04:52,180 --> 00:04:54,779 muchísimo del tiempo que os queda 60 00:04:54,779 --> 00:04:55,959 de cara 61 00:04:55,959 --> 00:04:58,660 o hasta el final del curso 62 00:04:58,660 --> 00:05:00,220 tampoco quedan muchas semanas 63 00:05:00,220 --> 00:05:02,660 menos de cuatro semanas para 64 00:05:02,660 --> 00:05:03,740 la primera prueba 65 00:05:03,740 --> 00:05:06,800 pero digo, es un código 66 00:05:06,800 --> 00:05:08,779 muy interesante, y entonces esta tutoría 67 00:05:08,779 --> 00:05:10,920 y quizá la tutoría 68 00:05:10,920 --> 00:05:12,819 de la semana que viene, os voy 69 00:05:12,819 --> 00:05:19,379 dar mucha información sobre esta sobre esta aplicación a nivel de código para que uno 70 00:05:19,379 --> 00:05:24,639 entendáis el código bien 2 si tenéis dudas y hay algo que no entendéis podéis preguntarlo 71 00:05:24,639 --> 00:05:31,040 sobre la explicación de la tarea y 3 si os animáis si la hacéis que si vais un poquito 72 00:05:31,040 --> 00:05:39,939 colgados de tiempo os lo recomiendo del todo tengáis una más fácil de alguna manera aproximación 73 00:05:39,939 --> 00:05:47,379 a resolverlo, porque voy a trabajar la versión final, la que os voy a presentar y voy a explicar 74 00:05:47,379 --> 00:05:58,939 la versión de la solución. Entonces, esa es un poco la idea. Voy a empezar haciendo ese breve repaso 75 00:05:58,939 --> 00:06:13,040 de lo que es out y viene un poco a establecer un método de autenticación para que una aplicación 76 00:06:13,040 --> 00:06:20,439 pueda acceder a datos que son privados de un usuario de nuevo imaginaros una persona que 77 00:06:20,439 --> 00:06:32,019 tiene sus fotos en un servicio de cloud obviamente el acceso a esas fotos es autenticado porque son 78 00:06:32,019 --> 00:06:39,120 de ese usuario y cualquiera o él cuando quiere hacer cualquier operación de gestión sobre esas 79 00:06:39,120 --> 00:06:46,620 fotos pues se le pide que se autentique qué ocurre cuando una aplicación para ofrecer un 80 00:06:46,620 --> 00:06:55,420 servicio a ese mismo usuario viene bien por la operativa del servicio de esa aplicación tener 81 00:06:55,420 --> 00:07:03,060 acceso a los datos privados que su usuario puede tener una red social en un repositorio suyo privado 82 00:07:03,060 --> 00:07:08,660 en millones de aspectos en los que nosotros estamos dados de alta y con nuestra contraseña 83 00:07:08,660 --> 00:07:15,300 podemos acceder en temas de banca temas de registros personales etcétera cómo se soluciona 84 00:07:15,300 --> 00:07:22,500 ese problema no hay aplicaciones muy útiles muy interesantes que por como digo por la operativa 85 00:07:22,500 --> 00:07:29,759 y por facilitar el acceso a esa información pues el usuario ve con buenos ojos que pueda 86 00:07:30,879 --> 00:07:37,120 poder o que tenga posibilidad de acceder a esa información privada pero claro aquí hay 87 00:07:37,120 --> 00:07:50,720 tres agentes principales, el usuario final, esa aplicación y el proveedor o el garante 88 00:07:50,720 --> 00:07:57,079 de que esos datos no sean accedidos por otra persona o por otro mecanismo que no sea el 89 00:07:57,079 --> 00:08:04,860 del usuario final. En este caso, como digo, Picasa o Google Fotos o Facebook o tu banco 90 00:08:04,860 --> 00:08:14,579 o obviamente esa aplicación esa organización no puede o no debería permitir que cualquier 91 00:08:14,579 --> 00:08:20,300 aplicación simplemente le solicitará los datos de un usuario y dárselo sin más o sea que hay 92 00:08:20,300 --> 00:08:32,179 como 33 agentes ahí funcionando entonces para solucionar esto se diseña este protocolo esta 93 00:08:32,179 --> 00:08:42,179 interacción a tres bandas que se llama oce en la versión 2.0 vale una que se llama open con 94 00:08:42,179 --> 00:08:50,240 ex hay tenido varios nombres y de ahí ha salido off 1.0 y ahora la que un poco más revisado un 95 00:08:50,240 --> 00:08:56,860 poco más segura supongo la verdad más seguridad es la versión de off 2.0 entonces vamos a ver 96 00:08:56,860 --> 00:09:04,460 cómo funciona en un ejemplo muy alto nivel, luego vamos a ver lo específico con la aplicación que 97 00:09:04,460 --> 00:09:12,980 os mostré y que espero que ya esta segunda vuelta ya tenga más sentido, cómo funciona la operativa 98 00:09:12,980 --> 00:09:20,139 y luego vamos a verlo en un tercer escenario que es el código que utilizamos dentro de la tarea 99 00:09:20,139 --> 00:09:22,159 para hacer esta operativa 100 00:09:22,159 --> 00:09:24,639 vale, vamos a ver un poquito 101 00:09:24,639 --> 00:09:25,860 vamos a explicar un poquito la tarea 102 00:09:25,860 --> 00:09:28,399 contextualmente, un poquito para que entendáis 103 00:09:28,399 --> 00:09:30,360 por qué es necesario utilizar 104 00:09:30,360 --> 00:09:31,759 y luego vamos a ver el código 105 00:09:31,759 --> 00:09:34,179 que hace que esto 106 00:09:34,179 --> 00:09:35,960 funcione y que una aplicación 107 00:09:35,960 --> 00:09:38,779 al principio la que vosotros vais a programar 108 00:09:38,779 --> 00:09:40,779 va a poder acceder 109 00:09:40,779 --> 00:09:43,200 a tareas 110 00:09:43,200 --> 00:09:45,100 que es una aplicación 111 00:09:45,100 --> 00:09:45,480 de Google 112 00:09:45,480 --> 00:09:48,720 obviamente cada uno tiene la suya, si no quiere que nadie 113 00:09:48,720 --> 00:09:50,500 acceda a ellas, es un 114 00:09:50,500 --> 00:09:52,840 servicio de este tipo 115 00:09:52,840 --> 00:09:54,639 en el que cada usuario puede 116 00:09:54,639 --> 00:09:56,639 establecer su agenda 117 00:09:56,639 --> 00:09:57,879 de tareas, pero 118 00:09:57,879 --> 00:10:00,220 es una información privada 119 00:10:00,220 --> 00:10:02,240 ¿cómo puede ser que una aplicación 120 00:10:02,240 --> 00:10:04,580 pueda acceder a esa 121 00:10:04,580 --> 00:10:06,740 información privada de un usuario, siempre que le dé 122 00:10:06,740 --> 00:10:07,539 permisos? 123 00:10:08,860 --> 00:10:10,620 Vale, entonces vamos a ver con esos tres 124 00:10:10,620 --> 00:10:12,539 escalones y espero que con esas 125 00:10:12,539 --> 00:10:14,179 tres perspectivas sí que 126 00:10:14,179 --> 00:10:16,799 más o menos entendamos 127 00:10:16,799 --> 00:10:17,519 cómo 128 00:10:17,519 --> 00:10:19,820 funciona esto y cómo se hace 129 00:10:19,820 --> 00:10:21,539 y cómo lo podemos poner en marcha. 130 00:10:22,580 --> 00:10:23,679 Vale, pues este es el ejemplo que 131 00:10:23,679 --> 00:10:25,820 os planteaba la semana pasada. 132 00:10:26,860 --> 00:10:27,879 Es una aplicación 133 00:10:27,879 --> 00:10:29,639 que lo que hace es 134 00:10:29,639 --> 00:10:32,139 coger fotos e imprimir 135 00:10:32,139 --> 00:10:33,720 álbumes que te los envía a casa. 136 00:10:35,179 --> 00:10:35,860 Se llama Printfast. 137 00:10:36,860 --> 00:10:37,879 Y esta es la web 138 00:10:37,879 --> 00:10:39,019 de esa aplicación. 139 00:10:39,019 --> 00:10:40,779 Acordaros que tenemos las tres patas. 140 00:10:40,879 --> 00:10:41,399 El usuario, 141 00:10:42,399 --> 00:10:44,759 la aplicación, 142 00:10:44,960 --> 00:10:46,259 que da un servicio a ese usuario 143 00:10:46,259 --> 00:10:54,720 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. 144 00:10:55,799 --> 00:11:05,740 Entonces, esta aplicación que imprime álbumes le viene muy bien poder acceder directamente a los repositorios de fotos del usuario. 145 00:11:05,740 --> 00:11:12,620 En vez de pedirle al usuario que esté haciendo un upload de cada foto, que eso le podría llevar mucho tiempo al usuario, 146 00:11:12,620 --> 00:11:14,759 más fácil quizá 147 00:11:14,759 --> 00:11:16,600 que el usuario le dé acceso 148 00:11:16,600 --> 00:11:18,600 a esas fotos en el cloud 149 00:11:18,600 --> 00:11:19,559 suyas 150 00:11:19,559 --> 00:11:22,720 y pues presentárselas aquí en pantalla 151 00:11:22,720 --> 00:11:24,080 que simplemente con un clic 152 00:11:24,080 --> 00:11:26,519 unas cajitas de verificación diga pues 153 00:11:26,519 --> 00:11:27,960 quiero esta y quiero esta y quiero esta 154 00:11:27,960 --> 00:11:30,620 mejora mucho el servicio 155 00:11:30,620 --> 00:11:33,000 mejora muchísimo la experiencia del usuario 156 00:11:33,000 --> 00:11:34,659 que no tener que estar haciendo 157 00:11:34,659 --> 00:11:36,659 cargas de las 158 00:11:36,659 --> 00:11:38,460 fotos que tiene localmente 159 00:11:38,460 --> 00:11:39,539 en su PC 160 00:11:39,539 --> 00:11:41,909 vale 161 00:11:41,909 --> 00:11:50,190 pero para hacer esto tenemos que involucrar aplicas a google tenemos que involucrarle de 162 00:11:50,190 --> 00:11:57,149 alguna manera porque es el quien finalmente va a dar servicio a print fast para acceder a las 163 00:11:57,149 --> 00:12:04,850 fotos de vamos a llamarle john juan juan entonces como como hacemos imaginaros yo en un principio 164 00:12:04,850 --> 00:12:11,269 esto es print fast es una página que viene del servidor de print fast vale y juan yo soy juan 165 00:12:11,269 --> 00:12:19,370 como usuario final y le doy a mi casa seleccionó cuál es el proveedor donde tengo mis fotos que 166 00:12:19,370 --> 00:12:28,610 quiero que sean parte del álbum digo mi casa que ocurre en ese momento en ese momento lo que hace 167 00:12:28,610 --> 00:12:41,070 print fast es reenviar mi navegador empezar como siempre yo le doy a aquí a le doy a picasa esto 168 00:12:41,070 --> 00:12:48,669 va al servidor de picasa efectivamente y del perdón estaba el servidor de print fast y 169 00:12:48,669 --> 00:12:54,610 efectivamente y ese servidor le manda una redirección al navegador vale no le manda 170 00:12:54,610 --> 00:12:58,870 ninguna respuesta como página cargada sino que le hace un header location una redirección 171 00:13:00,690 --> 00:13:07,610 a donde apunta esa redirección ahora se apunta a picasa así que el navegador lo que hace es bueno 172 00:13:07,610 --> 00:13:12,669 le pide eso a print fast pero lo que recibe de print fast no es ninguna página sino es un mensaje 173 00:13:12,669 --> 00:13:18,610 de print fast diciendo oye para resolver esa petición tienes que mandar otra petición a esta 174 00:13:18,610 --> 00:13:26,210 nueva url y esa url sí que va a google sí que va a picasa para lo que antes era google fotos 175 00:13:27,529 --> 00:13:33,330 es como de repente el navegador con este con este juego de redirecciones que hace el servidor el 176 00:13:33,330 --> 00:13:40,429 navegador de repente en vez de estar apuntando por infas se le pide que apunte a picas vale 177 00:13:40,429 --> 00:13:49,870 entonces ya donde pues al servidor de out 2.0 de picasa a una url donde picasa o google va a 178 00:13:49,870 --> 00:13:56,409 a establecer un diálogo de autenticación con ese usuario pero como veis print fast ahora está fuera 179 00:13:56,409 --> 00:14:05,330 del bucle no nunca va a poder capturar ni mis claves ni mi nombre de usuario con picasa porque 180 00:14:05,330 --> 00:14:12,110 ya print fast no está para nada en esta petición nuestra petición sale directamente de mi navegador 181 00:14:12,110 --> 00:14:14,269 hacia Picasa, hacia Google 182 00:14:14,269 --> 00:14:16,889 ¿vale? ¿qué hace Google? 183 00:14:17,029 --> 00:14:19,250 pues coge el control, Google coge el control 184 00:14:19,250 --> 00:14:20,990 y empieza a establecer un diálogo 185 00:14:20,990 --> 00:14:24,600 conmigo, vale, ante esa petición 186 00:14:24,600 --> 00:14:26,860 que yo le envío, que es fruto de una redirección 187 00:14:26,860 --> 00:14:28,379 que me ha hecho Printfast 188 00:14:28,379 --> 00:14:30,440 él pues envía, empieza a 189 00:14:30,440 --> 00:14:32,700 mandarme información a mi navegador 190 00:14:32,700 --> 00:14:34,279 ¿vale? páginas dinámicas 191 00:14:34,279 --> 00:14:36,779 con las que yo interacciono, y esas páginas 192 00:14:36,779 --> 00:14:38,820 lo que me van a pedir es permiso 193 00:14:38,820 --> 00:14:40,600 para decir, oye, hay una 194 00:14:40,600 --> 00:14:42,340 aplicación que se llama 195 00:14:42,340 --> 00:14:51,350 print fast que quiere tener acceso a tus fotos vale y posiblemente alguna información más a tu 196 00:14:51,350 --> 00:14:59,470 perfil incluida tu foto tu dirección de correo de siempre se va quedando ahí con datos tuyos 197 00:14:59,470 --> 00:15:08,350 pero bueno imaginaros principalmente tus fotos le quieres dar acceso y aquí el usuario pues tiene 198 00:15:08,350 --> 00:15:14,590 esa posibilidad de decir no de alguna manera pues no no no quiere utilizar servicio print fast de 199 00:15:14,590 --> 00:15:20,110 esta manera y lo venía o no dice mira me parece que voy a confiar en print fast principio a tener 200 00:15:20,110 --> 00:15:30,690 acceso a mis fotos solamente a verlas pues le voy a dar acceso vale entonces en ese momento 201 00:15:32,250 --> 00:15:40,250 google ya de alguna manera tiene que autorizar a print fast o tiene que permitir a print fast 202 00:15:40,250 --> 00:15:47,649 o le va a permitir a print fast que pueda acceder a los datos de juan una vez que le ha dado acceso 203 00:15:48,750 --> 00:15:54,769 como se hace eso nos hace con ciertos códigos con ciertos toques que llaman entonces una vez que yo 204 00:15:54,769 --> 00:16:02,730 hago grant access vuelve en este caso google a utilizar ese mecanismo de redirección en vez de 205 00:16:02,730 --> 00:16:08,690 mandarle una página para que cargue en el navegador en juan en el navegador de juan lo que hace una 206 00:16:08,690 --> 00:16:17,029 redirección pero bueno pues ahora tienes que hacer es solicitar esta petición a esta otra url 207 00:16:17,990 --> 00:16:24,970 qué url es pues este que tenemos aquí vuelvo a prinfas pero esta vez fijaros que lleva un código 208 00:16:26,190 --> 00:16:35,970 esta url como atributo lleva un código asociado este es el código de autorización es el código 209 00:16:35,970 --> 00:16:37,210 que va a utilizar printfast 210 00:16:37,210 --> 00:16:39,730 se lo ha dado Google 211 00:16:39,730 --> 00:16:41,210 con lo cual cuando printfast 212 00:16:41,210 --> 00:16:43,950 empiece a utilizar este código 213 00:16:43,950 --> 00:16:45,070 Google lo va a reconocer 214 00:16:45,070 --> 00:16:46,830 y va a decir, este es el código que te di 215 00:16:46,830 --> 00:16:48,110 porque previamente 216 00:16:48,110 --> 00:16:51,049 Juan me dijo que efectivamente 217 00:16:51,049 --> 00:16:52,990 te estaba dando permisos 218 00:16:52,990 --> 00:16:54,470 para acceder a sus fotos 219 00:16:54,470 --> 00:16:57,429 y veremos un poco la operativa 220 00:16:57,429 --> 00:16:58,970 es un poco más compleja porque este código 221 00:16:58,970 --> 00:16:59,629 luego hay que 222 00:16:59,629 --> 00:17:03,190 cambiarlo o transformarlo 223 00:17:03,190 --> 00:17:03,789 en un token 224 00:17:03,789 --> 00:17:05,910 de acceso 225 00:17:05,910 --> 00:17:07,849 ¿vale? o sea que este código 226 00:17:07,849 --> 00:17:09,690 de autorización no es solamente el dato 227 00:17:09,690 --> 00:17:11,650 que se requiere para poder acceder a las 228 00:17:11,650 --> 00:17:13,750 fotos de Juan pero si a partir de ese código 229 00:17:13,750 --> 00:17:15,450 puedo solicitar un token de acceso 230 00:17:15,450 --> 00:17:17,750 que es el que efectivamente luego me va a 231 00:17:17,750 --> 00:17:19,609 permitir utilizar el API de 232 00:17:19,609 --> 00:17:21,809 Picasa ¿vale? luego ya entra 233 00:17:21,809 --> 00:17:22,990 en marcha 234 00:17:22,990 --> 00:17:25,529 todas las posibilidades que tengo de 235 00:17:25,529 --> 00:17:27,569 solicitarle cosas a Picasa utilizando un 236 00:17:27,569 --> 00:17:29,750 API REST, API REST es básicamente 237 00:17:29,750 --> 00:17:31,150 una URL 238 00:17:31,150 --> 00:17:32,789 en un formato 239 00:17:32,789 --> 00:17:40,710 concreto con una serie de partes dentro de la url establecidas para que cuando lleguen al servidor se 240 00:17:40,710 --> 00:17:46,049 puedan interpretar y dependiendo de lo que se le está solicitando incluso parámetros que se 241 00:17:46,049 --> 00:17:53,690 pueden introducir como partes de la url podrá satisfacer esa petición y devolver pues como 242 00:17:53,690 --> 00:18:00,930 ocurría en ajax devolver un fichero con datos vale por aquí lo importante y para off es que 243 00:18:00,930 --> 00:18:07,150 efectivamente a print fast y con este juego de redirecciones le llegue este código porque ya 244 00:18:07,150 --> 00:18:15,269 con este código la aplicación de print fast ya va a poder empezar a trabajar desde el momento 245 00:18:15,269 --> 00:18:20,430 que se hace la redirección pensar en esto en el momento que picasa la hace la redirección 246 00:18:20,430 --> 00:18:26,190 al navegador esta es la petición que llega y esta petición llega a un script en este caso 247 00:18:26,190 --> 00:18:27,970 al index.php 248 00:18:27,970 --> 00:18:30,450 porque aquí no hay 249 00:18:30,450 --> 00:18:32,150 ninguna ruta 250 00:18:32,150 --> 00:18:34,190 hacia un script concreto, está al nivel 251 00:18:34,190 --> 00:18:35,369 más alto, este es el 252 00:18:35,369 --> 00:18:38,009 dominio y directamente ya 253 00:18:38,009 --> 00:18:40,329 mete el atributo, es un ejemplo muy simplito 254 00:18:40,329 --> 00:18:42,069 pero llegaría al index, vale, entonces 255 00:18:42,069 --> 00:18:44,109 en el index, y esto es un 256 00:18:44,109 --> 00:18:45,089 método get 257 00:18:45,089 --> 00:18:47,950 siempre que estamos solicitando 258 00:18:47,950 --> 00:18:49,950 información con la url directamente y con 259 00:18:49,950 --> 00:18:52,029 los parámetros en la url, esto se 260 00:18:52,029 --> 00:18:53,890 codifica como método get, como 261 00:18:53,890 --> 00:18:55,910 mensaje get, entonces 262 00:18:55,910 --> 00:19:02,930 iríamos a dolar get ahí encontraríamos este parámetro code y ya lo podemos procesar nosotros 263 00:19:02,930 --> 00:19:08,869 en el servidor lo podríamos procesar y metiéndolo en la sesión para tenerlo disponible durante en 264 00:19:08,869 --> 00:19:13,309 todas las interacciones que hagamos bien meterlo en una base de datos bien meterlo en el local 265 00:19:13,309 --> 00:19:18,230 storage del navegador por eso ya un poco dependiendo un poco de la estrategia de manejo 266 00:19:18,230 --> 00:19:25,289 de gestión de los tokens pero en principio esto ya una vez que se me redirige esto básicamente 267 00:19:25,289 --> 00:19:33,130 esta petición sale del navegador de Juan hacia Printfast con estos datos, con estos parámetros. 268 00:19:34,150 --> 00:19:41,769 Esto es importante porque no es del todo intuitivo estos cambios o estas redirecciones y cómo es posible que uno se entera 269 00:19:41,769 --> 00:19:48,069 y cómo es posible que entran tres con un único navegador sin que el usuario realmente esté cambiando su URL, 270 00:19:48,069 --> 00:19:52,089 sino que los mismos servidores van cambiando 271 00:19:52,089 --> 00:19:54,670 o van redirigiendo al navegador de Juan 272 00:19:54,670 --> 00:19:57,710 a un sitio u otro, dependiendo de si le toca intervenir 273 00:19:57,710 --> 00:20:00,210 al servidor Auth de Google 274 00:20:00,210 --> 00:20:03,289 o le toca intervenir al servidor de la aplicación PrintFast 275 00:20:03,289 --> 00:20:08,019 y esta sería la última ventana 276 00:20:08,019 --> 00:20:10,759 una vez que PrintFast ya tiene el código 277 00:20:10,759 --> 00:20:13,660 pues ya puede, utilizando la API de Picasa 278 00:20:13,660 --> 00:20:16,500 ya puede solicitarle a Google, oye pues dame las fotos 279 00:20:16,500 --> 00:20:17,740 de este usuario 280 00:20:17,740 --> 00:20:20,119 y una vez que la recibe 281 00:20:20,119 --> 00:20:21,480 pues puede mostrárselas 282 00:20:21,480 --> 00:20:22,019 al usuario 283 00:20:22,019 --> 00:20:22,839 con estas cajitas 284 00:20:22,839 --> 00:20:23,440 para que él diga 285 00:20:23,440 --> 00:20:24,359 pues mira, quiero esta 286 00:20:24,359 --> 00:20:24,980 quiero la primera 287 00:20:24,980 --> 00:20:25,400 la tercera 288 00:20:25,400 --> 00:20:25,819 la quinta 289 00:20:25,819 --> 00:20:28,339 veamos un poco 290 00:20:28,339 --> 00:20:28,720 ¿eh? 291 00:20:28,720 --> 00:20:29,259 cómo puede 292 00:20:29,259 --> 00:20:30,319 cómo puede operar todo 293 00:20:30,319 --> 00:20:31,920 vale, pues 294 00:20:31,920 --> 00:20:34,240 yo creo que 295 00:20:34,240 --> 00:20:35,579 he explicado 296 00:20:35,579 --> 00:20:37,539 una segunda vuelta 297 00:20:37,539 --> 00:20:37,940 ¿eh? 298 00:20:37,940 --> 00:20:38,700 todo esto se explicó 299 00:20:38,700 --> 00:20:39,859 en la tutoría pasada 300 00:20:39,859 --> 00:20:40,140 pero 301 00:20:40,140 --> 00:20:41,240 yo creo que 302 00:20:41,240 --> 00:20:42,559 si habéis visto 303 00:20:42,559 --> 00:20:43,420 la tutoría 304 00:20:43,420 --> 00:20:44,599 a lo mejor 305 00:20:44,599 --> 00:20:45,700 todavía se os genera 306 00:20:45,700 --> 00:20:46,140 alguna duda 307 00:20:46,140 --> 00:20:46,720 esta vez 308 00:20:46,720 --> 00:20:47,299 hemos 309 00:20:47,740 --> 00:20:56,019 una segunda vuelta siempre como que viene bien para terminar un poco de asentar las 310 00:20:56,019 --> 00:21:03,400 ideas para vamos a vamos a ver el playground entonces el playground es una aplicación que 311 00:21:03,400 --> 00:21:10,190 ha hecho google esto sería print fast esta aplicación sería print fast yo sigo siendo 312 00:21:10,190 --> 00:21:20,950 en este caso soy el usuario givan rock soy yo con mi usuario este sería print fast y google 313 00:21:20,950 --> 00:21:31,049 tendría información mía distintos tipos y mediante alguno de estos apis yo voy a permitir que el 314 00:21:31,049 --> 00:21:37,369 playground pueda acceder a mis datos que son privados le voy a dar acceso a mis datos que 315 00:21:37,369 --> 00:21:44,670 son privados y que requeriría de alguna manera autenticación por mi parte para poder acceder a 316 00:21:44,670 --> 00:21:49,430 ellos pero le voy a dar permiso a esta aplicación para que pueda hacer uso de ellos y pueda acceder 317 00:21:49,430 --> 00:21:56,210 mediante una pires a esos datos a qué servicio a google estás google estás es una pequeña agenda 318 00:21:57,210 --> 00:22:05,630 básica que todos tenemos y tenemos cuenta con gmail todos tenemos acceso a esa aplicación de 319 00:22:05,630 --> 00:22:15,390 agenda y obviamente tú que te auténticas como ocurre aquí vale esta es la agenda está que 320 00:22:15,390 --> 00:22:24,950 tengo aquí a la derecha entonces hay listas de tareas vale y puedo añadir una tarea pues 321 00:22:24,950 --> 00:22:42,380 añado tarea título puede recoger en el colegio vale los detalles yo que sé puerta delantera 322 00:22:42,380 --> 00:23:05,200 fecha puedo poner una fecha soy yo que sé 18 horas estas son las yo puedo ir añadiendo cosas 323 00:23:05,200 --> 00:23:12,480 vale ya tengo aquí la de alta la tarea podría ir añadiendo más tareas entonces voy a hacer 324 00:23:12,480 --> 00:23:19,259 ese ejercicio en el que le voy a dar permiso a playground para que pueda acceder en mi nombre 325 00:23:19,259 --> 00:23:24,339 a esta esta información que es mía privada y que ningún otro usuario debería de poder acceder 326 00:23:24,339 --> 00:23:30,500 vale como lo hacemos vale pues lo primero esta aplicación sigue una serie de pasos que son los 327 00:23:30,500 --> 00:23:33,599 que normalmente se realizan en cualquier aplicación 328 00:23:33,599 --> 00:23:37,039 para poder acceder a la información privada. 329 00:23:37,299 --> 00:23:39,759 Aquí hay APIs que no son de ese tipo. 330 00:23:39,880 --> 00:23:41,799 Por ejemplo, si accedes a Google Maps, 331 00:23:42,599 --> 00:23:45,920 en principio Google Maps no es información privada de nadie, 332 00:23:46,039 --> 00:23:46,940 es un servicio de Google. 333 00:23:47,839 --> 00:23:51,000 Tú necesitas una clave que te da Google, 334 00:23:51,720 --> 00:23:54,099 pero en principio tú estás accediendo a una capacidad 335 00:23:54,099 --> 00:23:56,819 que tiene Google de poder proporcionarte un mapa, 336 00:23:57,420 --> 00:23:59,339 pero no estás accediendo a la información de nadie. 337 00:23:59,339 --> 00:24:25,579 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. 338 00:24:25,579 --> 00:24:32,960 tenéis que distinguir servicios que sí que necesitan dos y otros que no normalmente es 339 00:24:32,960 --> 00:24:36,980 esa la idea si tú accedes a la información privada de alguien sí que lo necesitas porque 340 00:24:36,980 --> 00:24:43,640 necesitas que sea alguien un momento dado de permiso si es un servicio genérico una plataforma 341 00:24:44,700 --> 00:24:50,539 de búsqueda si le pides a google que te busque algo eso no requiere dos no estás entrando en 342 00:24:50,539 --> 00:24:56,759 la información privada vale pues vamos a buscar google tasks como dice donde ha visto estos api 343 00:24:56,759 --> 00:25:02,859 son api rest luego obviamente que alguna tiene su documentación tienes que conocerlo tienes que 344 00:25:02,859 --> 00:25:11,339 saber cómo invocar lo tienes pero antes de invocar estos apis vamos a configurar y vamos a establecer 345 00:25:11,339 --> 00:25:25,470 todo el mecanismo de 2.0 entonces venimos a google estás este vale hay dos opciones uno puede ser 346 00:25:25,470 --> 00:25:34,470 tasks que puedo editar tareas o sea que si yo le doy esta posibilidad esa aplicación va a poder 347 00:25:34,470 --> 00:25:41,029 crear tareas en mi agenda va a poder borrar las va a poder esto ocurre mucho por ejemplo con los 348 00:25:41,029 --> 00:25:46,529 las aplicaciones de correo o de gestión de organización de tiempo que te dicen quieres 349 00:25:46,529 --> 00:25:54,549 que te lo añada a tu calendar de google entonces si cierras una cita pues directamente encoge y 350 00:25:54,549 --> 00:26:01,529 te lo de manera automática sin que entre estuve en tu calendar te lo te lo añade para que esa 351 00:26:01,529 --> 00:26:07,029 aplicación funcione tú tienes que haberle posiblemente cuando lo instalaste te ha 352 00:26:07,029 --> 00:26:13,210 ha pedido oye me das acceso a tu calendar de google de hecho sí porque prefiero que no tengo 353 00:26:13,210 --> 00:26:19,329 nada que tan confidencial como para que una aplicación no lo pueda ver y en principio pues 354 00:26:19,329 --> 00:26:24,309 agradezco que no tenga yo que hacerlo eso manualmente sino que directamente sea en todas 355 00:26:24,309 --> 00:26:29,569 estas aplicaciones utilizan ese tipo de mecanismo para podemos coger tasks genérico aunque no vamos 356 00:26:29,569 --> 00:26:35,970 a crear ninguna tarea vamos a ver un poco lápiz por encima pero vale entonces autorizó 357 00:26:37,029 --> 00:27:03,910 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. 358 00:27:03,910 --> 00:27:18,529 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. 359 00:27:18,529 --> 00:27:43,220 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. 360 00:27:43,220 --> 00:28:10,750 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? 361 00:28:10,750 --> 00:28:17,690 ahora ya no estoy autenticado con lo cual le digo a playground que quiere utilizar google 362 00:28:17,690 --> 00:28:30,589 tasks que estaba quiero autorizar este api vale como veis me pide que inicie sesión 363 00:28:32,130 --> 00:28:38,829 vale para que yo también pueda autenticar y decir si yo soy la persona que digo que 364 00:28:38,829 --> 00:28:44,109 soy que él tiene que tiene que interactuar con el usuario final con juan entonces pues 365 00:28:44,589 --> 00:28:47,680 vale 366 00:28:53,210 --> 00:29:07,099 vale y ahora ahora es cuando él me está me está pidiendo permiso 367 00:29:08,500 --> 00:29:12,539 ya no estoy ahora ya no estoy interaccionando con playground 368 00:29:12,539 --> 00:29:22,000 interactuando con esta url que es una url de google donde de alguna manera gestiona 369 00:29:22,000 --> 00:29:24,019 esos accesos de 370 00:29:24,019 --> 00:29:25,519 Auth, ¿vale? Cuando 371 00:29:25,519 --> 00:29:28,220 un usuario final tiene que dar esos permisos. 372 00:29:29,019 --> 00:29:30,500 Entonces dice, confirma 373 00:29:30,500 --> 00:29:32,740 que confías en Google Auth 2.0 374 00:29:32,740 --> 00:29:34,460 Playground. Como veis, esta es la aplicación. 375 00:29:34,880 --> 00:29:35,460 Esta es la aplicación. 376 00:29:36,160 --> 00:29:38,480 Esto es PrintFast, una aplicación que está 377 00:29:38,480 --> 00:29:39,240 programada en 378 00:29:39,240 --> 00:29:42,920 te da una serie de historias 379 00:29:42,920 --> 00:29:44,579 de, pues bueno, que sepas 380 00:29:44,579 --> 00:29:46,539 de alguna manera que va a 381 00:29:46,539 --> 00:29:47,579 tener acceso a eso y que 382 00:29:47,579 --> 00:29:49,720 tengas eso claro, ¿no? Porque 383 00:29:49,720 --> 00:29:52,480 alguien que no lee mucho los mensajes 384 00:29:52,480 --> 00:29:53,299 pues puede dar 385 00:29:53,299 --> 00:29:56,599 una serie de accesos, de permisos 386 00:29:56,599 --> 00:29:58,279 que no son deseados 387 00:29:58,279 --> 00:30:00,140 entonces te dice aquí lo que permites 388 00:30:00,140 --> 00:30:02,579 permite que se creen, que se modifiquen, organizen 389 00:30:02,579 --> 00:30:03,539 y eliminen tareas 390 00:30:03,539 --> 00:30:06,720 de tu Google Tasks, vale yo lo voy a permitir 391 00:30:06,720 --> 00:30:11,019 ¿vale? pues 392 00:30:11,019 --> 00:30:12,500 una vez que le he dado a permitir 393 00:30:12,500 --> 00:30:14,799 fijaros que 394 00:30:14,799 --> 00:30:17,319 mi navegador ha sido redireccionado 395 00:30:17,319 --> 00:30:19,319 ahora vuelvo a otra vez 396 00:30:19,319 --> 00:30:21,700 a estar direccionando 397 00:30:21,700 --> 00:30:23,960 mi navegador hacia Playground 398 00:30:23,960 --> 00:30:27,180 pero además 399 00:30:27,180 --> 00:30:29,220 fijaros que le estoy enviando este código 400 00:30:29,220 --> 00:30:31,819 el código 401 00:30:31,819 --> 00:30:33,559 y el scope que es básicamente el API 402 00:30:33,559 --> 00:30:35,380 para el cual ha sido autorizado 403 00:30:35,380 --> 00:30:40,140 ¿vale? y aquí tengo 404 00:30:40,140 --> 00:30:41,920 el código de autorización 405 00:30:41,920 --> 00:30:44,200 esto que aparece aquí es el código de autorización 406 00:30:44,200 --> 00:30:46,559 ¿es suficiente 407 00:30:46,559 --> 00:30:48,880 ese código para poder ya solicitarle 408 00:30:48,880 --> 00:30:50,500 información de mis tareas 409 00:30:50,500 --> 00:30:52,200 a Google? no 410 00:30:52,200 --> 00:30:54,839 ¿vale? tiene que hacer un intercambio 411 00:30:54,839 --> 00:30:57,200 del código de autorización por tokens 412 00:30:57,200 --> 00:30:59,240 de acceso. Se hace como un doble 413 00:30:59,240 --> 00:31:00,420 nivel de seguridad. 414 00:31:01,920 --> 00:31:02,799 Una vez que tengo el código 415 00:31:02,799 --> 00:31:05,240 puedo recibir un token. 416 00:31:05,359 --> 00:31:07,200 ¿Por qué? Porque estos 417 00:31:07,200 --> 00:31:08,000 tokens expiran. 418 00:31:08,579 --> 00:31:10,880 ¿Veis que tenemos aquí 419 00:31:10,880 --> 00:31:12,539 en el paso 2? 420 00:31:13,380 --> 00:31:15,400 Tienes aquí una cuenta atrás 421 00:31:15,400 --> 00:31:19,160 porque el token de acceso expira. 422 00:31:19,160 --> 00:31:19,819 No es para siempre. 423 00:31:21,160 --> 00:31:23,119 Pero si es verdad que hay 424 00:31:23,119 --> 00:31:25,099 una manera de utilizar el API en la que 425 00:31:25,099 --> 00:31:26,200 no solamente te envían 426 00:31:26,200 --> 00:31:28,980 un código, perdón, no solamente 427 00:31:28,980 --> 00:31:31,019 te envían un token de acceso, sino que 428 00:31:31,019 --> 00:31:32,180 te envían también 429 00:31:32,180 --> 00:31:34,559 un token de refresco. 430 00:31:36,420 --> 00:31:37,039 Vale, y ese token de 431 00:31:37,039 --> 00:31:39,220 refresco simplemente significa 432 00:31:39,220 --> 00:31:40,619 que cuando esto caduca 433 00:31:40,619 --> 00:31:42,880 yo no tengo que volver 434 00:31:42,880 --> 00:31:45,019 otra vez a pedirle permiso al usuario, 435 00:31:45,759 --> 00:31:46,920 sino que puedo utilizar este 436 00:31:46,920 --> 00:31:48,940 token de refresco para volver a pedir otro 437 00:31:48,940 --> 00:31:50,880 token de acceso con otra 438 00:31:50,880 --> 00:31:52,539 duración de 439 00:31:52,539 --> 00:32:02,859 en este caso una hora creo que es vale o sea que hay veces que se utiliza la pip simplemente para 440 00:32:02,859 --> 00:32:07,400 utilizarlo una vez y otras veces que se pide este toque de refresco porque te permite no marear al 441 00:32:07,400 --> 00:32:18,599 cliente cada poco pidiéndole ese permiso sino refrescando en el toque vale veis aquí tendríamos 442 00:32:18,599 --> 00:32:24,660 una opción de auto refrescar el token y ese auto refresco se haría con este refresh toquen que 443 00:32:24,660 --> 00:32:36,170 tenemos aquí vale ya tenemos nuestro token de acceso que es este de aquí ya podríamos solicitar 444 00:32:36,170 --> 00:32:43,589 información desde playground podría entrar a la información privada de juan bueno pues vamos a 445 00:32:43,589 --> 00:32:49,809 vamos a pedirle cosas como le pedimos información de las tareas utilizando la pirres y el api res 446 00:32:49,809 --> 00:33:18,349 ¿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. 447 00:33:18,349 --> 00:33:21,210 también puede ser algo 448 00:33:21,210 --> 00:33:23,049 que permita de alguna manera 449 00:33:23,049 --> 00:33:25,529 enviar datos, delete es para borrar 450 00:33:25,529 --> 00:33:27,529 son peticiones de borrar, oye pues bórrame esto 451 00:33:27,529 --> 00:33:28,990 en este caso por ejemplo 452 00:33:28,990 --> 00:33:31,390 puede ser que para borrar una 453 00:33:31,390 --> 00:33:33,029 tarea pues le pueda enviar un delete 454 00:33:33,029 --> 00:33:35,670 y patch normalmente es 455 00:33:35,670 --> 00:33:37,509 para cambiar, para 456 00:33:37,509 --> 00:33:39,569 modificar cosas, es como 457 00:33:39,569 --> 00:33:40,029 un modify 458 00:33:40,029 --> 00:33:42,970 de por si 459 00:33:42,970 --> 00:33:45,589 tienen cierta semántica 460 00:33:45,589 --> 00:33:47,609 porque pensar todo el 461 00:33:47,609 --> 00:33:49,670 API y 462 00:33:49,670 --> 00:33:51,410 toda la semántica de las operaciones 463 00:33:51,410 --> 00:33:52,930 tiene que 464 00:33:52,930 --> 00:33:55,549 integrarse en el 465 00:33:55,549 --> 00:33:57,670 protocolo HTTP. Esa es la grandeza 466 00:33:57,670 --> 00:33:59,750 de REST, que no necesitas más niveles 467 00:33:59,750 --> 00:34:01,210 por encima. Con HTTP 468 00:34:01,210 --> 00:34:03,089 te apañas. 469 00:34:03,609 --> 00:34:05,730 ¿Qué tiene HTTP? Pues el tipo 470 00:34:05,730 --> 00:34:07,809 del mensaje y obviamente 471 00:34:07,809 --> 00:34:09,469 el mensaje sí, el mensaje en sí. 472 00:34:09,570 --> 00:34:10,989 Y el mensaje en sí normalmente es 473 00:34:10,989 --> 00:34:13,650 la URL, puede 474 00:34:13,650 --> 00:34:15,610 ser un cuerpo donde 475 00:34:15,610 --> 00:34:17,110 están los datos y unas cabeceras. 476 00:34:17,610 --> 00:34:26,489 Acordaros un poquito de lo que o cómo se planteaba un mensaje HTTP, pero tampoco tiene mucha más variación, ¿vale? 477 00:34:27,530 --> 00:34:35,769 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. 478 00:34:36,550 --> 00:34:37,789 Eso es un poco el juego que me da. 479 00:34:38,570 --> 00:34:45,230 Recordar también, los API REST, otra característica importante es que no dependen de ningún estado, ¿vale? 480 00:34:45,230 --> 00:35:07,050 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. 481 00:35:07,050 --> 00:35:28,179 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. 482 00:35:28,179 --> 00:35:31,179 entonces tenemos cosas que tienen que ver con 483 00:35:31,179 --> 00:35:32,880 task list, es decir 484 00:35:32,880 --> 00:35:34,000 con listas de tareas 485 00:35:34,000 --> 00:35:36,079 acordaros que teníamos aquí 486 00:35:36,079 --> 00:35:38,400 había listas de tareas 487 00:35:38,400 --> 00:35:42,639 lo he cerrado 488 00:35:42,639 --> 00:35:44,500 el otro, lo he cerrado con un montón 489 00:35:44,500 --> 00:35:46,340 de cosas, vale, dejarme 490 00:35:46,340 --> 00:35:46,719 que lo 491 00:35:46,719 --> 00:35:48,840 abra 492 00:35:48,840 --> 00:35:51,599 tenía preparado aquí un montón de cosas 493 00:35:51,599 --> 00:35:56,500 vale, vamos a entrar en gmail 494 00:35:56,500 --> 00:36:07,940 vuelvo a estar aquí, estas son mis tareas 495 00:36:07,940 --> 00:36:09,800 entonces, estas son listas 496 00:36:09,800 --> 00:36:10,380 de tareas 497 00:36:10,380 --> 00:36:13,380 y si ya entro en alguna de ellas 498 00:36:13,380 --> 00:36:16,000 pues estas son tareas dentro de las listas de tareas 499 00:36:16,000 --> 00:36:17,760 vale, entonces 500 00:36:17,760 --> 00:36:21,480 pues vamos por ejemplo a ver 501 00:36:21,480 --> 00:36:23,079 cuántas listas de tareas tengo 502 00:36:23,079 --> 00:36:25,880 vale, entonces esta operación 503 00:36:25,880 --> 00:36:26,719 fijaros que va 504 00:36:26,719 --> 00:36:29,159 a este dominio 505 00:36:29,159 --> 00:36:31,380 y esto todo ya es parte 506 00:36:31,380 --> 00:36:32,860 de 507 00:36:32,860 --> 00:36:35,280 lo que en realidad 508 00:36:35,280 --> 00:36:37,139 bueno 509 00:36:37,139 --> 00:36:39,099 vamos a obtener las listas de tareas 510 00:36:39,099 --> 00:36:41,099 primero, yo creo que para eso en realidad 511 00:36:41,099 --> 00:36:43,360 no es get task list sino list 512 00:36:43,360 --> 00:36:45,000 vale, vamos a listarlas primero 513 00:36:45,000 --> 00:36:47,019 vale, como veis aquí 514 00:36:47,019 --> 00:36:49,099 hay cosas dentro, esto es básicamente 515 00:36:49,099 --> 00:36:51,440 se va a sustituir 516 00:36:51,440 --> 00:36:52,619 por mi usuario id 517 00:36:52,619 --> 00:36:55,179 dentro de google y vamos a hacer 518 00:36:55,179 --> 00:36:57,079 alguna que sí que tenga que meter ahí algún 519 00:36:57,079 --> 00:36:58,960 parámetro como el ID 520 00:36:58,960 --> 00:37:01,320 de la lista de tareas, pero de momento vamos a listarlas 521 00:37:01,320 --> 00:37:03,380 ¿vale? Entonces enviamos la petición 522 00:37:03,380 --> 00:37:06,920 esto va a ir acompañado del token 523 00:37:06,920 --> 00:37:09,059 aunque aquí no se vea, pero el token 524 00:37:09,059 --> 00:37:11,079 obviamente este de acceso también viaja para que 525 00:37:11,079 --> 00:37:13,119 se verifique y si se envía, pues aquí 526 00:37:13,119 --> 00:37:14,400 tengo la información que me llegó 527 00:37:14,400 --> 00:37:17,139 Google me lo ha, desde Playground 528 00:37:17,139 --> 00:37:18,780 una aplicación 529 00:37:18,780 --> 00:37:20,860 le ha permitido 530 00:37:20,860 --> 00:37:23,039 acceder a toda esta información mía privada 531 00:37:23,039 --> 00:37:25,929 ¿vale? Porque hemos 532 00:37:25,929 --> 00:37:28,369 seguido el proceso de OZ2 533 00:37:28,369 --> 00:37:29,630 antes de llegar a este punto. 534 00:37:30,070 --> 00:37:31,949 Y aquí tienes las listas de tareas, pues lista 535 00:37:31,949 --> 00:37:33,849 de Hibam Robot, repartos 536 00:37:33,849 --> 00:37:35,309 y todas estas listas de 537 00:37:35,309 --> 00:37:38,190 tareas que luego ya entenderéis 538 00:37:38,190 --> 00:37:39,789 por qué se llaman así, porque están dentro 539 00:37:39,789 --> 00:37:42,289 de la aplicación de repartos 540 00:37:42,289 --> 00:37:43,070 que es la que vamos a decir. 541 00:37:43,070 --> 00:37:44,889 Iván, te puedo hacer una pregunta. 542 00:37:46,750 --> 00:37:48,130 Sí, es que para entenderlo 543 00:37:48,130 --> 00:37:49,809 un poco, porque también vi la clase esta 544 00:37:49,809 --> 00:37:51,929 el otro día, lo que veo es que esto es 545 00:37:51,929 --> 00:37:53,329 como si tuvieras 546 00:37:53,329 --> 00:37:55,369 una API personal 547 00:37:55,369 --> 00:37:58,469 que está encriptada con una clave 548 00:37:58,469 --> 00:37:59,869 quiero decir que 549 00:37:59,869 --> 00:38:02,230 puedes tratarlo como una API de tareas 550 00:38:02,230 --> 00:38:04,329 que tiene endpoints en las que 551 00:38:04,329 --> 00:38:06,289 pides una tarea o haces cosas 552 00:38:06,289 --> 00:38:07,949 con tareas, solo que bueno 553 00:38:07,949 --> 00:38:10,130 como son mis tareas, pues le tengo que dar una clave 554 00:38:10,130 --> 00:38:12,070 para que pueda acceder a diferencia 555 00:38:12,070 --> 00:38:13,650 de APIs públicas tipo 556 00:38:13,650 --> 00:38:15,809 datos meteorológicos 557 00:38:15,809 --> 00:38:18,110 claro, claro, sí, ahora 558 00:38:18,110 --> 00:38:19,969 entiendo lo que dices como API personal, efectivamente 559 00:38:19,969 --> 00:38:21,909 es un API que entra a datos personales 560 00:38:21,909 --> 00:38:23,889 es una API 561 00:38:23,889 --> 00:38:35,809 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, 562 00:38:35,909 --> 00:38:46,409 porque los datos ahora los está solicitando Playground. Y Google, como hemos pasado por ese paso intermedio de que me ha pedido permiso 563 00:38:46,409 --> 00:38:48,469 yo se lo he dado, Google 564 00:38:48,469 --> 00:38:50,650 ya sí que le permite a Playground 565 00:38:50,650 --> 00:38:52,429 entrar a 566 00:38:52,429 --> 00:38:54,510 consultar mis datos a Playground 567 00:38:54,510 --> 00:38:56,610 que de otra manera 568 00:38:56,610 --> 00:38:58,489 sería imposible, ¿no? Que Google le diera 569 00:38:58,489 --> 00:39:00,409 acceso a nadie, ya sean otros 570 00:39:00,409 --> 00:39:01,789 usuarios o incluso aplicaciones 571 00:39:01,789 --> 00:39:04,050 que le pudieran dar acceso a mis datos 572 00:39:04,050 --> 00:39:05,949 no tendría ningún sentido, ¿no? 573 00:39:05,949 --> 00:39:07,329 Sin yo 574 00:39:07,329 --> 00:39:08,869 tener 575 00:39:08,869 --> 00:39:13,909 ¿sabes? Sin tener 576 00:39:13,909 --> 00:39:15,789 mi permiso, mi aprobación 577 00:39:15,789 --> 00:39:31,909 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. 578 00:39:31,909 --> 00:40:00,210 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. 579 00:40:00,210 --> 00:40:27,079 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. 580 00:40:27,079 --> 00:40:48,280 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. 581 00:40:48,280 --> 00:40:50,199 vale, bueno pues 582 00:40:50,199 --> 00:40:53,460 esta es 583 00:40:53,460 --> 00:40:55,400 un archivo de datos 584 00:40:55,400 --> 00:40:56,500 que viaja 585 00:40:56,500 --> 00:40:59,780 de vuelta al navegador 586 00:40:59,780 --> 00:41:00,920 en este caso 587 00:41:00,920 --> 00:41:03,340 a la aplicación 588 00:41:03,340 --> 00:41:04,460 en este caso posiblemente 589 00:41:04,460 --> 00:41:06,699 yo estoy ejecutando aquí una aplicación 590 00:41:06,699 --> 00:41:09,039 esto puede viajar o bien a un servidor 591 00:41:09,039 --> 00:41:11,119 o bien puede viajar directamente 592 00:41:11,119 --> 00:41:12,539 al cliente 593 00:41:12,539 --> 00:41:15,000 la conexión, los API REST 594 00:41:15,000 --> 00:41:17,500 se pueden utilizar, nosotros vamos a utilizarlos 595 00:41:18,280 --> 00:41:26,519 algunos los de los dos los vamos a utilizar en php o sea que sería el servidor php durante la 596 00:41:26,519 --> 00:41:34,719 ejecución del script el que se comunicaría con google tasks pero podríamos utilizarlo desde el 597 00:41:34,719 --> 00:41:40,780 mismo javascript que está corriendo en el cliente aquí hay dos posibilidades los del servidor o 598 00:41:40,780 --> 00:41:45,820 directamente desde el cliente con lo cual el cliente directamente decía el otro día coge 599 00:41:45,820 --> 00:41:47,659 el control, ya no necesita el servidor 600 00:41:47,659 --> 00:41:49,119 para el que le vaya a buscar esta información, 601 00:41:49,679 --> 00:41:50,500 sino que él directamente 602 00:41:50,500 --> 00:41:52,840 establece este mecanismo 603 00:41:52,840 --> 00:41:55,139 y una vez que tiene el token, 604 00:41:55,719 --> 00:41:57,519 directamente desde Javascript puede solicitar 605 00:41:57,519 --> 00:41:59,019 la información a Google Tasks. 606 00:41:59,900 --> 00:42:00,820 Y se salta. 607 00:42:01,940 --> 00:42:03,460 Todo el paso intermedio, toda la 608 00:42:03,460 --> 00:42:04,800 comunicación con el servidor 609 00:42:04,800 --> 00:42:09,110 desde el que se ha descargado 610 00:42:09,110 --> 00:42:10,969 el Javascript. El servidor de 611 00:42:10,969 --> 00:42:13,170 Printfast, en este caso el servidor de Playground. 612 00:42:14,510 --> 00:42:14,889 Vale, pues 613 00:42:14,889 --> 00:42:17,250 aquí tendría la información 614 00:42:17,250 --> 00:42:18,929 esto todo está documentado 615 00:42:18,929 --> 00:42:19,949 luego veremos un poco 616 00:42:19,949 --> 00:42:20,250 aunque 617 00:42:20,250 --> 00:42:21,570 por alguna razón 618 00:42:21,570 --> 00:42:22,309 sí 619 00:42:22,309 --> 00:42:24,389 esta documentación 620 00:42:24,389 --> 00:42:25,030 no está del todo 621 00:42:25,030 --> 00:42:26,210 clara de Google Tasks 622 00:42:26,210 --> 00:42:27,070 a lo mejor no es un servicio 623 00:42:27,070 --> 00:42:27,570 así muy útil 624 00:42:27,570 --> 00:42:28,230 pero vamos a ver 625 00:42:28,230 --> 00:42:29,429 dentro de las páginas 626 00:42:29,429 --> 00:42:30,030 que tiene Google 627 00:42:30,030 --> 00:42:31,670 de Google Tasks 628 00:42:31,670 --> 00:42:32,329 vamos a ver un poquito 629 00:42:32,329 --> 00:42:33,030 la documentación 630 00:42:33,030 --> 00:42:34,530 y aquí te viene 631 00:42:34,530 --> 00:42:35,309 Task List 632 00:42:35,309 --> 00:42:36,590 vamos a entrar 633 00:42:36,590 --> 00:42:37,889 a ver una Task List 634 00:42:37,889 --> 00:42:38,409 concreta 635 00:42:38,409 --> 00:42:38,869 entonces 636 00:42:38,869 --> 00:42:39,989 fijaros que 637 00:42:39,989 --> 00:42:41,309 la Task List 638 00:42:41,309 --> 00:42:42,010 tiene este ID 639 00:42:42,010 --> 00:42:42,929 y me va a servir 640 00:42:42,929 --> 00:42:44,110 para pedirle 641 00:42:44,110 --> 00:42:46,760 al API 642 00:42:46,760 --> 00:42:48,179 que me dé las tareas 643 00:42:48,179 --> 00:42:51,719 dentro de esta task list, ¿no? 644 00:42:51,739 --> 00:42:53,739 Entonces, entro aquí en las posibles operaciones 645 00:42:53,739 --> 00:42:55,980 y digo, dame las tareas, ¿vale? 646 00:42:56,880 --> 00:42:57,760 Va a ser esta. 647 00:42:57,920 --> 00:43:00,420 Returns, authenticated users, specified, 648 00:43:00,900 --> 00:43:04,019 no, task list, insert, update, clear, delete, 649 00:43:04,179 --> 00:43:04,579 ¿qué task? 650 00:43:05,440 --> 00:43:06,280 Vamos a ver esto. 651 00:43:07,380 --> 00:43:09,099 Sí, no, pero necesito una tarea. 652 00:43:09,539 --> 00:43:12,260 Vamos a ver esto, ¿qué task list? 653 00:43:12,599 --> 00:43:12,760 Vale. 654 00:43:13,400 --> 00:43:17,039 Entonces, aquí veis que tiene esta parte entre llaves, ¿vale? 655 00:43:17,039 --> 00:43:25,380 la voy a sustituir por el id de la task list como veis voy metiendo dentro de la url voy metiendo 656 00:43:25,380 --> 00:43:33,800 parámetros también voy metiendo datos que luego cuando llegan al servidor se extraen de la url y 657 00:43:33,800 --> 00:43:42,239 se utilizan para que mi consulta sea concreta sobre una task list determinada no sobre cualquiera 658 00:43:42,239 --> 00:43:56,019 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. 659 00:43:56,019 --> 00:44:14,719 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. 660 00:44:14,719 --> 00:44:17,639 si lo envío, aquí me llega 661 00:44:17,639 --> 00:44:19,880 lo que metí antes, recoger a niños 662 00:44:19,880 --> 00:44:21,820 en el colegio, la puerta 663 00:44:21,820 --> 00:44:23,219 delantera, la hora, etc 664 00:44:23,219 --> 00:44:25,559 y también 665 00:44:25,559 --> 00:44:27,760 la task, la tarea en sí, también tiene 666 00:44:27,760 --> 00:44:29,840 un identificador, por si quiero 667 00:44:29,840 --> 00:44:32,039 establecer algún tipo de información 668 00:44:32,039 --> 00:44:33,679 vamos a ver si puedo cambiar 669 00:44:33,679 --> 00:44:35,039 por ejemplo, en esta tarea 670 00:44:35,039 --> 00:44:37,219 utilizando el API 671 00:44:37,219 --> 00:44:39,099 update 672 00:44:39,099 --> 00:44:44,739 esto va a ser complicado porque tendría que 673 00:44:44,739 --> 00:44:45,559 escribir 674 00:44:45,559 --> 00:44:48,460 request. ¿Ves? En update 675 00:44:48,460 --> 00:44:49,639 manda un put. 676 00:44:51,179 --> 00:44:52,599 Vale, manda un put. 677 00:44:54,239 --> 00:44:56,380 Pero tendría que escribir 678 00:44:56,380 --> 00:44:58,340 informaciones 679 00:44:58,340 --> 00:45:00,219 Json para describir el cambio. 680 00:45:00,460 --> 00:45:02,340 Bueno, yo creo que para el ejemplo no 681 00:45:02,340 --> 00:45:04,179 va a ser necesario. ¿Ven? Para que cojáis 682 00:45:04,179 --> 00:45:05,340 un poquito la idea. 683 00:45:06,219 --> 00:45:06,460 ¿Ven? 684 00:45:07,719 --> 00:45:10,159 De cómo he seguido todo el proceso 685 00:45:10,159 --> 00:45:12,079 hasta conseguir 686 00:45:12,079 --> 00:45:14,239 poder interaccionar con Google 687 00:45:14,239 --> 00:45:25,019 para que me enviara la información del usuario final vale alguna pregunta entonces sobre esta 688 00:45:25,019 --> 00:45:34,559 operativa no sé si se me escucha ahora sí no es que estaba intentando seguir un poco lo que 689 00:45:34,559 --> 00:45:41,199 estabas haciendo iván pero no me sale la opción de elegir en el paso 3 de listas de operaciones 690 00:45:41,199 --> 00:45:42,599 ¿Me falta algo más ahí? 691 00:45:43,380 --> 00:45:45,199 Está abajo, mira a ver si está aquí abajo 692 00:45:45,199 --> 00:45:47,260 A ver 693 00:45:47,260 --> 00:45:49,380 Claro, yo veo 694 00:45:49,380 --> 00:45:51,400 Que tú, efectivamente, a ti te sale la opción 695 00:45:51,400 --> 00:45:52,219 De elegirlo, pero 696 00:45:52,219 --> 00:45:55,320 A mí me parece como en gris, sin posibilidad de 697 00:45:55,320 --> 00:45:57,340 Aquí, en el primer paso 698 00:45:57,340 --> 00:45:58,800 En el de selección 699 00:45:58,800 --> 00:46:00,119 Authorize APIs 700 00:46:00,119 --> 00:46:01,619 No, en el tercero 701 00:46:01,619 --> 00:46:03,340 En el tercero 702 00:46:03,340 --> 00:46:05,659 Cuando dices configure 703 00:46:05,659 --> 00:46:06,559 Request 704 00:46:06,559 --> 00:46:09,760 Donde sale está en request 705 00:46:09,760 --> 00:46:11,619 te sale la opción de lo que estabas hablando antes, 706 00:46:11,739 --> 00:46:13,300 lo de elegir operaciones. 707 00:46:13,559 --> 00:46:14,159 A mí no me sale. 708 00:46:14,460 --> 00:46:17,099 ¿Has seleccionado, has autorizado los APIs primero? 709 00:46:17,619 --> 00:46:18,019 Sí. 710 00:46:18,679 --> 00:46:19,300 Has venido aquí. 711 00:46:19,500 --> 00:46:22,739 Comprueba que tienes esto marcado en Google Tasks. 712 00:46:23,099 --> 00:46:23,699 Ah, vale. 713 00:46:24,059 --> 00:46:24,880 Vale, quizá por... 714 00:46:24,880 --> 00:46:26,000 Sí, seguramente es por eso. 715 00:46:26,059 --> 00:46:26,880 Perfecto, vale, gracias. 716 00:46:27,079 --> 00:46:27,760 Vale, vale. 717 00:46:27,780 --> 00:46:28,360 Me lo has sacado de ahí. 718 00:46:28,360 --> 00:46:32,719 También, para que los veas, entra en tu agenda y mete cosas. 719 00:46:33,039 --> 00:46:33,159 Vale. 720 00:46:34,000 --> 00:46:37,719 Para ver que efectivamente te puede traer lo que tengas allí metido. 721 00:46:38,019 --> 00:46:38,719 Perfecto, gracias. 722 00:46:39,260 --> 00:46:39,460 Vale. 723 00:46:39,760 --> 00:47:00,550 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. 724 00:47:00,550 --> 00:47:29,679 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. 725 00:47:29,679 --> 00:47:31,539 entonces voy a depurarlo 726 00:47:31,539 --> 00:47:33,780 voy a colocarme aquí en el index 727 00:47:33,780 --> 00:47:37,949 no os preocupéis, luego vamos a hablar 728 00:47:37,949 --> 00:47:39,650 de la aplicación un poquito más en detalle 729 00:47:39,650 --> 00:47:41,630 de momento solo quiero que veáis 730 00:47:41,630 --> 00:47:43,110 cómo se hace este intercambio 731 00:47:43,110 --> 00:47:45,929 dentro del código y cómo se hace esta operativa 732 00:47:45,929 --> 00:47:49,989 para hacer todo esto 733 00:47:49,989 --> 00:47:51,869 desde PHP necesitas 734 00:47:51,869 --> 00:47:52,570 una librería 735 00:47:52,570 --> 00:47:55,789 una librería PHP que la programa 736 00:47:55,789 --> 00:47:57,769 Google, se llama Google Client 737 00:47:57,769 --> 00:47:59,829 entonces como veis aquí en el 738 00:47:59,829 --> 00:48:02,070 Composer, en la definición 739 00:48:02,070 --> 00:48:04,030 de Composer Json, está 740 00:48:04,030 --> 00:48:05,849 la librería 741 00:48:05,849 --> 00:48:07,030 Google Client, ¿vale? 742 00:48:08,550 --> 00:48:10,190 Entonces, bien podéis 743 00:48:10,190 --> 00:48:11,989 añadir esto a mano o bien podéis 744 00:48:11,989 --> 00:48:12,849 hacer un Require, 745 00:48:13,369 --> 00:48:16,190 Composer Require para instalarla. 746 00:48:17,349 --> 00:48:18,090 Yo en la 747 00:48:18,090 --> 00:48:20,289 última versión, creo que es la 2.12, 748 00:48:20,389 --> 00:48:21,190 yo creo que puse la última. 749 00:48:21,969 --> 00:48:23,989 Y luego aquí hay una serie de 750 00:48:23,989 --> 00:48:25,909 añadidos 751 00:48:25,909 --> 00:48:27,650 a Composer que básicamente 752 00:48:27,650 --> 00:48:36,949 tienen que ver con que cuando te la descargues no se descarguen todos los apis rest o la parte 753 00:48:36,949 --> 00:48:41,050 cliente del api red de todos los servicios de google sino solamente de los que vayas a usar 754 00:48:41,050 --> 00:48:50,969 vale si no pones esto él se descarga todos los clientes es decir pensar que ahora como pasaba 755 00:48:50,969 --> 00:48:52,690 con SOAP, yo voy a establecer 756 00:48:52,690 --> 00:48:54,909 peticiones desde mis scripts 757 00:48:54,909 --> 00:48:57,010 PHP hacia el servidor 758 00:48:57,010 --> 00:48:58,230 de Google, ¿no? Y que 759 00:48:58,230 --> 00:49:00,449 de alguna manera maneja ese servicio. 760 00:49:03,269 --> 00:49:04,869 Igual que ocurría con SOAP 761 00:49:04,869 --> 00:49:07,369 cuando hacíamos, a partir del WSDL 762 00:49:07,369 --> 00:49:09,269 generábamos un objeto de servicio, 763 00:49:09,550 --> 00:49:11,130 un objeto cuyos métodos 764 00:49:11,130 --> 00:49:12,710 eran realmente las peticiones 765 00:49:12,710 --> 00:49:14,630 que le enviábamos desde el cliente al servidor, 766 00:49:14,969 --> 00:49:16,909 aquí ocurre lo mismo. Esta librería 767 00:49:16,909 --> 00:49:18,190 de PHP de Google 768 00:49:18,190 --> 00:49:20,750 me va a facilitar el uso 769 00:49:20,750 --> 00:49:25,150 de este API y en vez de tener que utilizar yo las direcciones 770 00:49:25,150 --> 00:49:28,670 URL, HTTP, como pasaba en el 771 00:49:28,670 --> 00:49:32,849 Playground, me lo va a simplificar. ¿De qué manera? Bueno, pues me va a dar 772 00:49:32,849 --> 00:49:36,590 unos objetos que yo voy a instanciar cuyos 773 00:49:36,590 --> 00:49:40,389 métodos directamente se van a codificar 774 00:49:40,389 --> 00:49:44,650 como digo, a mí me va a ofrecer construir objetos 775 00:49:44,650 --> 00:49:48,710 de unas clases y sobre esos objetos voy a poder invocarle 776 00:49:48,710 --> 00:49:55,130 métodos luego internamente esa librería esos métodos lo que van a hacer es establecer la 777 00:49:55,130 --> 00:50:01,369 url correspondiente a la función de ese método y enviársela al servidor pero todo eso a mí como 778 00:50:01,369 --> 00:50:08,110 usuario de ese api me es transparente yo la operativa que tengo desde php es muy sencilla 779 00:50:08,110 --> 00:50:17,989 es instancia del objeto y le invocó un método elite de todo en este básicamente que se se 780 00:50:17,989 --> 00:50:20,190 mapean muy bien con lo que teníamos 781 00:50:20,190 --> 00:50:21,429 aquí, con estas operaciones 782 00:50:21,429 --> 00:50:24,050 ¿vale? con estas operaciones de aquí 783 00:50:24,050 --> 00:50:26,110 pero en vez de yo 784 00:50:26,110 --> 00:50:29,690 tener que escribir todo esto 785 00:50:29,690 --> 00:50:31,650 de aquí, que podría ser un poquito 786 00:50:31,650 --> 00:50:33,829 podría meter errores 787 00:50:33,829 --> 00:50:35,190 etcétera, etcétera, porque en realidad 788 00:50:35,190 --> 00:50:37,889 el API REST es enviarle 789 00:50:37,889 --> 00:50:39,650 este mensaje HTTP al 790 00:50:39,650 --> 00:50:41,670 servidor, eso es realmente lo que 791 00:50:41,670 --> 00:50:42,369 es el API REST 792 00:50:42,369 --> 00:50:45,670 pero en vez de tener yo que escribir todo 793 00:50:45,670 --> 00:50:46,929 esto, lo que me hace es 794 00:50:46,929 --> 00:50:48,889 me construyo un objeto 795 00:50:48,889 --> 00:50:51,170 pues posiblemente un objeto task list 796 00:50:51,170 --> 00:50:53,050 y al que 797 00:50:53,050 --> 00:50:54,309 le puedo invocar 798 00:50:54,309 --> 00:50:56,969 estos métodos, me paso como parámetros 799 00:50:56,969 --> 00:50:58,889 de entrada al método los datos que 800 00:50:58,889 --> 00:51:00,590 tiene que ir 801 00:51:00,590 --> 00:51:02,829 incrustando en la url 802 00:51:02,829 --> 00:51:04,949 y a mi me hace la vida 803 00:51:04,949 --> 00:51:07,010 bastante más fácil, bueno pues ese código 804 00:51:07,010 --> 00:51:08,670 esa librería de cliente 805 00:51:08,670 --> 00:51:11,170 ya es la que proporciona 806 00:51:11,170 --> 00:51:12,130 google, pero 807 00:51:12,130 --> 00:51:14,909 si yo no le pongo esto en el 808 00:51:14,909 --> 00:51:17,110 composer, el me instala 809 00:51:17,110 --> 00:51:19,349 a todos los clientes de todos los servicios. 810 00:51:21,929 --> 00:51:24,449 Finalmente, la distribución del código es muy grande 811 00:51:24,449 --> 00:51:25,730 para cosas que nunca voy a utilizar 812 00:51:25,730 --> 00:51:27,349 porque solo voy a utilizar tasks, ¿vale? 813 00:51:27,630 --> 00:51:29,989 O sea que si utilizas este extra, 814 00:51:30,329 --> 00:51:33,130 te dices, mira, de los servicios de clientes, 815 00:51:33,210 --> 00:51:35,369 solo quiero que me instales tasks. 816 00:51:36,030 --> 00:51:38,809 Solamente te va a incluir ese servicio. 817 00:51:39,369 --> 00:51:39,489 Vale. 818 00:51:40,250 --> 00:51:40,510 Listo. 819 00:51:41,510 --> 00:51:43,829 Con lo cual, tenemos un módulo más, 820 00:51:43,829 --> 00:51:45,489 una librería más 821 00:51:45,489 --> 00:51:48,130 que descargamos de Google 822 00:51:48,130 --> 00:51:50,750 esto lo programa Google 823 00:51:50,750 --> 00:51:54,690 entonces 824 00:51:54,690 --> 00:51:56,730 decía, vamos a 825 00:51:56,730 --> 00:51:58,289 depurar el código 826 00:51:58,289 --> 00:52:00,829 para que veáis como nos va a funcionar 827 00:52:00,829 --> 00:52:01,730 vale, vamos a empezar aquí 828 00:52:01,730 --> 00:52:04,289 vamos a empezar aquí 829 00:52:04,289 --> 00:52:06,030 y vamos a depurarlo 830 00:52:06,030 --> 00:52:09,980 y vamos a ir ejecutándolo poco a poco y os digo un poquito 831 00:52:09,980 --> 00:52:12,000 que hace cada parte del código 832 00:52:12,000 --> 00:52:15,699 ah, perdón, dejarme que arranque 833 00:52:15,699 --> 00:52:25,409 la base de datos y no lo funciona porque en la primera en la primera 834 00:52:28,650 --> 00:52:33,690 en la primera versión no necesita base de datos pero si en la segunda si está 835 00:52:33,690 --> 00:52:38,309 ya en la versión final entonces si no arranca la base de datos 836 00:52:41,610 --> 00:52:48,269 lo tengo parado aquí acordaros en la sesión anterior en la sesión anterior 837 00:52:48,269 --> 00:52:58,769 otra cosa importante que hicimos fue configurar nuestra cuenta de aplicación con google para 838 00:52:58,769 --> 00:53:04,869 solicitar credenciales vale o sea que esto no es tan sencillo como bueno yo soy fulano dale 839 00:53:04,869 --> 00:53:12,210 permisos o consulta juana a ver si quiere que yo entre no no no previamente yo como playground o 840 00:53:12,210 --> 00:53:18,750 como print fast como en este caso esta aplicación de repartos tengo que ir a google y tengo que 841 00:53:18,750 --> 00:53:27,969 registrarme dice yo soy la aplicación repartos y voy a utilizar este mecanismo de poder acceder a 842 00:53:27,969 --> 00:53:32,849 información del usuario final si es que él me da permiso y eso lo hicimos en la tutoría pasada 843 00:53:33,829 --> 00:53:39,570 añadimos información configuración de la venta de la ventana de consentimiento esa ventana que 844 00:53:39,570 --> 00:53:44,190 se retorna al usuario porque es configurable vale para que sea un poquito más personalizada para que 845 00:53:44,190 --> 00:53:49,590 yo pueda poner mi logo pueda poner informaciones que yo pueda entender que son interesantes de 846 00:53:49,590 --> 00:53:56,849 cara a mejorar ese diálogo y luego además pongo información de la redirección que va a hacer 847 00:53:56,849 --> 00:54:06,090 google hacia mi sitio web vale cuando en este momento que teníamos aquí este momento importante 848 00:54:06,090 --> 00:54:13,130 En el que, vale, yo le he dado permiso y en el momento que le doy permiso, 849 00:54:13,610 --> 00:54:16,869 Picasa redirecciona el navegador a mi web. 850 00:54:17,010 --> 00:54:21,550 Bueno, pues esta dirección, esta URI, que llamo URI de redirección, 851 00:54:22,349 --> 00:54:29,190 también la he tenido que configurar cuando me he dado de alta en el Google Developer Console. 852 00:54:29,349 --> 00:54:31,570 Lo que hicimos en la tutoría pasada. 853 00:54:31,570 --> 00:54:52,170 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? 854 00:54:52,170 --> 00:55:17,650 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. 855 00:55:17,650 --> 00:55:20,070 o sea que hay cosas 856 00:55:20,070 --> 00:55:21,809 si no os funciona, pues no 857 00:55:21,809 --> 00:55:24,190 tenéis que comprobar que todo eso coincide, es muy importante 858 00:55:24,190 --> 00:55:25,769 si no hay un 859 00:55:25,769 --> 00:55:28,230 error y no se 860 00:55:28,230 --> 00:55:29,510 lleva a cabo la comunicación 861 00:55:29,510 --> 00:55:32,210 aparte que se hacen esas comprobaciones de 862 00:55:32,210 --> 00:55:34,150 seguridad, efectivamente 863 00:55:34,150 --> 00:55:35,869 eso es así 864 00:55:35,869 --> 00:55:38,030 y que coincide con lo que tú lo has configurado 865 00:55:38,030 --> 00:55:39,690 vale 866 00:55:39,690 --> 00:55:41,909 cuando hicimos el 867 00:55:41,909 --> 00:55:43,789 registro de la aplicación 868 00:55:43,789 --> 00:55:45,650 descargamos unos credenciales 869 00:55:45,650 --> 00:55:47,929 un ficherito Json 870 00:55:47,929 --> 00:55:50,329 que me daba la opción de descargarlo 871 00:55:50,329 --> 00:55:51,789 eso lo necesitamos 872 00:55:51,789 --> 00:55:54,010 porque son los credenciales con los que 873 00:55:54,010 --> 00:55:56,070 yo voy a también interaccionar con 874 00:55:56,070 --> 00:55:57,869 Google y con los servicios de Google 875 00:55:57,869 --> 00:55:59,710 yo soy la aplicación 876 00:55:59,710 --> 00:56:01,630 Tracatrac con este 877 00:56:01,630 --> 00:56:03,630 credencial, ¿por qué? 878 00:56:03,809 --> 00:56:05,849 por control también, porque Google 879 00:56:05,849 --> 00:56:08,150 tiene que saber cuantas veces le estoy pidiendo las cosas 880 00:56:08,150 --> 00:56:10,150 porque si paso en un límite 881 00:56:10,150 --> 00:56:10,809 me va a cobrar 882 00:56:10,809 --> 00:56:14,070 entonces Google cada vez que 883 00:56:14,070 --> 00:56:16,090 hago un registro, de alguna manera 884 00:56:16,090 --> 00:56:18,250 me tiene identificado, ¿vale? Mis credenciales 885 00:56:18,250 --> 00:56:18,969 me identifican 886 00:56:18,969 --> 00:56:21,949 para que yo no pueda exceder un poco 887 00:56:21,949 --> 00:56:23,730 el uso que tengo acordado con Google. 888 00:56:23,869 --> 00:56:25,530 Si es que he pagado una tasa, pues 889 00:56:25,530 --> 00:56:27,750 si he pagado una tasa. Si es que tengo un acceso gratuito, 890 00:56:27,869 --> 00:56:29,769 que es lo que estamos haciendo ahora, estamos 891 00:56:29,769 --> 00:56:31,530 accediendo con este 892 00:56:31,530 --> 00:56:33,869 digamos nivel gratuito, que son 893 00:56:33,869 --> 00:56:35,769 muy pocas peticiones, pero suficientes como 894 00:56:35,769 --> 00:56:37,070 para probar 895 00:56:37,070 --> 00:56:38,909 la aplicación. 896 00:56:39,750 --> 00:56:41,989 Pero él sabe que yo estoy accediendo. 897 00:56:42,170 --> 00:56:43,849 No es gratuito, venga, tú haz lo que 898 00:56:43,849 --> 00:56:45,650 quieras, no, no, él tiene control sobre ti 899 00:56:45,650 --> 00:56:47,670 te da unas credenciales y tú tienes que 900 00:56:47,670 --> 00:56:48,550 atenerte un poco a Zeus 901 00:56:48,550 --> 00:56:51,570 vale, pues esto sale del entorno 902 00:56:51,570 --> 00:56:53,769 y el entorno, acordaros, es este ficherito 903 00:56:53,769 --> 00:56:55,329 .ef, no lo voy a visualizar 904 00:56:55,329 --> 00:56:57,690 bueno, no lo voy a visualizar 905 00:56:57,690 --> 00:56:59,409 porque hay claves 906 00:56:59,409 --> 00:57:01,469 aquí es donde van a parar todas las claves 907 00:57:01,469 --> 00:57:02,269 de todos los APIs 908 00:57:02,269 --> 00:57:05,670 como yo creo que os enseñé también 909 00:57:05,670 --> 00:57:06,630 en la auditoría pasada 910 00:57:06,630 --> 00:57:08,949 entonces 911 00:57:08,949 --> 00:57:11,130 ahí es donde tenéis que ir dando de alta 912 00:57:11,130 --> 00:57:13,550 tenéis un ejemplo 913 00:57:13,550 --> 00:57:15,909 .env.ejemplo 914 00:57:15,909 --> 00:57:18,130 que os dice los nombres de los campos 915 00:57:18,130 --> 00:57:19,389 y luego ya tenéis que 916 00:57:19,389 --> 00:57:22,650 rellenar ese ficherito de configuración 917 00:57:22,650 --> 00:57:23,750 con vuestras claves 918 00:57:23,750 --> 00:57:26,550 ir a cada sitio, ir a Big Maps 919 00:57:26,550 --> 00:57:28,190 ir a OpenWeather 920 00:57:28,190 --> 00:57:28,929 si es que queréis 921 00:57:28,929 --> 00:57:32,389 vosotros también ejecutar el código 922 00:57:32,389 --> 00:57:34,590 de OpenWeather, en todos esos sitios 923 00:57:34,590 --> 00:57:36,230 os registráis y 924 00:57:36,230 --> 00:57:37,869 gratuitamente os van a dar las claves 925 00:57:37,869 --> 00:57:40,449 de alguna manera lo necesitáis 926 00:57:40,449 --> 00:57:42,170 también para que estas aplicaciones 927 00:57:42,170 --> 00:57:43,769 funcionan, si no ningún proveedor 928 00:57:43,769 --> 00:57:45,550 os va a dar acceso a sus servicios 929 00:57:45,550 --> 00:57:46,710 vale 930 00:57:46,710 --> 00:57:50,090 pues vamos a hacerlo correr, aquí tengo ya las 931 00:57:50,090 --> 00:57:52,110 credenciales, fijaros en 932 00:57:52,110 --> 00:57:53,150 el URI, vale 933 00:57:53,150 --> 00:57:55,170 el URI que tenemos nosotros 934 00:57:55,170 --> 00:57:58,369 es http://localhost 935 00:57:58,369 --> 00:57:58,989 8000 936 00:57:58,989 --> 00:58:01,369 ¿qué hay aquí? 937 00:58:01,849 --> 00:58:04,170 aquí tenéis que poner donde está ejecutando 938 00:58:04,170 --> 00:58:06,610 el script 939 00:58:06,610 --> 00:58:09,760 que tiene que recibir 940 00:58:09,760 --> 00:58:11,440 el código, en este caso es index 941 00:58:11,440 --> 00:58:13,480 index.php va a recibir el código 942 00:58:13,480 --> 00:58:37,480 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. 943 00:58:37,480 --> 00:58:40,840 que puede ser http://localhost 944 00:58:40,840 --> 00:58:44,019 barra y el nombre 945 00:58:44,019 --> 00:58:46,440 de la carpeta donde hayáis puesto vuestro proyecto 946 00:58:46,440 --> 00:58:49,099 el tws08tarea 947 00:58:49,099 --> 00:58:53,000 pero tiene que estar 948 00:58:53,000 --> 00:58:57,460 redirigido a la ubicación 949 00:58:57,460 --> 00:58:58,559 donde está el script 950 00:58:58,559 --> 00:59:03,139 al que va el navegador a solicitarle 951 00:59:03,139 --> 00:59:06,119 oye pues ahora me han pedido 952 00:59:06,119 --> 00:59:08,679 que te contacte a ti y que te envíe 953 00:59:08,679 --> 00:59:14,519 Obviamente con esta URL que lleva este parámetro de código asociado para hacerte llegar este código. 954 00:59:16,179 --> 00:59:17,280 Sí, o sea que esto es importante. 955 00:59:17,639 --> 00:59:22,079 ¿Se entiende más o menos esta jugada de los URIs y la de redirección? 956 00:59:23,699 --> 00:59:24,619 ¿Se intuye? 957 00:59:25,480 --> 00:59:26,599 Va, perfecto. 958 00:59:26,960 --> 00:59:31,559 Vale, una vez que tengo ya estos parámetros, ya puedo crear una instancia de Google Client. 959 00:59:32,000 --> 00:59:32,480 Acordaros. 960 00:59:32,480 --> 00:59:38,119 acordaros 961 00:59:38,119 --> 00:59:42,500 que todo esto es orientado a objetos 962 00:59:42,500 --> 00:59:44,539 ¿vale? de nuevo, todos los APIs 963 00:59:44,539 --> 00:59:46,159 que encontráis ya modernos 964 00:59:46,159 --> 00:59:48,019 todos van orientados a objetos 965 00:59:48,019 --> 00:59:50,559 entonces aquí ya no hay funciones 966 00:59:50,559 --> 00:59:52,360 aquí siempre funciona de la misma manera 967 00:59:52,360 --> 00:59:54,239 tienes un API que significa 968 00:59:54,239 --> 00:59:55,440 un conjunto de clases 969 00:59:55,440 --> 00:59:58,079 que puedes ir instanciando objetos de ellas 970 00:59:58,079 --> 01:00:00,559 y que invocándole 971 01:00:00,559 --> 01:00:02,719 métodos a los objetos que has instanciado 972 01:00:02,719 --> 01:00:04,179 te dan la funcionalidad 973 01:00:04,179 --> 01:00:05,719 ¿vale? de ese app 974 01:00:05,719 --> 01:00:08,440 entonces, esta librería Google Client 975 01:00:08,440 --> 01:00:10,599 pues ¿cómo la vamos a usar? instanciando 976 01:00:10,599 --> 01:00:12,000 un objeto, como hacíamos 977 01:00:12,000 --> 01:00:14,559 con SwapServer o SwapClient, todo esto 978 01:00:14,559 --> 01:00:16,599 al final son clases 979 01:00:16,599 --> 01:00:18,260 de las cuales instancias objetos y le 980 01:00:18,260 --> 01:00:19,440 invocas métodos 981 01:00:19,440 --> 01:00:22,460 vale, pues a este cliente que creas, le vamos 982 01:00:22,460 --> 01:00:24,579 asociando distintos 983 01:00:24,579 --> 01:00:26,599 datos, vale, vamos a ir corriendo 984 01:00:26,599 --> 01:00:28,460 el script 985 01:00:28,460 --> 01:00:30,460 paso a paso, hemos creado, pero bueno 986 01:00:30,460 --> 01:00:33,500 Le podemos ir dando información de cómo se llama la aplicación. 987 01:00:34,440 --> 01:00:38,059 Le vamos a dar información de cuáles son mis credenciales con 988 01:00:38,059 --> 01:00:40,119 este método set of config, ¿vale? 989 01:00:40,119 --> 01:00:44,340 Le doy el ficherito, ese json que me bajé cuando creé las 990 01:00:44,340 --> 01:00:45,059 credenciales. 991 01:00:45,340 --> 01:00:47,980 Le doy información del redirect URI. 992 01:00:48,340 --> 01:00:50,699 Este tiene que coincidir, repito, 993 01:00:50,800 --> 01:00:54,340 tiene que coincidir con el que configure cuando configure la 994 01:00:54,340 --> 01:00:58,559 redirección en Google, en la consola de Google. 995 01:00:59,659 --> 01:00:59,860 ¿Vale? 996 01:00:59,860 --> 01:01:06,780 Y también le configuro cuál va a ser lo que va a requerir como permiso. 997 01:01:07,239 --> 01:01:12,340 El scope, básicamente, significa cuando tú vayas a pedirle permisos al cliente final, 998 01:01:13,280 --> 01:01:14,800 ¿sobre qué le vas a pedir permisos? 999 01:01:15,300 --> 01:01:15,440 ¿Vale? 1000 01:01:15,719 --> 01:01:21,199 Y con esta constante, yo le estoy diciendo que tiene que pedir permisos para gestionar sus tareas. 1001 01:01:22,099 --> 01:01:22,219 ¿Vale? 1002 01:01:22,239 --> 01:01:24,340 Si fuera cosas de Gmail, pues aquí cambiaría. 1003 01:01:24,500 --> 01:01:26,199 Sería service, Gmail, ta, ta, ta. 1004 01:01:26,780 --> 01:01:27,360 O YouTube. 1005 01:01:27,360 --> 01:01:29,500 o lo que en principio 1006 01:01:29,500 --> 01:01:30,599 necesitar 1007 01:01:30,599 --> 01:01:32,980 vale 1008 01:01:32,980 --> 01:01:35,500 le digo set access type offline 1009 01:01:35,500 --> 01:01:37,199 esto es para poder refrescar el token 1010 01:01:37,199 --> 01:01:39,199 vale, quiero un token de refresco también 1011 01:01:39,199 --> 01:01:40,940 le voy a solicitar un token de refresco 1012 01:01:40,940 --> 01:01:43,340 y set prompt 1013 01:01:43,340 --> 01:01:44,539 es para que efectivamente 1014 01:01:44,539 --> 01:01:47,460 pida consentimiento, vale, que no sea un proceso 1015 01:01:47,460 --> 01:01:49,619 distinto 1016 01:01:49,619 --> 01:01:51,400 sino que le presente la ventana 1017 01:01:51,400 --> 01:01:53,019 de consentimiento al usuario para poder 1018 01:01:53,019 --> 01:01:54,480 yo luego acceder a sus datos 1019 01:01:54,480 --> 01:01:56,539 vale 1020 01:01:56,539 --> 01:02:23,519 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. 1021 01:02:23,519 --> 01:02:29,940 Es decir, viene algo en $GET de CODE, ¿vale? 1022 01:02:30,400 --> 01:02:31,760 Os vuelvo a poner este, ¿no? 1023 01:02:32,719 --> 01:02:33,820 Imaginaros que estoy aquí. 1024 01:02:35,480 --> 01:02:44,380 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. 1025 01:02:45,300 --> 01:02:50,760 Y esto va a dar true, o sea, que va a entrar por esta rama, ¿vale? 1026 01:02:51,440 --> 01:02:52,360 ¿Ese es el caso? 1027 01:02:52,360 --> 01:03:18,500 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. 1028 01:03:18,500 --> 01:03:22,639 con lo cual esto se va a saltar 1029 01:03:22,639 --> 01:03:24,539 vamos al otro iset 1030 01:03:24,539 --> 01:03:26,900 puede ocurrir otro escenario 1031 01:03:26,900 --> 01:03:28,360 es en el que 1032 01:03:28,360 --> 01:03:30,920 ya me ha llegado el código 1033 01:03:30,920 --> 01:03:33,340 y lo he guardado en la sesión 1034 01:03:33,340 --> 01:03:35,119 que es como lo voy a implementar 1035 01:03:35,119 --> 01:03:36,260 en esta aplicación, hay otras 1036 01:03:36,260 --> 01:03:38,739 de implementarlo, de guardarlo en una base de datos 1037 01:03:38,739 --> 01:03:41,260 o guardarlo en otros medios 1038 01:03:41,260 --> 01:03:43,460 persistentes para que no se pierda 1039 01:03:43,460 --> 01:03:44,579 entre petición y petición 1040 01:03:44,579 --> 01:03:47,280 yo aquí, un método muy sencillo es guardarlo en la sesión 1041 01:03:47,280 --> 01:03:49,320 ¿cuándo ocurre esto? 1042 01:03:49,320 --> 01:04:07,900 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. 1043 01:04:07,900 --> 01:04:09,940 ese es el caso, no, porque sesión 1044 01:04:09,940 --> 01:04:11,579 en principio está vacía 1045 01:04:11,579 --> 01:04:15,429 no hay nada en la sesión de 1046 01:04:15,429 --> 01:04:16,530 de PHP 1047 01:04:16,530 --> 01:04:19,250 con lo cual este tampoco es el caso 1048 01:04:19,250 --> 01:04:21,469 lo saltamos, vamos a este 1049 01:04:21,469 --> 01:04:23,670 y si no, ya aquí, este sí que 1050 01:04:23,670 --> 01:04:25,650 va a ser el caso, lo que voy a hacer 1051 01:04:25,650 --> 01:04:27,730 es crear la URL 1052 01:04:27,730 --> 01:04:29,949 que va a redirigir 1053 01:04:29,949 --> 01:04:30,670 al navegador 1054 01:04:30,670 --> 01:04:33,829 para que empiece la comunicación 1055 01:04:33,829 --> 01:04:35,489 2.0 con Google 1056 01:04:35,489 --> 01:04:37,150 ¿vale? este paso 1057 01:04:37,150 --> 01:04:39,289 es este de aquí, ¿vale? 1058 01:04:39,369 --> 01:04:41,949 Este paso es este de aquí. 1059 01:04:43,510 --> 01:04:45,429 Este primer paso en el que 1060 01:04:45,429 --> 01:04:49,050 una vez que el usuario dice, 1061 01:04:49,150 --> 01:04:50,590 vale, pues quiero entrar en Picasa, 1062 01:04:51,130 --> 01:04:52,730 lo que hace PrintFast es decir, 1063 01:04:52,849 --> 01:04:54,070 vale, pues habla con Picasa. 1064 01:04:55,590 --> 01:04:57,130 Y esta URL de aquí, 1065 01:04:57,449 --> 01:04:58,789 que es a la que se redirecciona 1066 01:04:58,789 --> 01:05:00,969 al navegador, es justo 1067 01:05:00,969 --> 01:05:03,230 esta URL que se crea 1068 01:05:03,230 --> 01:05:05,090 automáticamente, que yo no tengo que 1069 01:05:05,090 --> 01:05:07,030 construirla porque es una URL un poquito 1070 01:05:07,030 --> 01:05:09,190 larga y compleja, pero con este 1071 01:05:09,190 --> 01:05:11,170 método del cliente me la crea 1072 01:05:11,170 --> 01:05:13,309 automáticamente. Vale, de hecho 1073 01:05:13,309 --> 01:05:14,969 si yo le doy un paso 1074 01:05:14,969 --> 01:05:17,250 y miro cuál es el... 1075 01:05:17,250 --> 01:05:18,650 ¿Ves? Es una URL compleja. 1076 01:05:20,409 --> 01:05:21,050 Tiene mis... 1077 01:05:21,050 --> 01:05:21,610 Vale. 1078 01:05:24,030 --> 01:05:25,090 Vale, ¿sí? 1079 01:05:25,309 --> 01:05:26,389 Es una URL compleja. 1080 01:05:30,380 --> 01:05:30,980 Listo. 1081 01:05:32,820 --> 01:05:34,539 Y con esa URL 1082 01:05:34,539 --> 01:05:36,099 lo que hago es 1083 01:05:36,099 --> 01:05:38,559 hacer la redirección 1084 01:05:38,559 --> 01:05:39,719 aquí es donde le pido 1085 01:05:39,719 --> 01:05:41,559 al navegador 1086 01:05:41,559 --> 01:05:43,260 que redireccione 1087 01:05:43,260 --> 01:05:46,460 hacia esa url que he creado 1088 01:05:46,460 --> 01:05:47,800 con este método 1089 01:05:47,800 --> 01:05:50,840 que me da la librería de google 1090 01:05:50,840 --> 01:05:52,619 con lo cual 1091 01:05:52,619 --> 01:05:54,639 lo que voy a conseguir es que el navegador 1092 01:05:54,639 --> 01:05:56,900 directamente 1093 01:05:56,900 --> 01:05:57,880 coja y envíe 1094 01:05:57,880 --> 01:06:00,219 en vez de recibir una página 1095 01:06:00,219 --> 01:06:02,000 esta petición que ha hecho inicial 1096 01:06:02,000 --> 01:06:04,539 en vez de recibir una página del servidor 1097 01:06:04,539 --> 01:06:05,619 creada por este script 1098 01:06:05,619 --> 01:06:33,440 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. 1099 01:06:33,440 --> 01:06:55,710 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. 1100 01:06:55,710 --> 01:07:00,869 acordaros que también os dije estas aplicaciones de momento google cuando las registras las pone 1101 01:07:00,869 --> 01:07:07,469 como en prueba no son aplicaciones de las que te dan todas las garantías porque tampoco hemos 1102 01:07:07,469 --> 01:07:13,949 pasado por ningún mecanismo de verificación de esta aplicación que siempre te avisa puede ser 1103 01:07:13,949 --> 01:07:19,349 que tú puedas añadir estos usuarios como usuarios de prueba y a lo mejor posiblemente de esa manera 1104 01:07:19,349 --> 01:07:25,969 no te avise cuando registras la aplicación puede estar de alta unos usuarios de prueba en este caso 1105 01:07:25,969 --> 01:07:31,710 yo no registré ninguno y sí que me sale este mensajito este este aviso diciendo cuidado que 1106 01:07:31,710 --> 01:07:38,510 esta aplicación está un poquito de esa manera vale yo le digo continuar y ahora ya si me da 1107 01:07:38,510 --> 01:07:49,130 vale me dice confirma ya tengo cierto acceso de ejecuciones previas vale pero tengo que de alguna 1108 01:07:49,130 --> 01:07:51,690 Y el servicio al que he dado permiso es este, ¿no? 1109 01:07:51,690 --> 01:07:53,929 Crear, modificar, organizar y eliminar tareas. 1110 01:07:58,579 --> 01:07:59,519 Luego lo veremos. 1111 01:07:59,800 --> 01:08:04,179 Desde tu cuenta de Google tienes acceso, a ver si me da acceso desde aquí. 1112 01:08:04,579 --> 01:08:13,590 Desde mi cuenta de Google, como veis, aquí tengo todas las aplicaciones que me han pedido permisos. 1113 01:08:14,050 --> 01:08:20,369 Y si lo comprobáis vosotros en vuestras cuentas de Google podéis ver a quién habéis dado permiso. 1114 01:08:20,369 --> 01:08:46,630 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. 1115 01:08:46,630 --> 01:09:12,550 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? 1116 01:09:12,550 --> 01:09:23,710 de gmail a esta aplicación calendarios contactos con estas aplicaciones es tema profesional pues 1117 01:09:23,710 --> 01:09:29,649 no pasa nada profesionales tampoco pero si son personales cuidado con todo esto porque todas 1118 01:09:29,649 --> 01:09:38,770 estas aplicaciones pueden ir a vale y lo mismo con las otras aplicaciones vale podéis revisar 1119 01:09:38,770 --> 01:09:47,890 un poco qué tipo de permiso les habéis dado a cada una de ellas vale yo estaba estaba aquí 1120 01:09:47,890 --> 01:09:55,350 vale hecho le digo venga pues continuar confirmó que confío en esta aplicación cuando voy a 1121 01:09:55,350 --> 01:10:05,840 continuar es que se me vuelve otra vez activar el script index porque porque google ha redireccionado 1122 01:10:05,840 --> 01:10:12,739 de nuevo el navegador para que acceda a la uri extra de redirección que es http 2 punto barra 1123 01:10:12,739 --> 01:10:19,939 barra localhost 2.8 mil es decir activa mi índex de nuevo y ahora sí que tengo en dólares como 1124 01:10:19,939 --> 01:10:32,880 veis y que tengo datos en dólares y que tengo datos porque de hecho bueno sí que tengo me ha 1125 01:10:32,880 --> 01:10:42,239 llegado esa petición con esos datos si yo vuelvo a ejecutar el script vuelvo a creer el google 1126 01:10:42,239 --> 01:10:51,819 client con los mismos datos llegó a este if pero este if ahora sí que retorna verdadero el y set 1127 01:10:51,819 --> 01:11:05,640 de get the code me dice si lo puedo evaluar true vale así que entra por esta rama porque sí que me 1128 01:11:05,640 --> 01:11:12,479 llega en este mensaje url yo he dado el permiso me llega el código que hago con este código vale 1129 01:11:12,479 --> 01:11:19,159 por lo primero es cambiarlo por un token de acceso y un método también de la librería que se llama 1130 01:11:19,159 --> 01:11:28,340 fetch access token with of code yo le pasó el código es este de aquí y me lo va a convertir me 1131 01:11:28,340 --> 01:11:34,399 lo va a transformar en un access token que es lo que nosotros hacíamos con el playground vale 1132 01:11:34,399 --> 01:12:04,140 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. 1133 01:12:04,140 --> 01:12:06,760 y yo que hago con ese token, lo guardo 1134 01:12:06,760 --> 01:12:08,859 en la sesión, vale, este token 1135 01:12:08,859 --> 01:12:10,739 que he recibido aquí 1136 01:12:10,739 --> 01:12:12,680 que he obtenido, habiendo 1137 01:12:12,680 --> 01:12:14,840 ejecutado este método, lo que hago es lo meto 1138 01:12:14,840 --> 01:12:16,300 en el campo 1139 01:12:16,300 --> 01:12:18,819 token de la sesión 1140 01:12:18,819 --> 01:12:20,039 que tengo en PHP 1141 01:12:20,039 --> 01:12:22,739 que también expira en su momento, o sea con esto 1142 01:12:22,739 --> 01:12:24,560 tampoco te salvas, porque llega un momento 1143 01:12:24,560 --> 01:12:26,300 en que estos tokens también 1144 01:12:26,300 --> 01:12:28,779 dentro de la sesión, esta información expira 1145 01:12:28,779 --> 01:12:30,600 y no quedaría otra que 1146 01:12:30,600 --> 01:12:32,479 volver a refrescar y volver otra vez a 1147 01:12:32,479 --> 01:12:40,220 a molestar al usuario para que te diera permiso de nuevo para entrar aquí tampoco es una si tú 1148 01:12:40,220 --> 01:12:44,239 no quieres molestar al usuario una vez que te ha dado el permiso ya funcionar con ese toque 1149 01:12:44,239 --> 01:12:48,560 tendrías que guardar este toque en otro sitio y hacer cierta gestión de ir refrescando los 1150 01:12:48,560 --> 01:12:56,460 tokens vale guardo también el refresh toque por si lo necesito que en este caso no en principio 1151 01:12:56,460 --> 01:13:05,460 no bueno sí sí que utiliza pues si está aspirado lo intentó refrescar vale y ahora en esta en este 1152 01:13:05,460 --> 01:13:12,899 en este escenario sí que ya voy a entrar también por aquí porque hice sesión de toquen sí sí sí 1153 01:13:12,899 --> 01:13:20,439 ahora sí ahora esto es true porque lo acabo de meter aquí arriba estoy en una sesión en la que 1154 01:13:20,439 --> 01:13:29,060 ya tengo el código y lo tengo metido en la sesión que hago bueno pues establezco en el cliente 1155 01:13:29,060 --> 01:13:36,859 establezco ahora el token de sesión vale set access token es decir le doy de alta el token 1156 01:13:36,859 --> 01:13:41,600 de acceso dentro del objeto este de cliente que me representa un poco el google client 1157 01:13:43,520 --> 01:13:51,899 pregunto está expirado puede que haya expirado ya lo tenga pero a efectos de google dice no 1158 01:13:51,899 --> 01:13:56,880 no esté este token y aspirado no puedes usarlo entonces tendría que entrar en el proceso de 1159 01:13:56,880 --> 01:14:02,399 refrescarlo vale pasándole el refresh token con este otro método fech access token with 1160 01:14:02,399 --> 01:14:10,020 refresh toque en este caso no debería estar inspirado con lo cual si no está 1161 01:14:11,779 --> 01:14:14,180 si no está expirado salta este if 1162 01:14:14,180 --> 01:14:18,180 y directamente me viene aquí, ¿vale? 1163 01:14:18,319 --> 01:14:20,020 Salto este if y directamente 1164 01:14:20,020 --> 01:14:21,920 vengo aquí. 1165 01:14:25,500 --> 01:14:25,680 ¿Vale? 1166 01:14:26,840 --> 01:14:29,300 Una vez que estoy en este punto 1167 01:14:29,300 --> 01:14:31,220 yo ya puedo 1168 01:14:31,220 --> 01:14:32,680 solicitar 1169 01:14:32,680 --> 01:14:34,979 la posibilidad de hacer 1170 01:14:34,979 --> 01:14:36,500 o de usar el API 1171 01:14:36,500 --> 01:14:38,739 de Google Tasks. ¿Vale? 1172 01:14:38,760 --> 01:14:40,779 Porque hasta aquí todavía 1173 01:14:40,779 --> 01:14:42,819 lo que he hecho es este proceso de aquí arriba. 1174 01:14:43,880 --> 01:14:44,960 Esto de aquí arriba. 1175 01:14:44,960 --> 01:14:50,699 pero todavía no enviado ningún mensaje para solicitar información de tareas este punto 1176 01:14:50,699 --> 01:14:56,439 3 todavía no lo he hecho hecho este primero y hecho este segundo y me encuentro con que ya 1177 01:14:56,439 --> 01:15:06,659 tengo estos tokens y estoy preparado para enviar mensajes http con el formato correcto para poder 1178 01:15:06,659 --> 01:15:15,819 solicitar información de tareas vale y entonces este objeto esta clase google service tasks es 1179 01:15:15,819 --> 01:15:25,659 parte de lo que me descarga el cliente de google para interaccionar con el api de google estás vale 1180 01:15:25,659 --> 01:15:30,659 si tuviera que interaccionar interaccionar con otro servicio con gmail o con youtube pues que 1181 01:15:30,659 --> 01:15:37,800 tendría que crear otro objeto tendría que crear new google service youtube vale pero fijaros que 1182 01:15:37,800 --> 01:15:42,359 le pasó el objeto cliente donde está el toque en donde está hay un montón de información para que 1183 01:15:42,359 --> 01:15:48,659 con esa información y mis peticiones él compruebe pues sí pues tiene el toque de autorización todo 1184 01:15:48,659 --> 01:16:01,100 es correcto la información de las tareas de juan vale pues y hasta aquí y hasta aquí hasta aquí la 1185 01:16:01,100 --> 01:16:06,859 parte del cliente google que os quería mostrar antes de empezar ya con el código concreto de 1186 01:16:06,859 --> 01:16:11,539 la aplicación porque os lo quiero mostrar desde más alto nivel no entrar en código tan bajo nivel 1187 01:16:13,760 --> 01:16:21,140 de alguna manera asegurarme de que todo este proceso se ha quedado más o menos claro 1188 01:16:22,739 --> 01:16:39,510 y que lo tenéis entendido bien pues voy a enseñaros por encima el api de google task 1189 01:16:39,510 --> 01:16:41,510 y ya arranco directamente 1190 01:16:41,510 --> 01:16:47,819 con la aplicación de reportes 1191 01:16:47,819 --> 01:17:01,670 por ejemplo, tenéis estos dos enlaces 1192 01:17:01,670 --> 01:17:03,689 y os llevan 1193 01:17:03,689 --> 01:17:06,029 a una descripción 1194 01:17:06,029 --> 01:17:06,649 genérica 1195 01:17:06,649 --> 01:17:10,029 aquí tenéis las operaciones 1196 01:17:10,029 --> 01:17:11,229 que podéis hacer sobre 1197 01:17:11,229 --> 01:17:12,850 las listas de tareas 1198 01:17:12,850 --> 01:17:15,590 aquí tenéis en principio 1199 01:17:15,590 --> 01:17:17,609 como digo 1200 01:17:17,609 --> 01:17:19,909 vosotros no vais a utilizar las urls 1201 01:17:19,909 --> 01:17:22,449 Sino que vais a utilizar la librería PHP 1202 01:17:22,449 --> 01:17:24,170 Que os va a simplificar todo esto 1203 01:17:24,170 --> 01:17:26,189 Vamos a entrar luego en el código de la librería 1204 01:17:26,189 --> 01:17:27,149 Para que veáis un poquito 1205 01:17:27,149 --> 01:17:29,970 Las operaciones que tenéis disponibles 1206 01:17:29,970 --> 01:17:31,750 Pero esto es un poco conceptualmente 1207 01:17:31,750 --> 01:17:32,949 Aquí os muestra 1208 01:17:32,949 --> 01:17:36,210 Cuál va a ser un poco la URL 1209 01:17:36,210 --> 01:17:38,270 Donde tenéis que poner los parámetros 1210 01:17:38,270 --> 01:17:39,890 Y os da un poquito 1211 01:17:39,890 --> 01:17:41,430 Una descripción textual 1212 01:17:41,430 --> 01:17:42,770 De qué operaciones tenéis 1213 01:17:42,770 --> 01:17:45,630 Entonces tenéis delete, get, insert, list, patch, update 1214 01:17:45,630 --> 01:17:47,350 Y luego sobre la tarea 1215 01:17:47,350 --> 01:17:49,449 Que aquí dice del equipo 1216 01:17:49,449 --> 01:17:51,069 puedan asignar tareas. Esto no lo entiendo muy bien. 1217 01:17:51,170 --> 01:17:53,010 Esto está mal traducido. En realidad esto es 1218 01:17:53,010 --> 01:17:55,189 listas de tareas y esto es tareas, 1219 01:17:55,489 --> 01:17:57,409 operaciones que podéis hacer sobre tareas 1220 01:17:57,409 --> 01:17:59,229 concretas. Podéis borrar, 1221 01:17:59,789 --> 01:18:01,689 podéis obtener, podéis insertar, 1222 01:18:01,989 --> 01:18:03,449 podéis listar, podéis mover 1223 01:18:03,449 --> 01:18:05,449 el orden, podéis 1224 01:18:05,449 --> 01:18:06,810 modificar cosas, 1225 01:18:07,529 --> 01:18:08,609 podéis hacer distintas cosas 1226 01:18:08,609 --> 01:18:11,289 con una tarea concreta. 1227 01:18:12,550 --> 01:18:13,430 ¿Cómo vamos 1228 01:18:13,430 --> 01:18:15,750 a utilizar nosotros estas operaciones? 1229 01:18:16,189 --> 01:18:16,449 Pues, 1230 01:18:17,569 --> 01:18:18,750 os adelanto. Recordad que 1231 01:18:18,750 --> 01:18:19,930 en su momento 1232 01:18:19,930 --> 01:18:22,689 nosotros en nuestro diseño orientado a objetos 1233 01:18:22,689 --> 01:18:24,609 en nuestra aplicación vamos a tener 1234 01:18:24,609 --> 01:18:26,590 objetos listas de tareas y objetos 1235 01:18:26,590 --> 01:18:28,529 tareas y objetos 1236 01:18:28,529 --> 01:18:30,609 producto del que teníamos de toda la vida 1237 01:18:30,609 --> 01:18:32,409 que hemos ido utilizando 1238 01:18:32,409 --> 01:18:33,829 las distintas aplicaciones 1239 01:18:33,829 --> 01:18:36,770 y en su día 1240 01:18:36,770 --> 01:18:40,260 programamos DAOs 1241 01:18:40,260 --> 01:18:41,619 programamos objetos DAO 1242 01:18:41,619 --> 01:18:44,020 que permitían que esos 1243 01:18:44,020 --> 01:18:46,140 objetos que íbamos creando pudieran 1244 01:18:46,140 --> 01:18:48,060 ser persistidos, pudieran ser 1245 01:18:48,060 --> 01:18:49,180 guardados, almacenados 1246 01:18:49,180 --> 01:18:51,079 en ese medio persistente 1247 01:18:51,079 --> 01:18:54,079 cuando creamos un nuevo producto 1248 01:18:54,079 --> 01:18:55,739 pues lo podíamos meter en la base de datos 1249 01:18:55,739 --> 01:18:57,979 bueno, pues ahora ese medio persistente 1250 01:18:57,979 --> 01:18:59,880 ya no va a ser una base de datos 1251 01:18:59,880 --> 01:19:02,060 MySQL que tengamos asociada al script 1252 01:19:02,060 --> 01:19:03,880 sino que va a ser el servicio 1253 01:19:03,880 --> 01:19:04,479 de tasks 1254 01:19:04,479 --> 01:19:07,420 ¿sí? se coge un poquito la idea, entonces 1255 01:19:07,420 --> 01:19:09,859 yo en vez de cuando vaya 1256 01:19:09,859 --> 01:19:12,079 a utilizar el API o la aplicación 1257 01:19:12,079 --> 01:19:13,500 perdón, cuando voy a utilizar la aplicación 1258 01:19:13,500 --> 01:19:15,680 voy a tener un pequeño formulario 1259 01:19:15,680 --> 01:19:16,840 que me va a permitir 1260 01:19:16,840 --> 01:19:19,399 guardar un reparto 1261 01:19:19,399 --> 01:19:21,439 ¿vale? ese reparto 1262 01:19:21,439 --> 01:19:23,760 estamos hablando de logística ¿vale? estamos hablando 1263 01:19:23,760 --> 01:19:25,520 de que tengo que llevar una impresora 1264 01:19:25,520 --> 01:19:28,039 a tal sitio de Madrid ¿vale? esos son repartos 1265 01:19:28,039 --> 01:19:29,819 es una empresa de logística 1266 01:19:29,819 --> 01:19:31,720 entonces 1267 01:19:31,720 --> 01:19:32,939 esos repartos 1268 01:19:32,939 --> 01:19:35,840 ¿dónde se van a guardar? se tienen que guardar porque una vez 1269 01:19:35,840 --> 01:19:38,000 que lo he creado, si no lo guardo 1270 01:19:38,000 --> 01:19:39,500 desaparece ¿no? una vez que la script 1271 01:19:39,500 --> 01:19:41,840 termina, toda esa información que tengo 1272 01:19:41,840 --> 01:19:44,000 en memoria desaparecería, tengo que guardarlo 1273 01:19:44,000 --> 01:19:46,079 en algún sitio, bueno pues ¿dónde lo voy a guardar? 1274 01:19:46,079 --> 01:19:49,199 en mi agenda de Google Tasks. 1275 01:19:50,180 --> 01:19:53,939 Voy a codificar esa información para que aparezca de alguna manera 1276 01:19:53,939 --> 01:19:59,399 toda representada, porque la tarea tiene pocos campos, 1277 01:19:59,520 --> 01:20:02,180 pero ya la voy a codificar de una manera que pueda meter la dirección, 1278 01:20:02,840 --> 01:20:04,640 pueda meter datos de las coordenadas, 1279 01:20:04,640 --> 01:20:09,420 puede meter información distinta que voy a requerir, 1280 01:20:09,600 --> 01:20:11,840 y la voy a guardar en mis tareas. 1281 01:20:12,039 --> 01:20:13,819 Entonces, una task list. 1282 01:20:13,819 --> 01:20:27,979 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. 1283 01:20:27,979 --> 01:20:39,220 o sea que una lista de tareas me va a permitir representar los repartos de un día 1284 01:20:39,220 --> 01:20:46,430 si yo abro uno de ellos, aquí están los repartos individuales 1285 01:20:46,430 --> 01:20:52,189 vale, entonces, ¿dentro de qué información quiero representar para un reparto? 1286 01:20:52,189 --> 01:21:09,289 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. 1287 01:21:09,289 --> 01:21:18,310 luego tengo una persona que lo separa de la calle de la información de la dirección a la que tengo 1288 01:21:18,310 --> 01:21:25,869 que llevarlo esto sería el título vale pero como veis lo tengo codificado con un aquí en el medio 1289 01:21:25,869 --> 01:21:31,569 para que luego cuando lo lea pueda sacar por un lado el nombre y por otro lado la dirección y 1290 01:21:31,569 --> 01:21:38,949 luego aquí hay una nota asociada que es la información de coordenadas geográficas la 1291 01:21:38,949 --> 01:21:48,630 latitud pero en la longitud y la latitud vale también separado con un ant vale voy a leer esto 1292 01:21:48,630 --> 01:21:54,170 voy a tener que partir ese script pero en ese string en dos trocitos con un separador que se 1293 01:21:54,170 --> 01:22:00,409 la voy a los dos datos en cada lado delante y uno va a ser un dato de coordenada y otro 1294 01:22:00,409 --> 01:22:10,800 otro vale es un poco para que os voy a enseñar la aplicación funcionando y luego la vemos un 1295 01:22:10,800 --> 01:22:28,649 poco a nivel de diseño vale entonces vale vamos a verlos esto estaba vamos a cortar es así 1296 01:22:32,310 --> 01:22:42,020 vale continuar vale está iniciando la sesión y este es el interfaz no es demasiado fancy 1297 01:22:42,020 --> 01:22:47,439 demasiado vistoso pero bueno suficiente es un interfaz orientado a tabla muy tabular 1298 01:22:47,439 --> 01:22:56,079 entonces por ejemplo que puedo hacer desde este interfaz puedo crear una lista de reparto es 1299 01:22:56,079 --> 01:23:02,680 decir puede decir bueno pues voy a iniciar el reparto del día 8 sí y creo una nueva lista de 1300 01:23:02,680 --> 01:23:12,130 reparto. ¿Vale? 1301 01:23:13,250 --> 01:23:13,789 ¿Cómo que vale? 1302 01:23:16,779 --> 01:23:17,060 A ver. 1303 01:23:19,140 --> 01:23:20,380 Estaba tocando cosas. 1304 01:23:21,579 --> 01:23:22,380 ¿Qué pasa? 1305 01:23:22,539 --> 01:23:23,020 ¿Por qué no funciona? 1306 01:23:24,600 --> 01:23:25,939 Dame un segundito. 1307 01:23:27,859 --> 01:23:30,279 Voy a cerrar 1308 01:23:30,279 --> 01:23:32,220 todo esto que pueda tener por aquí. 1309 01:23:36,149 --> 01:23:39,579 Voy a cerrar 1310 01:23:39,579 --> 01:23:41,140 cualquier aplicación que tenga por aquí. 1311 01:23:41,199 --> 01:23:45,680 A ver si se ha quedado en algún... 1312 01:23:45,680 --> 01:23:50,800 y este tiene algo corriendo 1313 01:23:50,800 --> 01:23:57,909 vale 1314 01:23:57,909 --> 01:24:00,630 está haciendo algún cambio, espero que no 1315 01:24:00,630 --> 01:24:04,350 cargando 1316 01:24:04,350 --> 01:24:08,609 vale, como veis, ya le he dado el permiso 1317 01:24:08,609 --> 01:24:10,670 ya tiene ese toque, ya puede 1318 01:24:10,670 --> 01:24:14,989 ya puede acceder directamente 1319 01:24:14,989 --> 01:24:16,109 vamos a ver si no me deja 1320 01:24:16,109 --> 01:24:17,270 cargar la lista 1321 01:24:17,270 --> 01:24:26,260 bueno, no sé 1322 01:24:26,260 --> 01:24:28,260 os lo muestro en la siguiente 1323 01:24:28,260 --> 01:24:28,899 algo he tocado 1324 01:24:28,899 --> 01:24:31,800 aparte de 1325 01:24:31,800 --> 01:24:47,000 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? 1326 01:24:47,000 --> 01:24:53,300 entonces digo dirección calle pues un paseo castellano así no estás 1327 01:24:56,039 --> 01:25:04,779 vale puedo ver las coordenadas vale acordaros de esto esto no lo hacía el servicio de mapas 1328 01:25:04,779 --> 01:25:17,479 de bing podría obtener a partir de una castilla de una dirección una sobre un poquito más vale 1329 01:25:17,479 --> 01:25:22,979 Aquí puedo tener información del producto, ¿vale? 1330 01:25:22,979 --> 01:25:28,430 Que quiero llevar y creo un nuevo envío, ¿vale? 1331 01:25:28,489 --> 01:25:29,510 Y aquí lo tengo, ¿vale? 1332 01:25:29,630 --> 01:25:32,750 Entonces, tengo este nuevo envío con estos datos. 1333 01:25:33,430 --> 01:25:39,329 Si lo vemos en Tasks, vemos que efectivamente, 1334 01:25:40,250 --> 01:25:41,069 ¿dónde lo he añadido? 1335 01:25:41,130 --> 01:25:47,329 Lo he añadido en la lista de tareas del día 30, ¿vale? 1336 01:25:47,329 --> 01:25:49,930 Era este de aquí, Asia Castellana 245. 1337 01:25:50,069 --> 01:25:52,010 el día 30 1338 01:25:52,010 --> 01:25:53,590 ¿vale? y aquí lo tenemos 1339 01:25:53,590 --> 01:25:56,350 como veis, está conectado y ya 1340 01:25:56,350 --> 01:25:58,149 los datos que yo voy creando 1341 01:25:58,149 --> 01:26:00,210 alguna los va depositando 1342 01:26:00,210 --> 01:26:01,670 en 1343 01:26:01,670 --> 01:26:04,670 en Google Tasks 1344 01:26:04,670 --> 01:26:06,430 voy a borrar una, para que veáis 1345 01:26:06,430 --> 01:26:07,890 también en la operación de borrado 1346 01:26:07,890 --> 01:26:09,890 que también desaparece 1347 01:26:09,890 --> 01:26:11,430 si queréis vamos a borrar 1348 01:26:11,430 --> 01:26:14,029 pues en el mismo día 30 1349 01:26:14,029 --> 01:26:15,250 vamos a borrar la otra que teníamos 1350 01:26:15,250 --> 01:26:19,640 voy a borrar, confirmarlo 1351 01:26:19,640 --> 01:26:22,699 la borra en Google Tasks 1352 01:26:22,699 --> 01:26:24,239 y luego refresca 1353 01:26:24,239 --> 01:26:27,039 de nuevo el listado que me muestra 1354 01:26:27,039 --> 01:26:28,699 ahora ya sin esa 1355 01:26:28,699 --> 01:26:30,119 esa tarea, vale 1356 01:26:30,119 --> 01:26:32,560 aquí ya ha desaparecido, con lo cual 1357 01:26:32,560 --> 01:26:33,439 esa conexión 1358 01:26:33,439 --> 01:26:35,159 entre 1359 01:26:35,159 --> 01:26:38,520 ¿qué más cosas hace la aplicación? 1360 01:26:43,210 --> 01:26:44,310 podemos encontrar 1361 01:26:44,310 --> 01:26:46,229 los mapas, vale, entonces digo 1362 01:26:46,229 --> 01:26:48,189 pues paseo castellana 245 1363 01:26:48,189 --> 01:26:49,130 enséñame el mapa 1364 01:26:49,130 --> 01:26:51,289 y te muestra aquí el mapa 1365 01:26:51,289 --> 01:26:54,569 esto también lo hacemos con un API REST 1366 01:26:54,569 --> 01:26:56,050 en principio 1367 01:26:56,050 --> 01:26:58,050 este API por ejemplo es distinto 1368 01:26:58,050 --> 01:26:59,930 porque este API lo estamos utilizando 1369 01:26:59,930 --> 01:27:01,729 directamente desde el cliente 1370 01:27:01,729 --> 01:27:04,170 no lo utilizamos a través del servidor 1371 01:27:04,170 --> 01:27:05,609 por ejemplo el de las coordenadas 1372 01:27:05,609 --> 01:27:07,670 sí que lo utilizamos a través del servidor 1373 01:27:07,670 --> 01:27:09,409 yo le envío la petición al servidor 1374 01:27:09,409 --> 01:27:12,010 al script.hp, él se pone en contacto 1375 01:27:12,010 --> 01:27:14,189 con el API de Microsoft 1376 01:27:14,189 --> 01:27:15,789 recibe la información 1377 01:27:15,789 --> 01:27:18,329 y la pasa 1378 01:27:18,329 --> 01:27:20,970 al cliente, o sea que es el servidor 1379 01:27:20,970 --> 01:27:22,850 un poco el que tiene la comunicación con el API REST 1380 01:27:22,850 --> 01:27:24,670 eso sin embargo no, los mapas 1381 01:27:24,670 --> 01:27:26,529 directamente desde el cliente Javascript 1382 01:27:26,529 --> 01:27:28,829 se ejecuta un Javascript que permite cargar 1383 01:27:28,829 --> 01:27:30,850 este pequeño mapa 1384 01:27:30,850 --> 01:27:32,770 dentro de la página 1385 01:27:32,770 --> 01:27:34,289 que está cargada en ese momento 1386 01:27:34,289 --> 01:27:35,649 vale 1387 01:27:35,649 --> 01:27:39,949 volvemos 1388 01:27:39,949 --> 01:27:42,369 ya hemos hecho, ya hemos añadido cosas 1389 01:27:42,369 --> 01:27:44,510 ya hemos borrado, vamos a 1390 01:27:44,510 --> 01:27:46,550 hay una cosa interesante que es la de ordenar 1391 01:27:46,550 --> 01:27:48,130 vale, entonces 1392 01:27:48,130 --> 01:27:49,909 la de ordenar, lo que hace es 1393 01:27:49,909 --> 01:27:52,449 poner de alguna manera, hacer un recorrido 1394 01:27:52,449 --> 01:27:54,010 óptimo, que también 1395 01:27:54,010 --> 01:27:55,829 es una funcionalidad del API de Microsoft 1396 01:27:55,829 --> 01:27:58,109 poner un recorrido 1397 01:27:58,109 --> 01:27:59,970 óptimo para hacer 1398 01:27:59,970 --> 01:28:00,449 un poco 1399 01:28:00,449 --> 01:28:03,510 la entrega 1400 01:28:03,510 --> 01:28:07,890 la persona que conduce la furgoneta 1401 01:28:07,890 --> 01:28:09,149 pues que sepa que ruta 1402 01:28:09,149 --> 01:28:12,050 es la más adecuada dependiendo 1403 01:28:12,050 --> 01:28:12,970 de donde están situados 1404 01:28:12,970 --> 01:28:15,270 los destinos de los envíos 1405 01:28:15,270 --> 01:28:17,949 entonces, vamos a hacer 1406 01:28:17,949 --> 01:28:19,909 una cosa, vamos a entrar aquí, vamos a 1407 01:28:19,909 --> 01:28:20,670 cambiarlo, a ver si 1408 01:28:20,670 --> 01:28:23,170 aquí el día 29 1409 01:28:23,170 --> 01:28:25,569 vale 1410 01:28:25,569 --> 01:28:28,029 no sé si puedo, podría 1411 01:28:28,029 --> 01:28:29,810 cambiar esto, moverlo 1412 01:28:29,810 --> 01:28:31,930 vale, voy a moverlo un poquito, vale, para 1413 01:28:31,930 --> 01:28:33,029 cambiarlo de orden 1414 01:28:33,029 --> 01:28:35,909 vale, lo he cambiado 1415 01:28:35,909 --> 01:28:38,029 de orden, con lo cual si yo refresco 1416 01:28:38,029 --> 01:28:41,659 la aplicación 1417 01:28:41,659 --> 01:28:43,359 pues que tenemos el 1418 01:28:43,359 --> 01:28:45,380 Nintendo Epson al final 1419 01:28:45,380 --> 01:28:49,220 y Nintendo al principio 1420 01:28:49,220 --> 01:28:52,720 vale, donde estaba 1421 01:28:52,720 --> 01:28:57,420 vale, estos han cambiado 1422 01:28:57,420 --> 01:28:58,239 de alguna manera 1423 01:28:58,239 --> 01:29:00,439 y Epson voy a ponerlo al primero 1424 01:29:00,439 --> 01:29:03,520 para que se vea más claro el cambio 1425 01:29:03,520 --> 01:29:08,010 vale 1426 01:29:08,010 --> 01:29:10,050 voy a volver otra vez a cargar 1427 01:29:10,050 --> 01:29:11,949 el navegador 1428 01:29:11,949 --> 01:29:14,210 voy a refrescar esto, vale, para que me dé 1429 01:29:14,210 --> 01:29:16,170 ahora Epson lo va a poner al primero 1430 01:29:16,170 --> 01:29:20,829 vale, lo ha cambiado 1431 01:29:20,829 --> 01:29:22,930 y ha sido fiel, digamos, al orden 1432 01:29:22,930 --> 01:29:26,210 en el que estaba en las tareas de Google Tasks 1433 01:29:26,210 --> 01:29:27,909 si yo le pido que lo ordene 1434 01:29:27,909 --> 01:29:32,430 ahora de alguna manera va a buscar la ruta óptima 1435 01:29:32,430 --> 01:29:35,430 vale, me dice que está ordenada 1436 01:29:35,430 --> 01:29:37,069 y como veis ha cambiado el orden 1437 01:29:37,069 --> 01:29:41,510 en el que sitúa los productos 1438 01:29:41,510 --> 01:29:43,710 en la tabla, ¿por qué? 1439 01:29:43,710 --> 01:29:45,390 pues porque en el mapa de la ruta 1440 01:29:45,390 --> 01:29:52,170 ha ido colocando los distintos productos 1441 01:29:52,170 --> 01:29:54,470 en el orden que piensa que es más óptimo 1442 01:29:54,470 --> 01:29:56,229 para hacer un poco la ruta final 1443 01:29:56,229 --> 01:30:00,369 este es el punto de partida, que es un punto configurable 1444 01:30:00,369 --> 01:30:18,369 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... 1445 01:30:18,369 --> 01:30:22,170 Todo esto, como digo, lo hace Microsoft, ¿vale? 1446 01:30:22,250 --> 01:30:24,970 Él sabe un poco cuál es la ruta óptima en coche para hacer eso. 1447 01:30:25,250 --> 01:30:27,960 Y aquí te los ordena. 1448 01:30:28,100 --> 01:30:34,079 También te ordena estos elementos para que los vayas viendo en el orden que se van a entregar. 1449 01:30:35,560 --> 01:30:49,500 Vale, vamos a borrar una, a ver si esto funciona, una lista de repartos del día 30. 1450 01:30:49,500 --> 01:30:52,539 esto sí funciona, no sé por qué 1451 01:30:52,539 --> 01:30:54,279 tengo que mirar lo de la lista de reparto 1452 01:30:54,279 --> 01:30:55,779 a ver por qué falla 1453 01:30:55,779 --> 01:31:01,340 vale, pues esta es la aplicación 1454 01:31:01,340 --> 01:31:02,199 un poco para que 1455 01:31:02,199 --> 01:31:04,619 veáis un poco 1456 01:31:04,619 --> 01:31:07,479 la magnitud y todo 1457 01:31:07,479 --> 01:31:08,380 lo que conlleva 1458 01:31:08,380 --> 01:31:11,560 hay que gestionar esos APIs REST, hay que gestionar 1459 01:31:11,560 --> 01:31:13,640 los APIs también de coordenada 1460 01:31:13,640 --> 01:31:14,920 la base de datos de productos 1461 01:31:14,920 --> 01:31:17,500 aunque no vayamos a tocar nada en productos 1462 01:31:17,500 --> 01:31:19,460 o sea no vamos a insertar nada ni a modificar 1463 01:31:19,460 --> 01:31:21,479 nada, pero sí que vamos a extraer información 1464 01:31:21,479 --> 01:31:23,520 porque cuando queremos 1465 01:31:23,520 --> 01:31:25,539 añadir un reparto 1466 01:31:25,539 --> 01:31:25,899 nuevo 1467 01:31:25,899 --> 01:31:29,439 obviamente hay que rellenar este 1468 01:31:29,439 --> 01:31:31,199 este menú 1469 01:31:31,199 --> 01:31:33,600 contextual y todos estos nombres 1470 01:31:33,600 --> 01:31:35,659 salen de los nombres de la base de datos 1471 01:31:35,659 --> 01:31:37,460 vale 1472 01:31:37,460 --> 01:31:38,079 entonces 1473 01:31:38,079 --> 01:31:41,619 os voy a 1474 01:31:41,619 --> 01:31:43,140 os voy a 1475 01:31:43,140 --> 01:31:45,600 iniciar, no me va a dar mucho más tiempo 1476 01:31:45,600 --> 01:31:47,079 para entrar en el código, quizás 1477 01:31:47,079 --> 01:31:49,239 la semana que viene lo vemos más en el código 1478 01:31:49,239 --> 01:31:51,239 hoy voy a trabajar un poquito más 1479 01:31:51,239 --> 01:31:53,199 como os decía, en la parte más de diseño 1480 01:31:53,199 --> 01:31:55,399 ¿vale? y el próximo día 1481 01:31:55,399 --> 01:31:57,159 entramos un poquito más 1482 01:31:57,159 --> 01:31:59,039 en el código real 1483 01:31:59,039 --> 01:32:00,300 entonces 1484 01:32:00,300 --> 01:32:02,060 de todas maneras 1485 01:32:02,060 --> 01:32:05,420 quizás pueda adelantar 1486 01:32:05,420 --> 01:32:07,039 esta presentación para que la tengáis 1487 01:32:07,039 --> 01:32:08,340 vosotros ya 1488 01:32:08,340 --> 01:32:11,039 disponible 1489 01:32:11,039 --> 01:32:13,119 ¿vale? para si queréis empezar a codificar 1490 01:32:13,119 --> 01:32:15,159 o a entender código os va a facilitar 1491 01:32:15,159 --> 01:32:15,800 el trabajo 1492 01:32:15,800 --> 01:32:19,220 entonces vamos a ver un poco el diseño de la misma manera 1493 01:32:19,220 --> 01:32:21,300 que os he ido presentando 1494 01:32:21,300 --> 01:32:22,680 los diseños de otras aplicaciones 1495 01:32:22,680 --> 01:32:24,319 que es primero 1496 01:32:24,319 --> 01:32:26,680 teniendo claro cuáles van a ser las 1497 01:32:26,680 --> 01:32:29,359 ventanas con las que voy a interaccionar 1498 01:32:29,359 --> 01:32:31,220 y aquí esta es 1499 01:32:31,220 --> 01:32:32,739 posiblemente la ventana más importante 1500 01:32:32,739 --> 01:32:35,619 donde hay más botones, donde hay más cosas que tengo que interaccionar 1501 01:32:35,619 --> 01:32:37,460 tanto para crear una lista de reparto 1502 01:32:37,460 --> 01:32:39,260 como para crear nuevos repartos 1503 01:32:39,260 --> 01:32:40,659 borrarlos 1504 01:32:40,659 --> 01:32:42,819 pedir información de 1505 01:32:42,819 --> 01:32:44,859 mapa de cada uno de ellos 1506 01:32:44,859 --> 01:32:45,979 donde están situados 1507 01:32:45,979 --> 01:32:47,680 un mapa de la ruta 1508 01:32:47,680 --> 01:32:50,640 de todo el reparto 1509 01:32:50,640 --> 01:32:52,560 de todos los envíos de ese día 1510 01:32:52,560 --> 01:32:54,600 bueno pues 1511 01:32:54,600 --> 01:32:57,140 esta ventana tiene bastante funcionalidad 1512 01:32:57,140 --> 01:32:58,699 luego tengo este formulario 1513 01:32:58,699 --> 01:33:01,060 que es el formulario para crear un reparto 1514 01:33:01,060 --> 01:33:02,039 con una dirección 1515 01:33:02,039 --> 01:33:03,880 la que tengo que 1516 01:33:03,880 --> 01:33:07,039 completarla con las coordenadas 1517 01:33:07,039 --> 01:33:08,699 de la dirección, el usuario 1518 01:33:08,699 --> 01:33:11,279 el tío de la docencia solo metería la dirección 1519 01:33:11,279 --> 01:33:13,300 y en principio el producto 1520 01:33:13,300 --> 01:33:14,420 ¿vale? no metemos 1521 01:33:14,420 --> 01:33:17,100 de más información, esto es un poquito 1522 01:33:17,100 --> 01:33:19,199 de juguete, pero bueno, por lo menos el producto 1523 01:33:19,199 --> 01:33:20,359 que tenemos que repartir. 1524 01:33:21,300 --> 01:33:23,100 Y las coordenadas, tenemos 1525 01:33:23,100 --> 01:33:24,800 la altitud, longitud y altitud, 1526 01:33:24,939 --> 01:33:26,920 que esta finalmente no se usa, obviamente, para 1527 01:33:26,920 --> 01:33:28,960 saber dónde está el tema, pero bueno, 1528 01:33:29,640 --> 01:33:31,239 la utilizamos también como ejercicio 1529 01:33:31,239 --> 01:33:32,659 de recuperación de 1530 01:33:32,659 --> 01:33:35,199 información geográfica. 1531 01:33:35,939 --> 01:33:37,199 ¿Vale? Tenemos los mapas 1532 01:33:37,199 --> 01:33:39,000 que solamente tienen este botón de volver. 1533 01:33:39,260 --> 01:33:40,739 Tanto el mapa de situación 1534 01:33:40,739 --> 01:33:43,079 de un reparto como el 1535 01:33:43,079 --> 01:33:45,079 de la ruta completa. Bueno, solo tiene 1536 01:33:45,079 --> 01:33:45,520 este botón. 1537 01:33:45,520 --> 01:34:03,239 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. 1538 01:34:03,239 --> 01:34:20,960 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. 1539 01:34:20,960 --> 01:34:22,739 cada uno va a necesitar 1540 01:34:22,739 --> 01:34:24,140 una parte de implementación 1541 01:34:24,140 --> 01:34:26,899 entonces este es el cliente 1542 01:34:26,899 --> 01:34:28,880 y este es el servidor 1543 01:34:28,880 --> 01:34:31,380 aquí es donde vamos a tener nuestros scripts PHP 1544 01:34:31,380 --> 01:34:32,899 y aquí es donde se va a ejecutar 1545 01:34:32,899 --> 01:34:35,380 o ejecutar nuestros scripts Javascript 1546 01:34:35,380 --> 01:34:39,060 y vamos a tener por un lado 1547 01:34:39,060 --> 01:34:40,640 una comunicación estándar, por ejemplo 1548 01:34:40,640 --> 01:34:42,960 si enviamos un formulario 1549 01:34:42,960 --> 01:34:44,739 pues vamos a solicitar 1550 01:34:44,739 --> 01:34:47,460 que se haga cierta funcionalidad 1551 01:34:47,460 --> 01:34:49,220 dentro del servidor 1552 01:34:49,220 --> 01:34:50,939 que se ejecute en script y posiblemente 1553 01:34:50,939 --> 01:34:53,239 que se lance una VistaBlade, ¿vale? 1554 01:34:53,359 --> 01:34:56,500 Este es uno de los flujos que ya hemos visto. 1555 01:34:56,939 --> 01:35:00,079 Yo le pido una petición, hay un script de control, 1556 01:35:00,500 --> 01:35:05,819 recibe esa petición, la procesa y lanza una VistaBlade 1557 01:35:05,819 --> 01:35:08,079 que he tenido, obviamente, que he programado previamente. 1558 01:35:09,119 --> 01:35:13,300 Esa VistaBlade retorna y se carga en el navegador, ¿vale? 1559 01:35:13,500 --> 01:35:14,739 Uno de los flujos. 1560 01:35:15,460 --> 01:35:17,560 Otro de los flujos que va a haber dentro de esta aplicación 1561 01:35:17,560 --> 01:35:18,500 es IaaS, ¿vale? 1562 01:35:18,500 --> 01:35:33,180 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. 1563 01:35:33,180 --> 01:35:43,560 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. 1564 01:35:43,779 --> 01:35:52,399 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. 1565 01:35:52,640 --> 01:35:54,760 Y yo directamente, pim, pim, pim, las coloco aquí. 1566 01:35:56,760 --> 01:35:56,939 ¿Vale? 1567 01:35:57,979 --> 01:36:01,399 Puede ser un uso sin falta de tener que volver a recargar el formulario completo. 1568 01:36:01,399 --> 01:36:03,539 puede ser un uso interesante de IAX 1569 01:36:03,539 --> 01:36:05,340 así que va a haber ciertas comunicaciones 1570 01:36:05,340 --> 01:36:07,039 entonces tengo que empezar a pensar un poco 1571 01:36:07,039 --> 01:36:09,600 qué comunicaciones quiero hacer mediante el flujo 1572 01:36:09,600 --> 01:36:11,560 estándar y qué comunicaciones 1573 01:36:11,560 --> 01:36:13,560 pues puede ser interesante que haga mediante 1574 01:36:13,560 --> 01:36:13,960 IAX 1575 01:36:13,960 --> 01:36:17,159 dentro del servidor yo obviamente 1576 01:36:17,159 --> 01:36:18,960 voy a tener que por un lado 1577 01:36:18,960 --> 01:36:21,340 establecer comunicación con la base de datos 1578 01:36:21,340 --> 01:36:22,659 de proyecto utilizando PDO 1579 01:36:22,659 --> 01:36:24,979 o sea que voy a tener un DAO 1580 01:36:24,979 --> 01:36:27,119 para productos 1581 01:36:27,119 --> 01:36:28,800 un producto DAO 1582 01:36:28,800 --> 01:36:45,619 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. 1583 01:36:45,619 --> 01:36:54,199 voy a tener esta parte de pd voy a también interacción interaccionar con con mapas vale 1584 01:36:54,199 --> 01:37:01,279 esto para que esto es para la parte de obtener las coordenadas esto es la parte de obtener las 1585 01:37:01,279 --> 01:37:07,640 coordenadas no los voy a obtener yo con mi código voy a interaccionar con bing map rest services 1586 01:37:07,640 --> 01:37:12,880 vale tengo que tener mi cuenta que voy a tener registrada mi clave etcétera etcétera para hacer 1587 01:37:12,880 --> 01:37:14,500 lo que hicimos en la primera tutorial 1588 01:37:14,500 --> 01:37:16,880 ¿verdad? en la primera tutorial hicimos ya 1589 01:37:16,880 --> 01:37:18,579 esto de dar una dirección 1590 01:37:18,579 --> 01:37:20,779 y él directamente me da la información 1591 01:37:20,779 --> 01:37:22,119 de coordenadas 1592 01:37:22,119 --> 01:37:24,500 pero también voy a interaccionar 1593 01:37:24,500 --> 01:37:25,960 con Google Tasks 1594 01:37:25,960 --> 01:37:28,840 ¿vale? y este es otro 1595 01:37:28,840 --> 01:37:30,720 API de otro proveedor, en este caso 1596 01:37:30,720 --> 01:37:32,439 Google, obviamente 1597 01:37:32,439 --> 01:37:34,920 previo, este es un servicio que requiere 1598 01:37:34,920 --> 01:37:36,659 este tipo de autorización previa con 1599 01:37:36,659 --> 01:37:37,880 auth 2.0 1600 01:37:37,880 --> 01:37:40,659 ¿vale? o sea que voy a interaccionar 1601 01:37:40,659 --> 01:37:42,560 con Google, primero 1602 01:37:42,560 --> 01:37:49,100 en con su servidor de off que es justo el código que os enseñe hace un momentito pero también 1603 01:37:49,100 --> 01:37:56,420 utilizando el toque de acceso voy a utilizar el api de taxis todo esto en comunicación con 1604 01:37:56,420 --> 01:38:02,659 google vale y desde el cliente aparte de aquí de ejecutar javascript que voy a tener que programar 1605 01:38:02,659 --> 01:38:08,079 también cierto javascript para ciertas funcionalidades ya veréis el programa y 1606 01:38:08,079 --> 01:38:10,380 y veréis un poco lo fácil y lo 1607 01:38:10,380 --> 01:38:12,260 flexible y lo interesante 1608 01:38:12,260 --> 01:38:13,060 que puede ser jQuery 1609 01:38:13,060 --> 01:38:16,199 si es que no utilizáis un framework de cliente 1610 01:38:16,199 --> 01:38:18,220 y desde aquí también voy 1611 01:38:18,220 --> 01:38:20,140 a interaccionar, desde el cliente voy a 1612 01:38:20,140 --> 01:38:21,500 interaccionar con Microsoft 1613 01:38:21,500 --> 01:38:24,220 Maps, ¿vale? ¿Para qué? Pues para 1614 01:38:24,220 --> 01:38:25,800 construir estos mapas de aquí 1615 01:38:25,800 --> 01:38:27,819 estos mapas de aquí 1616 01:38:27,819 --> 01:38:29,479 directamente 1617 01:38:29,479 --> 01:38:31,140 desde la aplicación 1618 01:38:31,140 --> 01:38:32,779 JavaScript 1619 01:38:32,779 --> 01:38:36,319 ¿vale? Y esto ya os empieza 1620 01:38:36,319 --> 01:38:37,939 a dar una idea de cómo se 1621 01:38:38,079 --> 01:38:40,739 programan sin frameworks 1622 01:38:40,739 --> 01:38:42,500 que obviamente 1623 01:38:42,500 --> 01:38:43,300 no es la manera 1624 01:38:43,300 --> 01:38:46,340 siempre se va a programar con frameworks, pero podéis intuir 1625 01:38:46,340 --> 01:38:48,720 cómo 1626 01:38:48,720 --> 01:38:50,439 se pone de alguna manera 1627 01:38:50,439 --> 01:38:52,500 todo el conjunto de lo que es una aplicación web 1628 01:38:52,500 --> 01:38:53,779 aquí ya veis 1629 01:38:53,779 --> 01:38:55,920 desde el cliente, javascript 1630 01:38:55,920 --> 01:38:58,800 vocación a APIs desde el mismo cliente 1631 01:38:58,800 --> 01:39:00,779 código que se ejecuta en el servidor 1632 01:39:00,779 --> 01:39:02,420 una base de datos de la que se 1633 01:39:02,420 --> 01:39:04,619 recuperan informaciones, consultas 1634 01:39:04,619 --> 01:39:06,000 a servicios externos 1635 01:39:06,000 --> 01:39:07,880 utilización de AJAX 1636 01:39:07,880 --> 01:39:10,039 en ciertas de las peticiones 1637 01:39:10,039 --> 01:39:12,500 en las que no conviene recargar toda la página 1638 01:39:12,500 --> 01:39:14,960 bueno, ahora 1639 01:39:14,960 --> 01:39:17,359 esto un poco también para que veáis un poco 1640 01:39:17,359 --> 01:39:19,279 la imagen completa 1641 01:39:19,279 --> 01:39:20,979 de lo que puede ser una aplicación 1642 01:39:20,979 --> 01:39:22,939 semi-real 1643 01:39:22,939 --> 01:39:24,479 como digo, todavía no 1644 01:39:24,479 --> 01:39:27,319 yo creo que no se lo puede considerar real del todo 1645 01:39:27,319 --> 01:39:29,239 pero sí que ya podéis un poco vislumbrar 1646 01:39:29,239 --> 01:39:30,800 que aquí pues tendremos 1647 01:39:30,800 --> 01:39:32,260 un framework PHP 1648 01:39:32,260 --> 01:39:34,220 como Laravel o como Zend 1649 01:39:34,220 --> 01:40:04,039 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. 1650 01:40:05,659 --> 01:40:20,619 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. 1651 01:40:20,619 --> 01:40:38,239 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. 1652 01:40:38,239 --> 01:40:40,699 que conviene también tener claro un poco 1653 01:40:40,699 --> 01:40:42,399 por eso esta documentación 1654 01:40:42,399 --> 01:40:44,439 siempre que podáis 1655 01:40:44,439 --> 01:40:47,039 establecer un poquito estos diagramas básicos 1656 01:40:47,039 --> 01:40:49,279 con qué vais a estar trabajando 1657 01:40:49,279 --> 01:40:51,199 y qué tipo de información 1658 01:40:51,199 --> 01:40:53,100 vais a representar como objetos 1659 01:40:53,100 --> 01:40:55,159 conviene un poco que la 1660 01:40:55,159 --> 01:40:56,880 que la tengáis 1661 01:40:56,880 --> 01:40:57,840 más o menos clara 1662 01:40:57,840 --> 01:41:00,819 y en cuanto a los scripts de control 1663 01:41:00,819 --> 01:41:03,340 vamos a trabajar con un único script de control 1664 01:41:03,340 --> 01:41:05,000 esto quizá os llame la atención 1665 01:41:05,000 --> 01:41:06,600 podríamos haberlo separado en varios 1666 01:41:06,600 --> 01:41:09,699 porque sí que hay varios tipos de funcionalidad 1667 01:41:09,699 --> 01:41:11,479 pero ya veréis como con un único 1668 01:41:11,479 --> 01:41:12,659 script de control, un index 1669 01:41:12,659 --> 01:41:15,100 bueno, largo pero bien estructurado 1670 01:41:15,100 --> 01:41:17,720 tampoco va a ser muy complicado 1671 01:41:17,720 --> 01:41:18,979 de seguir porque 1672 01:41:18,979 --> 01:41:21,619 cada proceso de cada operación nos va a llevar 1673 01:41:21,619 --> 01:41:23,600 muy poco código, ¿por qué? porque siempre va a 1674 01:41:23,600 --> 01:41:25,640 delegar, desde el script de control rápidamente 1675 01:41:25,640 --> 01:41:27,560 se delega la funcionalidad en objetos 1676 01:41:27,560 --> 01:41:28,220 que se han creado 1677 01:41:28,220 --> 01:41:31,439 no se pone el script de control a hacer 1678 01:41:31,439 --> 01:41:33,539 cosas demasiado complejas, a desarrollar 1679 01:41:33,539 --> 01:41:35,699 lógicas complejas, no, crea un objeto 1680 01:41:35,699 --> 01:41:37,659 y le pasa la funcionalidad. 1681 01:41:38,000 --> 01:41:39,199 Le devuelve el resultado del objeto 1682 01:41:39,199 --> 01:41:42,600 y con eso continúa con el proceso de la solicitud. 1683 01:41:43,640 --> 01:41:46,619 Y ya veréis cómo, a lo mejor son 6, 7 líneas 1684 01:41:46,619 --> 01:41:49,060 de código en cada una de las peticiones 1685 01:41:49,060 --> 01:41:50,180 que le pueden llegar a index. 1686 01:41:50,380 --> 01:41:51,760 Pero vamos a tener un único index. 1687 01:41:52,560 --> 01:41:54,260 Y por lo demás, vamos a tener 1688 01:41:54,260 --> 01:41:56,300 varios ficheritos Javascript 1689 01:41:56,300 --> 01:41:59,859 que me van a hacer ciertas de las operativas 1690 01:41:59,859 --> 01:42:01,500 y de las funcionalidades requeridas. 1691 01:42:02,300 --> 01:42:03,539 Y por otro lado, vamos a tener 1692 01:42:03,539 --> 01:42:04,800 conexión a la base de datos, 1693 01:42:04,800 --> 01:42:05,880 vamos a hacer unos DAOs 1694 01:42:05,880 --> 01:42:07,020 por DAOs 1695 01:42:07,020 --> 01:42:08,840 parte del producto DAO 1696 01:42:08,840 --> 01:42:09,560 el producto DAO 1697 01:42:09,560 --> 01:42:11,159 ataca a la base de datos 1698 01:42:11,159 --> 01:42:11,539 MySQL 1699 01:42:11,539 --> 01:42:12,939 pero estos dos DAOs 1700 01:42:12,939 --> 01:42:14,779 atacan 1701 01:42:14,779 --> 01:42:16,439 al servicio REST 1702 01:42:16,439 --> 01:42:17,500 de Google Tasks 1703 01:42:17,500 --> 01:42:19,159 bueno, así que cuando 1704 01:42:19,159 --> 01:42:20,579 queramos 1705 01:42:20,579 --> 01:42:22,640 dar persistencia 1706 01:42:22,640 --> 01:42:23,520 a una tarea 1707 01:42:23,520 --> 01:42:24,260 obviamente 1708 01:42:24,260 --> 01:42:25,979 le vamos a pasar 1709 01:42:25,979 --> 01:42:26,539 esa tarea 1710 01:42:26,539 --> 01:42:27,859 a este 1711 01:42:27,859 --> 01:42:28,439 perdón 1712 01:42:28,439 --> 01:42:29,159 un reparto 1713 01:42:29,159 --> 01:42:30,239 le vamos a dar ese reparto 1714 01:42:30,239 --> 01:42:31,380 a este DAO 1715 01:42:31,380 --> 01:42:32,739 para que lo cree 1716 01:42:32,739 --> 01:42:33,840 pero no 1717 01:42:33,840 --> 01:42:36,239 ese código de crear 1718 01:42:36,239 --> 01:42:38,500 no va a tener PDO, sino que va a tener 1719 01:42:38,500 --> 01:42:40,340 llamadas a la API REST 1720 01:42:40,340 --> 01:42:42,399 de Google Tasks para que 1721 01:42:42,399 --> 01:42:43,779 se almacene 1722 01:42:43,779 --> 01:42:46,399 ese reparto en formato 1723 01:42:46,399 --> 01:42:48,380 tarea dentro del 1724 01:42:48,380 --> 01:42:49,500 servicio de Google Tasks. 1725 01:42:52,010 --> 01:42:53,510 Y luego una serie de vistas 1726 01:42:53,510 --> 01:42:55,170 que también vamos a tener. 1727 01:42:55,170 --> 01:42:56,810 Vamos a utilizar también 1728 01:42:56,810 --> 01:42:58,989 el formato estándar en el que 1729 01:42:58,989 --> 01:43:00,409 le escribe control. 1730 01:43:01,529 --> 01:43:03,210 También tira de vistas 1731 01:43:03,210 --> 01:43:05,409 Blade que se han escrito previamente. 1732 01:43:05,470 --> 01:43:12,829 para que le pasa parámetros para que finalmente se visualicen en en el navegador vale pues yo creo 1733 01:43:12,829 --> 01:43:18,729 que hasta aquí hasta aquí un poco os adelanto un poquito toda la operativa y la semana que viene 1734 01:43:18,729 --> 01:43:26,529 entramos ya en el código concreto por cada una de las peticiones vamos a ver qué parte se hace con 1735 01:43:26,529 --> 01:43:34,149 ayax qué parte requiere una persistencia con los dados qué parte y vamos a ir revisando el código 1736 01:43:34,149 --> 01:43:36,229 de cada una 1737 01:43:36,229 --> 01:43:38,489 de las partes de la aplicación 1738 01:43:38,489 --> 01:43:40,229 para ver cómo realmente la operación 1739 01:43:40,229 --> 01:43:44,619 se lleva a cabo. Vale, pues 1740 01:43:44,619 --> 01:43:46,720 venga, ¿preguntas finales? 1741 01:43:48,930 --> 01:43:50,050 No, muchas gracias 1742 01:43:50,050 --> 01:43:51,909 por la clase. No, pues 1743 01:43:51,909 --> 01:43:53,869 venga, pues a vosotros. Yo solo 1744 01:43:53,869 --> 01:43:55,949 quería preguntar lo del doten. 1745 01:43:56,090 --> 01:43:57,909 Eso es para lo de las variables 1746 01:43:57,909 --> 01:43:59,409 de entorno, ¿no? Sí, justo. 1747 01:44:00,069 --> 01:44:01,569 El doten es un ficherito 1748 01:44:01,569 --> 01:44:03,550 que tienes... 1749 01:44:03,550 --> 01:44:05,130 Te viene un ejemplo, ¿vale? 1750 01:44:05,590 --> 01:44:07,930 Entonces, aquí tienes que 1751 01:44:07,989 --> 01:44:11,810 En vez de poner doten.ejemplo, le borras .ejemplo 1752 01:44:11,810 --> 01:44:14,369 y aquí le metes todos los datos tuyos concretos. 1753 01:44:15,010 --> 01:44:19,789 Vale, entonces, map api key es la clave que te haya dado Big Maps 1754 01:44:19,789 --> 01:44:20,770 cuando te ha registrado. 1755 01:44:21,750 --> 01:44:26,430 Lat base es la latitud en la que está tu almacén. 1756 01:44:26,430 --> 01:44:28,770 Busca una ubicación en Madrid, ¿vale? 1757 01:44:29,109 --> 01:44:35,329 Y con Google Maps consulta cuál es el dato de latitud. 1758 01:44:35,770 --> 01:44:36,609 Vale, será un numerito. 1759 01:44:37,149 --> 01:44:37,470 Vale. 1760 01:44:37,989 --> 01:44:58,890 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. 1761 01:44:58,890 --> 01:45:30,319 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. 1762 01:45:34,680 --> 01:45:52,630 Tienes toda la parte de base de datos 1763 01:45:52,630 --> 01:45:53,069 Listo 1764 01:45:53,069 --> 01:45:56,789 Sería algo de este tipo 1765 01:45:56,789 --> 01:45:58,529 Aquí está utilizando por ejemplo 1766 01:45:58,529 --> 01:46:00,189 Root sin password 1767 01:46:00,189 --> 01:46:01,569 Pero sería algo de este tipo 1768 01:46:01,569 --> 01:46:05,739 Sería algo de este tipo 1769 01:46:05,739 --> 01:46:07,960 Vale 1770 01:46:07,960 --> 01:46:09,899 El DB host 127.0.1 1771 01:46:09,899 --> 01:46:11,960 la puerta 3306, el nombre de la base 1772 01:46:11,960 --> 01:46:13,720 de datos. Recuerda que accedemos 1773 01:46:13,720 --> 01:46:15,239 a la base de datos proyecto. 1774 01:46:16,239 --> 01:46:17,920 Route sin password. Esto no te va a dar 1775 01:46:17,920 --> 01:46:20,039 problemas de permisos. Luego tienes 1776 01:46:20,039 --> 01:46:21,979 Map API Key, que es lo que 1777 01:46:21,979 --> 01:46:22,800 efectivamente 1778 01:46:22,800 --> 01:46:24,579 te dé 1779 01:46:24,579 --> 01:46:27,739 la web de Microsoft. 1780 01:46:28,699 --> 01:46:29,819 Tienes la latitud, 1781 01:46:30,060 --> 01:46:32,119 la longitud, el país, la ciudad, la localidad 1782 01:46:32,119 --> 01:46:34,420 donde está tu almacén. 1783 01:46:35,220 --> 01:46:36,140 Para que luego, cuando 1784 01:46:36,140 --> 01:46:38,020 quiera elaborar la ruta, sepa de dónde tiene 1785 01:46:38,020 --> 01:46:39,460 que salir el camión. 1786 01:46:39,899 --> 01:47:09,920 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. 1787 01:47:09,920 --> 01:47:11,520 vale 1788 01:47:11,520 --> 01:47:13,779 y ese sería el nombre del fichero 1789 01:47:13,779 --> 01:47:16,359 en el que te has descargado 1790 01:47:16,359 --> 01:47:17,439 los credenciales 1791 01:47:17,439 --> 01:47:19,319 vale 1792 01:47:19,319 --> 01:47:22,420 con estos datos de configuración ya debería 1793 01:47:22,420 --> 01:47:23,720 de funcionar 1794 01:47:23,720 --> 01:47:26,140 la aplicación, vale, si los tienes correctos 1795 01:47:26,140 --> 01:47:27,920 vale 1796 01:47:27,920 --> 01:47:29,420 muchas gracias Iván 1797 01:47:29,420 --> 01:47:31,039 vale, venga Luis 1798 01:47:31,039 --> 01:47:33,199 ya la otra semana es la última tutoría, verdad 1799 01:47:33,199 --> 01:47:35,720 no, va a haber alguna más 1800 01:47:35,720 --> 01:47:36,760 va a haber alguna más 1801 01:47:36,760 --> 01:47:55,500 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. 1802 01:47:56,779 --> 01:47:57,300 Vale. 1803 01:47:57,300 --> 01:47:59,279 vale, o sea que 1804 01:47:59,279 --> 01:48:02,020 veré, si yo traigo material 1805 01:48:02,020 --> 01:48:03,920 y merece la pena lo grabaré, si no pues 1806 01:48:03,920 --> 01:48:05,680 básicamente me conectaré 1807 01:48:05,680 --> 01:48:07,880 y si la gente tiene dudas pues que se conecte 1808 01:48:07,880 --> 01:48:09,840 y os puedo echar una mano 1809 01:48:09,840 --> 01:48:11,699 en el proceso este de preparación 1810 01:48:11,699 --> 01:48:14,420 vale, muchas gracias 1811 01:48:14,420 --> 01:48:15,760 venga Luis, ánimo 1812 01:48:15,760 --> 01:48:16,880 hasta luego