{"id":5741,"date":"2025-05-21T19:33:44","date_gmt":"2025-05-21T19:33:44","guid":{"rendered":"https:\/\/disenodepagina.com\/disenoweb\/gestion-del-blog-mediante-base-de-datos\/"},"modified":"2025-05-21T19:33:44","modified_gmt":"2025-05-21T19:33:44","slug":"gestion-del-blog-mediante-base-de-datos","status":"publish","type":"post","link":"https:\/\/disenodepagina.com\/disenoweb\/gestion-del-blog-mediante-base-de-datos\/","title":{"rendered":"Gesti\u00f3n del blog mediante base de datos"},"content":{"rendered":"<p> \n<\/p>\n<div wp_automatic_readability=\"211.81049357945\">\n<h4><?php echo $category ???><\/h4>\n<div class=\"post-content col-md-10 col-lg-10 col-xl-10\" wp_automatic_readability=\"31\">\n<p>                    <?php echo $content ???><\/p>\n<div class=\"post-image\" wp_automatic_readability=\"32\">\n<p>                        <img decoding=\"async\" src=\"&lt;?php\" echo=\"\"\/><br \/>\n                             alt=\u00bbImagen principal del art\u00edculo\u00bb&gt;<\/p><\/div>\n<\/p><\/div>\n<p>Y con el pie de p\u00e1gina tengo la p\u00e1gina de art\u00edculo del blog completa:<\/p>\n<pre class=\"wp-block-preformatted\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span id=\"Urls_amigables_modificando_htaccess\">Urls amigables modificando .htaccess<\/span><\/h2>\n\n\n\n<p>Una url del tipo post.php?post_id= no es lo m\u00e1s adecuado para el SEO, aunque peor ser\u00eda si en vez la url que inclumos en la base de datos despu\u00e9s del id pusi\u00e9ramos un n\u00famero.  Para el SEO es mejor que las palabras clave est\u00e9n m\u00e1s cerca del nombre de dominio. Lo que buscamos es una url como \u00e9sta:<\/p>\n\n\n\n<p><a href=\"https:\/\/aprendizajeprofundo.es\/aproximacion-verdadera-inteligencia-artificial\" target=\"_blank\" rel=\"noopener\">https:\/\/aprendizajeprofundo.es\/aproximacion-verdadera-inteligencia-artificial<\/a><\/p>\n\n\n\n<p>La buena noticia es que contamos con el fichero .htaccess que permite configurar en un servidor Apache directivas de configuraci\u00f3n. En nuestro caso conseguimos escribiendo en dicho fichero:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" wp_automatic_readability=\"5\">Options +FollowSymLinks<br\/>RewriteEngine on<p>RewriteRule ^([0-9a-zA-Z-]+)$ post.php?post_id=$1<br\/>RewriteRule ^([0-9a-zA-Z-]+).php $1.php<\/p><\/pre>\n<p>Es importante el orden de las dos regla RewriteRule, ya que la segunda sobreescribe la primera. Si el orden estuviera cambiado no podr\u00edamos ejecutar ficheros .php como contacto.php.<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"Pagina_de_articulos\">P\u00e1gina de art\u00edculos<\/span><\/h2>\n<p>Vamos a crear una p\u00e1gina que lea la base de datos de posts y los presente con la foto, el t\u00edtulo, el autor, la fecha, la categor\u00eda y un resumen. Cada art\u00edculo tendr\u00e1 un bot\u00f3n que dar\u00e1 acceso al contenido completo. La gracia de esta p\u00e1gina est\u00e1 en que se actualizar\u00e1 sola cada vez que a\u00f1adamos un art\u00edculo a la base de datos.<\/p>\n<p>C\u00f3mo queremos obtener el nombre del autor que est\u00e1 en la tabla usuarios el SELECT lo vamos a realizar uniendo la tabla <em>posts<\/em> con la de <em>usuarios<\/em> a trav\u00e9s del campo <em>usuario<\/em> en <em>usuarios<\/em> y el campo <em>author<\/em> en <em>posts<\/em>. Los resultados los queremos en orden descendente para tener primero los art\u00edculos m\u00e1s recientes.<\/p>\n<pre class=\"wp-block-preformatted\" wp_automatic_readability=\"23\"><?php <br??>session_start();<p>require_once 'conectar.php';<\/p><p>$sql = \"SELECT * FROM usuarios INNER JOIN posts ON usuarios.usuario = posts.author ORDER BY posts.id DESC\";<\/p><p>$statement = $db-&gt;prepare($sql);<br\/>$statement-&gt;execute();<\/p><p>while ($fila = $statement-&gt;fetch()) {<\/p><p>$filas[] = array(<br\/>\"author\" =&gt; $fila['author'],<br\/>\"date\" =&gt; $fila['date'],<br\/>\"url\" =&gt; $fila['url'],<br\/>\"title\" =&gt; $fila['title'],<br\/>\"excerpt\" =&gt; $fila['excerpt'],<br\/>\"featured_img\" =&gt; $fila['featured_img'],<br\/>\"category\" =&gt; $fila['category'],<br\/>\"nombre\" =&gt; $fila['nombre']);<br\/>}<\/p><p>?&gt;<\/p><\/pre>\n<p>Para presentar los resultados utilizamos un bucle<em> for<\/em> para recorrer el array $filas[] donde hemos almacenado el contenido de la base de datos.<\/p>\n<pre class=\"wp-block-preformatted\" wp_automatic_readability=\"3.7669683257919\"><div class=\"row\" wp_automatic_readability=\"6.6968325791855\"><p><?php for ($i = 0;<br??>               $i &lt; sizeof($filas);<br\/>$i++) {<br\/>$d = \"assets\/img\/blog\/\";<br\/>$fichero_foto = $d . $filas[$i]['featured_img'];<br\/>?&gt;<\/p><div class=\"col-12 col-lg-4 col-xl-4\" wp_automatic_readability=\"4.1217391304348\"><br\/>            <div class=\"section-title mt-20\" wp_automatic_readability=\"4.8086956521739\"><p><img decoding=\"async\" class=\"featured\" width=\"400px\" src=\"https:\/\/3cero.com\/gestion-blog-base-datos\/&lt;?php echo $fichero_foto; ?&gt;\"\/>                     alt=\"Foto del art\u00edculo\"&gt;<\/p><br\/>                <h3><?php echo str_replace(\"<\/span??>\", \"\", str_replace(\"<span>\", \"\", $filas[$i]['title'])); ?&gt;<\/span><\/h3><br\/>                <br\/>                <br\/>                <br\/>                <br\/>                <\/div><br\/>        <\/div><\/div><\/pre>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Pagina-de-blog.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"410\" src=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Pagina-de-blog.jpg\" alt=\"P\u00e1gina del blog de Aprendizaje Profundo\" class=\"wp-image-17423\" title=\"P\u00e1gina del blog de Aprendizaje Profundo\" srcset=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Pagina-de-blog.jpg 800w, https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Pagina-de-blog-480x246.jpg 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 800px, 100vw\"\/><\/a><\/figure>\n<p>No termina de convencerme el dise\u00f1o por lo que voy a hacer uno alternativo. Cambio el orden de los elementos, pensando tambi\u00e9n en lo m\u00e1s adecuado para la versi\u00f3n m\u00f3vil. Pongo primero el t\u00edtulo y le pongo el color destacado. Luego el autor del art\u00edculo y la fecha, la foto  y para terminar la categor\u00eda con el resumen. Elimino el bot\u00f3n leer m\u00e1s y hago pulsables el t\u00edtulo, la foto y el resumen. Esto es importante en la versi\u00f3n m\u00f3vil, que hab\u00eda que bajar bastante por la pantalla para pulsar el bot\u00f3n y ponerlo m\u00e1s arriba no quedaba bien en el dise\u00f1o. Tambi\u00e9n pensando en la versi\u00f3n m\u00f3vil pongo un borde que rodea todo lo relacionado con el mismo art\u00edculo.<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/articulos-del-blog.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"372\" src=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/articulos-del-blog.jpg\" alt=\"\" class=\"wp-image-17425\" srcset=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/articulos-del-blog.jpg 800w, https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/articulos-del-blog-480x223.jpg 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 800px, 100vw\"\/><\/a><figcaption>En el m\u00f3vil no se ver\u00eda todo en una pantalla; pero se puede acceder al primer art\u00edculo pulsando sobre el mismo.<\/figcaption><\/figure>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Version-movil-articulos-blog.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"425\" height=\"800\" src=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Version-movil-articulos-blog.jpg\" alt=\"\" class=\"wp-image-17426\" srcset=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Version-movil-articulos-blog.jpg 425w, https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Version-movil-articulos-blog-159x300.jpg 159w\" sizes=\"auto, (max-width: 425px) 100vw, 425px\"\/><\/a><\/figure>\n<\/div>\n<p>El c\u00f3digo ser\u00eda:<\/p>\n<pre class=\"wp-block-preformatted\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span id=\"Seccion_de_blog_de_la_portada\">Secci\u00f3n de blog de la portada<\/span><\/h2>\n\n\n\n<p>En la portada mostr\u00e1bamos el primer art\u00edculo que tuvimos en el blog y adem\u00e1s esta puesto directamente. Lo suyo es que se lea desde la base de datos y vaya cambiando cuando se publica un art\u00edculo nuevo. Vamos aprovechar para mejorar el formato y a\u00f1adir un segundo art\u00edculo. Vamos a mostrar en la portada los dos \u00faltimos art\u00edculos que se han publicado en el blog.<\/p>\n\n\n\n<p>Al principio de index.php realizamos una consulta a la base de datos. Usamos LIMIT 2 para que solamente carguemos los dos \u00faltimos registros. Si tuvi\u00e9ramos muchos art\u00edculos no tendr\u00eda sentido cargar toda la base de datos para solamente usar dos art\u00edculos.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" wp_automatic_readability=\"23\"><?php session_start();<\/p??><p>require_once 'conectar.php';<\/p><p>$sql = \"SELECT  *  FROM usuarios INNER JOIN posts ON usuarios.usuario = posts.author ORDER BY posts.id DESC LIMIT 2\";<\/p><p>$statement = $db-&gt;prepare($sql);<br\/>$statement-&gt;execute();<\/p><p>while ($fila = $statement-&gt;fetch()) {<\/p><p>$filas[] = array(<br\/>\"author\" =&gt; $fila['author'],<br\/>\"date\" =&gt; $fila['date'],<br\/>\"url\" =&gt; $fila['url'],<br\/>\"title\" =&gt; $fila['title'],<br\/>\"excerpt\" =&gt; $fila['excerpt'],<br\/>\"featured_img\" =&gt; $fila['featured_img'],<br\/>\"category\" =&gt; $fila['category'],<br\/>\"nombre\" =&gt; $fila['nombre']);<br\/>}<br\/>$d = \"assets\/img\/blog\/\";<\/p><p>?&gt;<\/p><\/pre>\n<p>La secci\u00f3n de blog quedar\u00eda as\u00ed :<\/p>\n<pre class=\"wp-block-preformatted\"><!-- ========================= blog-section end ========================= -->\n<section id=\"blog\" class=\"blog-section pt-20 pb-70\">\n    \n\n<\/section>\n\n<\/pre>\n<p>Adem\u00e1s del bot\u00f3n leer m\u00e1s, se puede pulsar la foto y el resumen para acceder al art\u00edculo. Por<a href=\"https:\/\/3cero.com\/accesibilidad-web\/\" target=\"_blank\" rel=\"noreferrer noopener\"> accesibilidad<\/a> en el alt de las im\u00e1genes se pone autom\u00e1ticamente el t\u00edtulo del art\u00edculo.<\/p>\n<p>Para darle formato uso el siguiente css:<\/p>\n<pre class=\"wp-block-preformatted\" wp_automatic_readability=\"25\">\/*===========================<br\/>05.BLOG css<br\/>===========================*\/<p>.blog-section {<br\/>background: #F5F5F5;<br\/>}<\/p><p>.blog-section .single-blog {<br\/>position: relative;<br\/>margin-bottom: 30px;<br\/>}<\/p><p>.blog-section .single-blog .image img {<br\/>width: 100%;<br\/>}<\/p><p>.blog-section .single-blog .content {<br\/>position: relative;<br\/>width: calc(100% - 20px);<br\/>margin: -60px auto auto;<br\/>z-index: 2;<br\/>background: #fff;<br\/>padding: 30px;<br\/>}<\/p><p>@media only screen and (min-width: 768px) and (max-width: 991px) {<br\/>.blog-section .single-blog .content {<br\/>padding: 30px 20px;<br\/>}<br\/>.featured_img{<br\/>width: 300px;<br\/>}<\/p><p>}<\/p><p>.blog-section .single-blog .content h5 a {<br\/>font-weight: 900;<br\/>margin-bottom: 15px;<br\/>color: #01012C;<br\/>}<\/p><p>.blog-section .single-blog .content h5 a:hover {<br\/>color: #DB0EB7;<br\/>}<\/p><p>.blog-section .single-blog .content p {<br\/>font-size: 16px;<br\/>line-height: 26px;<br\/>margin-bottom: 18px;<br\/>}<\/p><p>.blog-section .single-blog .content a {<br\/>font-size: 18px;<br\/>color: white;<br\/>}<\/p><p>.blog-section .single-blog .content a:hover {<br\/>color: #DB0EB7;<br\/>}<\/p><\/pre>\n<p>En la web quedar\u00eda as\u00ed:<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Blog-en-la-portada.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"409\" src=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Blog-en-la-portada.jpg\" alt=\"Blog en la portada\" class=\"wp-image-17431\" title=\"Blog en la portada\" srcset=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Blog-en-la-portada.jpg 800w, https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Blog-en-la-portada-480x245.jpg 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 800px, 100vw\"\/><\/a><\/figure>\n<p>En el m\u00f3vil se ver\u00eda as\u00ed:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Blog-portada-movil.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"435\" height=\"800\" src=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Blog-portada-movil.jpg\" alt=\"Blog portada m\u00f3vil\" class=\"wp-image-17434\" title=\"Blog portada m\u00f3vil\" srcset=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Blog-portada-movil.jpg 435w, https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Blog-portada-movil-163x300.jpg 163w\" sizes=\"auto, (max-width: 435px) 100vw, 435px\"\/><\/a><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\"><span id=\"PageSpeed_Insights_de_Aprendizaje_Profundo\">PageSpeed Insights de Aprendizaje Profundo<\/span><\/h2>\n<p>Cuando empec\u00e9 el proyecto hice una <a href=\"https:\/\/3cero.com\/web-estatica\/#Analisis_de_rendimiento\" target=\"_blank\" rel=\"noreferrer noopener\">an\u00e1lisis de rendimiento<\/a> que obtuvo una puntuaci\u00f3n alta. Tras a\u00f1adir c\u00f3digo PHP y acceder a la base de datos para el blog es previsible que el rendimiento haya empeorado, por lo que vamos a medirlo de nuevo.<\/p>\n<p>En el m\u00f3vil llegamos a tener 90 puntos y ahora hemos bajado a 82, hemos bajado 8 puntos; pero sigue siendo una buena puntuaci\u00f3n:<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Page-Speed-Movil.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"728\" src=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Page-Speed-Movil.jpg\" alt=\"\" class=\"wp-image-17437\" srcset=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Page-Speed-Movil.jpg 800w, https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Page-Speed-Movil-480x437.jpg 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 800px, 100vw\"\/><\/a><\/figure>\n<p>En escritorio part\u00edamos de 98 puntos, una cifra espectacular que pr\u00e1cticamente he conseguido mantener ya que la puntuaci\u00f3n actual es 97:<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Page-Speed-Escritorio.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"733\" src=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Page-Speed-Escritorio.jpg\" alt=\"\" class=\"wp-image-17438\" srcset=\"https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Page-Speed-Escritorio.jpg 800w, https:\/\/3cero.com\/wp-content\/uploads\/2022\/05\/Page-Speed-Escritorio-480x440.jpg 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 800px, 100vw\"\/><\/a><\/figure>\n<p>Tambi\u00e9n hemos ido realizando mejoras de usabilidad y accesibilidad que no se reflejan en esta herraminta.<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"Resumen_final\">Resumen final<\/span><\/h2>\n<p>Desde que hicimos la <a href=\"https:\/\/3cero.com\/web-estatica\/\" target=\"_blank\" rel=\"noreferrer noopener\">web est\u00e1tica<\/a>, hemos ido realizando cambios en la web que resumo a continuaci\u00f3n.<\/p>\n<p>En el art\u00edculo <a href=\"https:\/\/3cero.com\/formulario-php\/\" target=\"_blank\" rel=\"noreferrer noopener\">Formulario PHP<\/a> realic\u00e9 las siguientes tareas:<\/p>\n<ul class=\"wp-block-list\">\n<li>Cambiamos una p\u00e1gina html a PHP<\/li>\n<li>Creamos <em>templates<\/em> para la cabecera, el men\u00fa y el pie de pagina<\/li>\n<li>Cambi\u00e9 la recogida de datos del formulario de JavaScript a PHP<\/li>\n<li>Env\u00edo de un email con los datos que yo recibo<\/li>\n<\/ul>\n<p>En el art\u00edculo <a href=\"https:\/\/3cero.com\/gestion-usuarios-php\/\" target=\"_blank\" rel=\"noreferrer noopener\">Gesti\u00f3n de usuarios en PHP<\/a> hice lo siguiente:<\/p>\n<ul class=\"wp-block-list\">\n<li>Creaci\u00f3n de un formulario de registro en el que se carga una foto de perfil<\/li>\n<li>Creaci\u00f3n de la base de datos para la gesti\u00f3n de usuarios<\/li>\n<li>Conexi\u00f3n a la base de datos<\/li>\n<li>Inserci\u00f3n de un registro en la base de datos<\/li>\n<li>El archivo de la foto de perfil se almacena en un directorio del hosting y el nombre en la base de datos<\/li>\n<li>Acceso de usuarios registrados<\/li>\n<li>Creaci\u00f3n de sesi\u00f3n del usuario<\/li>\n<li>Cambios en el men\u00fa para que sea diferente si has iniciado sesi\u00f3n<\/li>\n<li>Cierre de sesi\u00f3n<\/li>\n<li>Borrar  un registro de la base de datos<\/li>\n<li>Modificar Perfil y modificar el registro correspondiente en la base de datos<\/li>\n<li>Cambiar Contrase\u00f1a y almacenamiento del nuevo hash<\/li>\n<li>Creaci\u00f3n del Rol de administrador y creaci\u00f3n de un men\u00fa distinto para \u00e9l<\/li>\n<li>Creaci\u00f3n de una p\u00e1gina de usuarios donde se ve el contenido de la base de datos, solamente accesible para el Rol de administrador.<\/li>\n<\/ul>\n<p>En este art\u00edculo hemos realizado las mejoras relativas al uso del blog que incluye:<\/p>\n<ul class=\"wp-block-list\">\n<li>Creaci\u00f3n de la tabla <em>posts<\/em> para guardar los art\u00edculos del blog con una relaci\u00f3n N:1 con la tabla <em>usuarios<\/em>.<\/li>\n<li>Plantilla de art\u00edculos del blog, mejorando el dise\u00f1o, para usar por todos los art\u00edculos. Se lee cada art\u00edculo de la base de datos y se compone en PHP.<\/li>\n<li>Urls amigables para los art\u00edculos del blog modificando .htaccess<\/li>\n<li>P\u00e1gina de art\u00edculos donde se recogen todos los registros de la tabla <em>posts<\/em> y se muestran en una p\u00e1gina de blog generada en PHP<\/li>\n<li>Modificamos el dise\u00f1o de la secci\u00f3n blog de la portada, y sustituimos el art\u00edculo fijo por los dos \u00faltimos art\u00edculos almacenados en la base de datos (los m\u00e1s recientes.<\/li>\n<\/ul>\n<p>Otros art\u00edculos publicados en este blog relativos al proyecto son:<\/p>\n<p>Tengo pensado mejoras futuras para el blog entre las que se incluyen:<\/p>\n<ul class=\"wp-block-list\">\n<li>Permitir que el administrador desde la p\u00e1gina donde se listan todos los usuarios pueda modificar el rol de \u00e9stos<\/li>\n<li>La creaci\u00f3n del rol de editor y de un formulario solamente accesible por los editores para subir un nuevo art\u00edculo al blog<\/li>\n<li>Crear una nueva tabla en la base de datos para almacenar el contenido de las p\u00e1ginas que se mostrar\u00edan mediante una plantilla que la usar\u00edamos para crear una p\u00e1gina para cada servicio ofrecido en la web<\/li>\n<li>Creaci\u00f3n de p\u00e1ginas para realizar demostraciones de Machine Learning y Deep Learning usando <a href=\"https:\/\/www.tensorflow.org\/js?hl=es-419\" target=\"_blank\" rel=\"noreferrer noopener\">TensorFlow. js<\/a> y <a href=\"https:\/\/pyscript.net\/\" target=\"_blank\" rel=\"noreferrer noopener\">PyScript<\/a>, en el primer caso para programar en JavaScript y en el segundo para hacerlo en Python.<\/li>\n<\/ul>\n<p>Espero que este art\u00edculo as\u00ed como los relacionados te haya resultado interesante. Quedo a tu disposici\u00f3n para responderte tus dudas y ayudarte en tu propio trabajo. D\u00e9jame un comentario y te responder\u00e9 lo antes posible. Hasta pronto.<\/p>\n<p><span class=\"et_social_bottom_trigger\"\/>\t\t\t\t\t<\/div>\n\n<br \/><a href=\"https:\/\/3cero.com\/gestion-blog-base-datos\/\" target=\"_blank\" rel=\"noopener\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>alt=\u00bbImagen principal del art\u00edculo\u00bb&gt; Y con el pie de p\u00e1gina tengo la p\u00e1gina de art\u00edculo del blog completa: Urls amigables modificando .htaccess Una url del tipo post.php?post_id= no es lo m\u00e1s adecuado para el SEO, aunque peor ser\u00eda si en vez la url que inclumos en la base de datos despu\u00e9s del id pusi\u00e9ramos un [&#8230;]\n","protected":false},"author":1,"featured_media":5742,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[243,356,1287,12,285,90,75],"class_list":["post-5741","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-diseno-web","tag-agencia-de-diseno-web","tag-agencia-de-redes-sociales","tag-agencia-seo","tag-diseno-web","tag-manejo-de-redes-sociales","tag-posicionamiento-web","tag-seo"],"_links":{"self":[{"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/posts\/5741","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/comments?post=5741"}],"version-history":[{"count":0,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/posts\/5741\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/media\/5742"}],"wp:attachment":[{"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/media?parent=5741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/categories?post=5741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/tags?post=5741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}