jueves, 11 de septiembre de 2014

Publicar en WordPress desde Microsoft Access via XMLRPC Parte 1

Algunas veces necesitamos comunicar aplicaciones internas de nuestros clientes con su sitio web o extranet. En esta serie de posts vamos a ver algunos ejemplos de cómo comunicar dos mundos:

Mundo 1:
  • Servidor Windows del cliente
  • Microsoft Access
  • SQL Server
  • Red Interna
Mundo 2: 
  • Hosting BlueHost
  • WordPress
  • Linux
  • MySQL
  • Internet

¿Cómo comunicaremos ambos mundos?

A través del servicio XMLRCP de WordPress. Es posible que el servicio esté bloqueado por nuestro Hosting, más abajo explico cómo proceder. Dentro de MS Access deberemos agregar la siguiente referencia:



El código

Sub PublicarEnWordPress()
    ' Datos de Autenticación
    txtUserName = USUARIO
    txtPassword = PASSWORD
    
    ' Datos del Post
    txtBlogId = "1"
    txtTitulo = "Hola mundo desde Access"
    txtContenido = "Este es un post de ejemplo publicado desde Microsoft Access"
    Dim txtCategorias(1) As String
    txtCategorias(1) = "Uncategorized"
      
    ' ServerXMLHTTP
    Dim objSvrHTTP As ServerXMLHTTP
    Dim strT As String
    Set objSvrHTTP = New ServerXMLHTTP
  
    ' Autenticación
    objSvrHTTP.Open "POST", txtURL, False, CStr(txtUsuario), CStr(txtPassword)
    objSvrHTTP.setRequestHeader "Accept", "application/xml"
    objSvrHTTP.setRequestHeader "Content-Type", "application/xml"

    strT = strT & "<methodCall>"
    
    ' Acción
    strT = strT & "<methodName>metaWeblog.newPost</methodName>"
    
    ' General
    strT = strT & "<params>"
    strT = strT & "<param><value><string>" & txtBlogId & "</string></value></param>"
    strT = strT & "<param><value>" & txtUserName & "</value></param>"
    strT = strT & "<param><value><string>" & txtPassword & "</string></value></param>"
    strT = strT & "<param>"
    
    strT = strT & "<struct>"
    
    ' Categorías
    strT = strT & "<member><name>categories</name><value><array>"
    strT = strT & "<data>"
    
    For i = 1 To UBound(txtCategorias)
        strT = strT & "<value>" & txtCategorias(i) & "</value>"
    Next i
    strT = strT & "</data>"
    strT = strT & "</array></value></member>"
    
    ' Título, contenido y fecha
    strT = strT & "<member><name>description</name><value><![CDATA[" & txtContenido & "]]></value></member>"
    strT = strT & "<member><name>title</name><value>" & txtTitulo & "</value></member>"
    strT = strT & "<member><name>dateCreated</name><value><dateTime.iso8601>" & Format(Now(), "yyyyMMdd") & "T" & Format(Now(), "hh:mm:ss") & "</dateTime.iso8601></value></member>"
    
    strT = strT & "</struct>"
    strT = strT & "</param>"
    
    ' Tipo de publicación: 0 DRAFT, 1 PUBLISH
    strT = strT & "<param><value><boolean>1</boolean></value></param>"
    strT = strT & "</params>"
    
    strT = strT & "</methodCall>"
    
    ' Publicación
    objSvrHTTP.send strT

    ' Debug
    Debug.Print objSvrHTTP.responseText
    MsgBox objSvrHTTP.responseText

End Sub


La publicación

A continuación vemos el post publicado:

Y el resultado devuelto por WordPress


Permisos en el Hosting

Es posible que en estos primeros intentos obtengamos un error como el siguiente:

<head><title>Not Acceptable!</title></head><body><h1>Not Acceptable!</h1><p>An appropriate representation of the requested resource could not be found on this server. This error was generated by Mod_Security.</p></body></html>

Esto se soluciona contactando al servicio de hosting. En mi caso, BlueHost me lo solucionó a través del servicio de soporte por chat en minutos, simplemente poniendo en la whitelist la URL del xmlrcp.php

Próximamente seguiremos con más ejemplos, les recomiendo que lean este post que me explicó cómo hacer la primera prueba: http://www.juust.org/index.php/metaweblog-newpost-posting-to-wordpress-from-word/2009/10/

Hasta la próxima!

0 comentarios:

Publicar un comentario