Sobre utilizar Blogger como un compilador QML

En mi llegada a Blogger, como primer entrada he comentado las razones por las cuales he decidido comenzar a utilizar este sistema de publicación que nos provee Google.


Había comentado que días anteriores, en la aplicación unik utilicé un editor de textos online que yo suelo utilizar llamado Writer de la empresa BigHugeLabs.com. También lo habia hecho en otros editores como en CollabEdit y otras pruebas.


Tenía ganas de ver de qué era capáz Blogger. A la vez, tenía dudas sobre de qué era capaz yo mismo. Desde hace un par de años me siento muy confiado, casi todo lo que me propongo a nivel programación lo puedo resolver en algún momento y de alguna manera. Me preguntaba ¿Podré lograr que unik me cargue Blogger.com en un WebEngineView y poder compilar/depurar una entrada con código en formato QML? ¿Hasta que punto Blogger sería útil o funcional? ¿Me servirá Blogger? ¿Podré sentirme cómodo, darle estilo a las entradas? ¿Que podré realizar o lograr aquí?


Como pueden ver, muchas incógnitas por resolver. La primera que responderé será si pude lograr utilizar Blogger cómo un compilador QML. Si, lo he logrado. Tuve algunas complicaciones pero al parecer todo se comporta de una manera bastante aceptable y que a mi me parece funcional e útil. Explicaré cómo fue que lo hice.


Blogger no me permite descargar el archivo, o eso es lo que a mi me parece. He explorado durante horas el html, buscando algúna función javascript en todo el infinito código que Blogger carga para funcionar y no pude encontrar nada. Horas buscando y nada. El panorama venía complicado y se me ocurrió intentar con otro método que era un plan B que no quería utilizar porque sería mucho más complejo de resolver. Lo apliqué y funcionó!


Lo que hice es requerirle al WebEngineView de QML que ejecute un método llamado runJavaScript(). Tal cómo su nombre lo deja explícito, sirve para que nuestro componente QML del tipo WebEngineView, ejecute una función JavaScript que se encuentre disponible en el código fuente cargado en la página cargada en dicho componente. Luego de horas intentando comprender el código html y javascript de Blogger, llegué a la conclución de que debía obtener el innerHTML de un div en el cuál Blogger contenía el texto de la entrada que estamos editando. El div tiene como id el siguiente nombre: "postingComposeBox"


Por razones muy largas de explicar, me ha costado acceder a sus datos porque las soluciones que encontraba en la web eran para IE, una mezcla de IE y webkit, mozilla etc. Luego de 80 pruebas aproximadamente, pude acceder de la siguiente manera: document.getElementById("postingComposeBox").contentDocument.getElementsByTagName(\'body\')[0].innerHTML;


Parece simple no? Primero que nada hay que tener en cuenta de que yo estaba intentando acceder a esos datos desde afuera del sitio, desde un pseudo navegador propio, por eso resultó algo complejo llegar a esa manera como la más idonea. Al finál quedó así:

function compilar(){
                wv.runJavaScript('function aaa(){var c = document.getElementById("postingComposeBox").contentDocument.getElementsByTagName(\'body\')[0].innerHTML; return c;};aaa();', function(result) {

            var c1 = ''+result;
            var c2 = c1.replace(//g, '')
            var c3 = c2.replace(/<\/p>/g, '\n')
            var c4 = c3.replace(/ /g, ' ')
            var d=''+c4
            var m0=d.split('\n')
            var l1 = ''+m0[0]
            var fileName = l1.substring(2,l1.length)
                console.log('Saving: '+fileName)
            var m1 = fileName.split('/')

            var folder = fileName.replace('/'+m1[m1.length-1], '')
            var l2 = ''+m0[1]            
            uk.mkdir(folder)
            uk.setFile(fileName,d,true)
            var cl = '-folder '+folder

            var appPath
            if(Qt.platform.os==='windows'){
                appPath = '"'+uk.getPath(1)+'/'+uk.getPath(0)+'"'
                uk.setFile('H:/cl.txt',cl,true)
            }
            if(Qt.platform.os==='linux'){
              appPath = '"'+appExec+'"'
            }            
            console.log('Running: '+appPath+' '+cl)
            if(uk.fileExist(fileName)){
                uk.run(appPath+' '+cl, true)
            }else{

            }
        })


    }

Ahora se entiende porqué he demorado un poquito? También debo contar que hoy en Buenos Aires hemos tenido un día de mucho calor, 35°C con mucha humedad. Un día horrible para ponerse a programar.


El código completo lo pueden ver en esta entrada: https://nextsigner.blogspot.com.ar/2018/01/codigo-de-prueba-de-una-app-qml.html


Por último quiero contar que estoy muy contento y a gusto en Blogger. He intentado darle un estilo al blog y he quedado encantado al ver que el código QML lo puedo comtemplar tal cuál lo tengo en el IDE Qt.

Comentarios

  1. Ya he logrado compilar el código de la entrada de Blogger para hacer correr una aplicación QML.

    ResponderEliminar

Publicar un comentario

Entradas populares