viernes, 12 de septiembre de 2014

Publicar en WordPress desde Microsoft Access via XMLRPC Parte 2

Continuando con nuestra serie de posts acerca de cómo publicar en WordPress desde una aplicación local en Microsoft Access, en esta segunda oportunidad veremos cómo subir una foto a la librería de medios de WordPress.

Si aún no viste la parte 1, te recomiendo que la leas en este enlace.

El código

Sub PublicarMedioEnWordPress()
    ' Datos de Autenticación
    txtURL = SITIO
    txtUserName = USUARIO
    txtPassword = PASSWORD
    
    ' Datos del Medio
    txtArchivo = "Desert.jpg"
    txtTipo = "image/jpeg"
    Dim txtImagen As String
    txtImagen = "C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"
      
    ' 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.newMediaObject</methodName>"
    
    ' General
    strT = strT & "<params>"
    strT = strT & "<param><value><string>0</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>"
    
    ' Nombre, Tipo e Imagen
    strT = strT & "<member><name>name</name><value><![CDATA[" & txtArchivo & "]]></value></member>"
    strT = strT & "<member><name>type</name><value><![CDATA[" & txtTipo & "]]></value></member>"
    strT = strT & "<member><name>bits</name><value><base64>" & EncodeFile(txtImagen) & "</base64></value></member>"
    
    strT = strT & "</struct>"
    strT = strT & "</param>"
    
    strT = strT & "</params>"
    strT = strT & "</methodCall>"

   
    ' Publicación
    objSvrHTTP.send strT

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

End Sub

Public Function EncodeFile(strPicPath As String) As String
    Const adTypeBinary = 1          ' Binary file is encoded

    ' Variables for encoding
    Dim objXML
    Dim objDocElem

    ' Variable for reading binary picture
    Dim objStream

    ' Open data stream from picture
    Set objStream = CreateObject("ADODB.Stream")
    objStream.Type = adTypeBinary
    objStream.Open
    objStream.LoadFromFile (strPicPath)

    ' Create XML Document object and root node
    ' that will contain the data
    Set objXML = CreateObject("MSXml2.DOMDocument")
    Set objDocElem = objXML.createElement("Base64Data")
    objDocElem.DataType = "bin.base64"

    ' Set binary value
    objDocElem.nodeTypedValue = objStream.Read()

    ' Get base64 value
    EncodeFile = objDocElem.Text

    ' Clean all
    Set objXML = Nothing
    Set objDocElem = Nothing
    Set objStream = Nothing

End Function


El resultado


El XML retornado por WordPress:


Bibliografía

No hay comentarios:

Publicar un comentario