WordPress JSON-based REST API & Cordova

REST es un concepto de diseño. De hecho, la misma World Wide Web representa la mayor implementación de un sistema conforme al estilo arquitectónico REST.

REST no es tan rígido como SOAP. Los “RESTful web-services” utilizan URIs y métodos estándar para hacer llamadas a un “Webservice”. Por lo tanto, cuando se solicita un URI, se recibe una respuesta con la representación de un objeto, sobre el cual se puede realizar operaciones, por ejemplo: GET, PUT, POST y DELETE. Por dicha no estamos limitados a usar XML para representar datos, la opción recomendada es escoger las basadas en JSON, son muy útiles para representar datos.

JSON y XML, son “funcionalmente equivalentes”. Pero XML es considerado como demasiado detallado, y muchas veces muy difícil de analizar, por otro lado, parece más decente representar los datos usando JSON.

Crear Document Root del Dominio

sudo mkdir -p /var/www/app.josoroma.lh/htdocs

sudo chown -R josoroma:josoroma /var/www/app.josoroma.com

Bajar y descomprimir WordPress

cd /var/www/app.josoroma.lh/htdocs

wget http://wordpress.org/latest.tar.gz

tar -xvzpf latest.tar.gz --strip-components=1

Sólo porque es un Ambiente de Desarrollo

chmod -R 777 /var/www/app.josoroma.lh

Crear usuario y Base de Datos

mysql -u root -p -h localhost
CREATE USER 'josoromapp'@'localhost' IDENTIFIED BY  '***';

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,
 FILE, INDEX, ALTER, CREATE TEMPORARY TABLES, CREATE VIEW, EVENT, TRIGGER, SHOW VIEW,
 CREATE ROUTINE, ALTER ROUTINE,
 EXECUTE ON * . * TO  'josoromapp'@'localhost' IDENTIFIED BY  '***' WITH 
  MAX_QUERIES_PER_HOUR 0 
  MAX_CONNECTIONS_PER_HOUR 0 
  MAX_UPDATES_PER_HOUR 0 
  MAX_USER_CONNECTIONS 0;

CREATE DATABASE IF NOT EXISTS  `dbjosoromapp`;

GRANT ALL PRIVILEGES ON  `dbjosoromapp` . * TO  'josoromapp'@'localhost';

Configuración básica con Apache

sudo su

vi /etc/apache2/sites-available/app.josoroma.lh.conf
<VirtualHost *:80>
        ServerName app.josoroma.lh

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/app.josoroma.lh/htdocs

        <Directory /var/www/app.josoroma.lh/htdocs/>
                Options FollowSymlinks
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        LogLevel warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Mapear el Host a una IP

127.0.0.1       app.josoroma.lh

Habilitar el “VirtualHost”

a2ensite app.josoroma.lh.conf

Agregar Mod Rewrite y reiniciar Apache

sudo a2enmod rewrite

service apache2 reload

WordPress Coding Standards para Sublime/phpcs

mkdir ~/.gitvendor

# idiotic path
git clone git://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git ~/.gitvendor/wordpress/coder_sniffer/WordPress

ls -la .gitvendor/wordpress/coder_sniffer/WordPress

cd ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards

ln -s ~/.gitvendor/wordpress/coder_sniffer/WordPress WordPress
phpcs -i

The installed coding standards are WordPress, PEAR, PHPCS, PSR1, Drupal, Zend, Squiz, PSR2 and MySource

Para tener acceso a un API tan confortable como el de:

WordPress.com

existen varias opciones, las que parecen interesantes de escarbar son las siguientes:

Que una instalación de WordPress ofrezca un REST API basado en JSON es muy importante porque permite que otras aplicaciones conversen con este API para solicitar información, por ejemplo, mediante un Web Service desde la otra aplicación. Esta otra aplicación puede ser una App de teléfono Android o IOS, creada con una solución como PhoneGap-Corodova. Además se puede negociar con el API para crear, actualizar o borrar “cosas”.

En combinación con AngularJS-Ionic se puede jugar bastante con APIS externos. Las implicaciones son muy interesantes y parece que bastante capitalizables con soluciones desde juegos hasta buscadores mezclados con Mapas para nichos como Bienes Raíces, Turismo, Profesionales, Autos, por mencionar algunos.

Por favor consulte:

<VirtualHost *:80>
        ServerName app.josoroma.lh

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/app.josoroma.lh/htdocs

        <Directory /var/www/app.josoroma.lh/htdocs/>
                Header set Access-Control-Allow-Origin "*"
                Options FollowSymlinks
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        LogLevel warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Ejemplo de una solicitud utilizando HTTP-GET:

/posts: {
    supports: [
        "HEAD",
        "GET",
        "POST"
    ],
    meta: {
        self: "http://app.josoroma.lh/api/posts"
    },
    accepts_json: true
},
/posts/: {
    supports: [
        "HEAD",
        "GET",
        "POST",
        "PUT",
        "PATCH",
        "DELETE"
    ],
    accepts_json: true
}

Red de Cooperación Social Propia (sitio web de alto nivel)

Los pilares de esta estrategia en Web nacen del estudio profundo de la gestión del conocimiento y sobre el engranaje tecnológico que mueve a las organizaciones de Cooperación Internacional. El sistema es una Estructura Social Virtual compuesta por un conjunto de actores (por ejemplo, individuos u organizaciones) y las relaciones que ocurren entre estos actores.

Basado en BuddyPress

Basado en BuddyPress

La perspectiva de Red proporciona una forma clara de analizar la estructura y muchas veces el comportamiento de las diversas entidades sociales que cooperan entre si. Además permite el estudio de estas estructuras y comportamientos para:

  • Identificar los patrones locales y globales.
  • Localizar entidades influyentes.
  • Examinar la dinámica de la red.

Areas (grupos de cooperación constructiva)

Cada área en realidad es un Grupo Trabajo relacionado con la organización. Un grupo de trabajo podría ser el área de proyectos y podría ser un grupo del tipo abierto, para el público, donde cualquier persona con un registro podrá opinar, compartir multimedia de otras redes sociales y cooperar con información dentro del grupo de trabajo. También podría ser un grupo privado donde sólo las personas usuarias aprobadas por una persona administradora a cargo del grupo pueden colaborar. El sistema es flexible, pueden existir tantos grupos de diversos tipos como sea necesario, con personas a cargo en diversas partes de un país, región o cualquier parte del mundo, mientras cuenten con una cuenta de usuario y el acceso al Internet disponible.

Asociados (membresía)

En portada se deben destacar los asociados más relevantes, mediante un Google Map Dinámico con marcas en el mapa de todos los asociados destacados disponibles. Al realizar clic sobre la marca de un asociado en el mapa, se debe ir a la ficha que presenta el resto de la información del asociado, incluyendo información adicional como datos de contacto. También otros recursos importantes en texto, imágenes o vídeos que el asociado considere adecuados dentro de los estándares de calidad y procesos de comunicación propios de la organización (si no existe, podemos brindar un proceso que se puede ampliar de manera constructiva).

Infinidad de posibles escenarios

Por mencionar dos ejemplos, en el sector bienes raíces cada marca podría ser una casa o un lote en venta o en alquiler.  En otro escenario como el sector turismo, cada marca podría ser un alojamiento, una alimentación o un tour en específico. Estas características se planifican y desarrollan al gusto de la organización.

La Red

Cada asociado, en realidad es cada usuario registrado. Se puede decidir si se permite el registro de usuarios o sí sólo unas personas administradoras son las encargadas de crear asociados dentro de la red. Cada usuario puede ser tipificado, por ejemplo, para distinguir si esa organización o persona es un investigador regional o un servicio en específico. Estas características se planifican al inicio y se desarrollan al gusto y necesidad de la organización.

Roles importantes

Además si un asociado es una persona de confianza para la organización, se puede ascender para convertirse en un asociado con membresía y permisos especiales, lo que le permitirá cooperar con diversos tipos de contenidos como:

  • Noticias.
  • Comunicados de prensa.
  • Historias destacadas.
  • Resúmenes de prensa.
  • Oportunidades de trabajo.
  • Documentos o publicaciones.

Login con Facebook

De manera opcional, para no competir con La Gran Red Social, se integra de manera segura y fácil “Login con Facebook” para que las personas no tengan que crear una cuenta nueva en una Red Social nueva, lidiando con recordar otra contraseña más. Por lo tanto es permitido usar la autenticación de Facebook para permitir un registro transparente y seguro.

Actividades, “mi propio muro de estado”

El hilo. Es un mensaje de estado breve que se genera cada vez que:

  • Creamos un artículo.
  • Aceptamos una conexión de amistad.
  • Otras persona nos mencionan.
  • Participamos en un grupo.
  • Compartimos lo que pensamos (como el estado en Facebook).

Conexiones con amistades

Permite que las personas participantes de la Red Social puedan hacer conexiones, lo que les facilita seguir la actividad de sus amistades.

Correo interno privado

La mensajería privada permite que los participantes de la Red Social puedan comunicarse entre sí directamente, y en privado. No sólo se limita a conversaciones de uno a uno, también se pueden enviar mensajes a varias conexiones o amistades al mismo tiempo.

Blogs para compartir singularidad

La Red Social se puede diseñar y configurar para que cada asociado con membresía especial pueda tener de manera singular, su propio Blog (sitio web propio, con sus propios contenidos y noticias dentro de la misma red).

Entrenamiento

Las personas administradoras adecuadas y de confianza dentro de su organización (administradores de la red de cooperación social propia) reciben una capacitación presencial y constructiva de cuatro días, de tres horas cada día, sobre las características y herramientas del sistema. Más los materiales de apoyo esenciales para gestionar de manera segura y rápida, en cualquier momento y de forma organizada, las diversos tipos de contenidos y bondades que ofrece el sistema para las áreas de proyectos y los diversos tipos de asociados.

Garantía

Un año de actualizaciones y mantenimiento de la seguridad y la alta disponibilidad del sistema. Más el acceso privado a respaldos semanales de todos los archivos y la base de datos que conformen todo el sistema.

Comercio electrónico (tienda virtual)

En general hay muchas opciones para presentar una Tienda Virtual profesional que nos permita vender y ganar dinero. Con una logística para gestionar los envíos y una adecuada política para administrar las devoluciones, el resto está en la punta de los dedos de las personas interesadas por realizar una compra.

Carrito de compras virtual

Pero el dinero no es lo más importante, también se debe brindar seguridad, tiempos de entrega óptimos y resolución de conflictos en casos de cancelaciones de compra, devolución o atrasos fuera del alcance, eso que nunca debería ocurrir. Pero esto son sólo procesos, términos y acuerdos que se van optimizando con el tiempo, nada de otro mundo.

prestashop-logo

Para reaccionar y contestar a un mal comentario, primero hay que aceptar que no son malos comentarios, son oportunidades, hay que tomarlos de manera abierta y receptiva, agradecer por la confianza y transformar la comunicación en algo agradable para las partes involucradas. Si algo realmente estaba equivocado, pues se mejora y si es necesario se recompensa, no hay gran problema, más bien nos regalaron un mejor entendimiento de nuestro propio negocio, dado por nuestra propia gente y de forma gratuita.

Usted puede vender cualquier cosa

De hecho, parece que hay muchas cosas extrañas pero válidas, se puede vender desde felicidad hasta amor, incluyendo tratamientos para hacer crecer el cabello y por supuesto para adelgazar. Usted coloque el producto o servicio que quiera, mientras sea legal e interesante, es muy probable que existe un público. También existen varias opciones para lanzar una Tienda Virtual, por ejemplo:

  • Usar un mercado popular como Amazon o Ebay, pero usted probablemente sea uno más entre millones.
  • Utilizar aplicaciones externas y curiosas que permiten persuadir a nuestras amistades en redes sociales para comprar algo.
  • En un negocio de Tienda Virtual propia sí existe toda la libertad para lanzar sus propios productos, a su manera. Sin duda, es su propia marca la que se propaga de boca en boca.

Vende tus cosas como si estuvieras compartiendo

Por favor consulte:

 

 

Actualizando la base de datos después de mover la instalación

En WordPress cuando se mueve una instalación de un nombre de dominio hacia otro nombre de dominio diferente, en el programa cliente de la base de datos de MySQL es necesario ejecutar las siguientes actualizaciones o sustituciones:

USE {DATABASE_NAME}

UPDATE wp_options SET option_value = replace(option_value, 'http://{OLD_URL}', 'http://{NEW_URL}') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://{OLD_URL}','http://{NEW_URL}');

UPDATE wp_posts SET post_content = replace(post_content, 'http://{OLD_URL}', 'http://{NEW_URL}');

UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://{OLD_URL}','http://{NEW_URL}');

UPDATE wp_users SET user_url = replace(user_url, 'http://{OLD_URL}', 'http://{NEW_URL}');

Sustitución de cadenas en todos los archivos

Util para sustituir cadenas en todos los archivos del directorio actual y de manera recursiva dentro de todos sus demás directorios también:

find . -type f -print0 |xargs -0 perl -p -i -e 's/Cadena/Palabra/g'

perl -p -i -e 's/Cadena/Palabra/g' `grep -ril Cadena *`

Por ejemplo, en WordPress, para crear un nuevo tema llamado Poet y totalmente basado en el tema Twenty Eleven, es necesario usar:

find . -type f -print0 |xargs -0 perl -p -i -e 's/Twenty Eleven|Twenty_Eleven/Poet/g';

find . -type f -print0 |xargs -0 perl -p -i -e 's/twentyeleven_/poet_/g';

find . -type f -print0 |xargs -0 perl -p -i -e 's/twentyeleven/poet/g';