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
txtURL = "http://www.blablabla.com/xmlrpc.php"
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!
No hay comentarios:
Publicar un comentario