{"id":951,"date":"2010-01-16T16:51:44","date_gmt":"2010-01-16T19:51:44","guid":{"rendered":"http:\/\/meiradarocha.jor.br\/news\/?p=951"},"modified":"2010-12-30T12:31:51","modified_gmt":"2010-12-30T15:31:51","slug":"como-importar-posts-de-blogs-para-o-scribus","status":"publish","type":"post","link":"https:\/\/meiradarocha.jor.br\/news\/2010\/01\/16\/como-importar-posts-de-blogs-para-o-scribus\/","title":{"rendered":"Como importar posts de blogs para o Scribus"},"content":{"rendered":"<p><a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2010\/01\/xml-rpc.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-1407\" title=\"xml-rpc\" src=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2010\/01\/xml-rpc-300x129.jpg\" alt=\"\" width=\"300\" height=\"129\" \/><\/a>Este artigo mostra como importar texto e imagens do CMS de blogs <strong>WordPress<\/strong> para o programa livre de editora\u00e7\u00e3o <strong>Scribus<\/strong>.<\/p>\n<p>H\u00e1 tempos estou pensando sobre um sistema editorial que auxilie a produ\u00e7\u00e3o de jornais pequenos, usando um CMS para gerar conte\u00fado a ser editado e diagramado. Mas eu estava pensando em solu\u00e7\u00f5es muito complicadas, imaginando uma interface com banco de dados e outras misturas exot\u00e9ricas. Na verdade, tudo pode ser relativamente f\u00e1cil gra\u00e7as aos padr\u00f5es. Especificamente, gra\u00e7as ao padr\u00e3o XML-RPC. E \u00e0 API implementada em blogs, como a do WordPress.<\/p>\n<p>Com estes padr\u00f5es, basta usar o m\u00f3dulo Python <strong>xmlrpclib <\/strong>para recuperar as informa\u00e7\u00f5es de um post a partir de seu n\u00famero ID. Como no trecho de c\u00f3digo abaixo, que busca num blog WordPress o t\u00edtulo de um post, o nome do autor, o sum\u00e1rio e o restante do post, e insere tudo num quadro de texto previamente selecionado:<!--more--><\/p>\n<pre>import xmlrpclib\r\nloginname = 'seuloginWP'\r\npassword = 'suasenhaWP'\r\npostID = 746   # 746 \u00e9 o ID de um post WP qualquer\r\nserver = xmlrpclib.ServerProxy( \"<a href=\"..\/xmlrpc.php\" target=\"_blank\">http:\/\/meiradarocha.jor.br\/news\/xmlrpc.php<\/a>\" )\r\npost = server.metaWeblog.getPost( postID , loginname,password )\r\nscribus.setText( ', '.join( post['categories'] )+'\\n' )\r\nscribus.insertText( post[ 'title' ]+'\\n',-1)\r\nscribus.insertText( post[ 'wp_author_display_name' ]+'\\n',-1)\r\nscribus.insertText( post[ 'description' ],-1)\r\nscribus.insertText( post[ 'mt_text_more' ],-1)<\/pre>\n<p>Agora, o trabalho de criar um sistema editorial fica muito mais f\u00e1cil. Para facilitar ainda mais, escrevi o script abaixo que importa n\u00e3o s\u00f3 o texto de um post, formatando negritos e it\u00e1licos (gra\u00e7as \u00e0 dica de Aur\u00e9lio A. Heckert para usar o m\u00f3dulo Python HTMLParser), mas tamb\u00e9m importa todas as imagens com legenda que encontrar, dentro da marca\u00e7\u00e3o &#8220;caption&#8221; do WordPress. A legenda da imagem fica como legenda, mesmo, e o t\u00edtulo da imagem \u00e9 importado como cr\u00e9dito da foto.<\/p>\n<p>Depois de importar o texto e as imagens (que ficam empilhadas no  canto inferior direito da p\u00e1gina), pode-se diagramar a mat\u00e9ria com ajuda  dos scripts que montam mat\u00e9rias e fotos, encontrados em outros artigos  neste site.<\/p>\n<h3>To do<\/h3>\n<p>Falta fazer uma melhor interpreta\u00e7\u00e3o de tags HTML, como cria\u00e7\u00e3o de listas numeradas e com bolinhas, cita\u00e7\u00f5es etc. Mas o Scripter do Scribus vai mudar na pr\u00f3xima vers\u00e3o 1.5. Ent\u00e3o, n\u00e3o vale a pena investir nesta vers\u00e3o do script.<\/p>\n<h3>Download<\/h3>\n<p>Baixe o script, tire a termina\u00e7\u00e3o &#8220;.txt&#8221; e coloque  &#8220;.py&#8221; (o WordPress n\u00e3o permite <em>upload<\/em> de programas como scripts Python, por seguran\u00e7a). Edite a vari\u00e1vel <strong>wp_site<\/strong> para apontar ao seu site antes de usar: <a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2010\/01\/Revista-Diagrama-Post-2010-01-25a.txt\">Revista Diagrama Post (2010-01-25a)<\/a><\/p>\n<h3>Caveats<\/h3>\n<p>Embora o conte\u00fado textual seja importado, pode haver problemas de formata\u00e7\u00e3o de it\u00e1licos e negritos e aplica\u00e7\u00e3o de estilos de par\u00e1grafos. Por defici\u00eancias do pr\u00f3prio Scribus (que \u00e9 um programa jovem e ainda tem defici\u00eancia de design) e de meu pr\u00f3prio  algoritmo, os estilos de par\u00e1grafos s\u00e3o aplicados apenas nos t\u00edtulos mas estes trechos n\u00e3o s\u00e3o formatados conforme o estilo aplicado. Bug do Scribus. J\u00e1 o corpo do texto fica no formato de par\u00e1grafo <em>default <\/em>mas sem estilo aplicado. O usu\u00e1rio deve aplicar os estilos de par\u00e1grafo pelo editor de texto interno do Scribus (<strong>pela barra de ferramentas<\/strong>, n\u00e3o pela coluna de estilos \u00e0 esquerda do texto, para n\u00e3o apagar os it\u00e1licos e negritos). Tamb\u00e9m deve, provavelmente, limpar a formata\u00e7\u00e3o dos t\u00edtulos pela aba &#8220;Text&#8221; da paleta de controle do programa (tecla F2).<\/p>\n<p>As fotos importadas devem ser desagrupadas e resselecionadas pela ordem foto-legenda-cr\u00e9dito antes de se aplicar o <a href=\"http:\/\/meiradarocha.jor.br\/news\/2009\/06\/10\/editoracao-com-software-livre-fotos-legendas-e-credito-automatizados-no-scribus\/\">script de redimensionar fotos<\/a>. Outro bug do Scribus.<\/p>\n<h3>Blogger<\/h3>\n<p>Esta t\u00e9cnica tamb\u00e9m pode ser aplicada ao Blogger. Aqui est\u00e1 um exemplo de como acessar posts do Blogger:<\/p>\n<pre><span># <a href=\"http:\/\/code.google.com\/intl\/pt-br\/apis\/blogger\/docs\/1.0\/developers_guide_python.html\">http:\/\/code.google.com\/intl\/pt-BR\/apis\/blogger\/docs\/1.0\/developers_guide_python.html<\/a><\/span>\r\n\r\nimport gdata\r\nimport atom\r\nfrom gdata import service\r\n\r\nblogger_service = service.GDataService('joseantoniorocha@gmail.com', 'xxxxxxxx')\r\nblogger_service.source = 'exampleCo-exampleApp-1.0'\r\nblogger_service.service = 'blogger'\r\nblogger_service.account_type = 'GOOGLE'\r\nblogger_service.server = 'www.blogger.com'\r\nblogger_service.ProgrammaticLogin()\r\n\r\ndef PrintUserBlogTitles(blogger_service):\r\n  query = service.Query()\r\n  query.feed = '\/feeds\/default\/blogs'\r\n  feed = blogger_service.Get(query.ToUri())\r\n  print feed.title.text\r\n  for entry in feed.entry:\r\n  print \"\\t\" + entry.title.text\r\n\r\ndef getBlogId():\r\n  query = service.Query()\r\n  query.feed = '\/feeds\/default\/blogs'\r\n  feed = blogger_service.Get(query.ToUri())\r\n  blog_id = feed.entry[0].GetSelfLink().href.split(\"\/\")[-1]\r\n\r\ndef PrintAllPosts(blogger_service, blog_id):\r\n  feed = blogger_service.GetFeed('\/feeds\/' + blog_id + '\/posts\/default')\r\n\r\n  print feed.title.text\r\n  for entry in feed.entry:\r\n  print \"\\t\" + entry.title.text\r\n  print \"\\t\" + entry.content.text\r\n  print \"\\t\" + entry.updated.text\r\n  print\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\r\ndef PrintPostsInDateRange(blogger_service, blog_id, start_time='2009-01-01', end_time='2010-01-13'):\r\n  query = service.Query()\r\n  query.feed = '\/feeds\/' + blog_id + '\/posts\/default'\r\n  query.published_min = start_time\r\n  query.published_max = end_time\r\n  feed = blogger_service.Get(query.ToUri())\r\n\r\n  print feed.title.text + \" posts between \" + start_time + \" and \" + end_time\r\n  for entry in feed.entry:\r\n  print \"\\t\" + entry.title.text\r\n  print \"\\t\" + entry.content.text\r\n  print \"\\t\" + entry.updated.text\r\n  print\r\n<\/pre>\n<h3>Acabamento Profissional<\/h3>\n<p>Para quem quer uma ferramenta mais &#8220;profissional&#8221;, pode tentar o <a href=\"http:\/\/www.blurb.com\/create\/book\/blogbook\">Blurb Booksmart<\/a>, software que cria um livro inteiro a partir de um blog.<\/p>\n<h3>Bibliografia<\/h3>\n<ol>\n<li><a href=\"http:\/\/codex.wordpress.org\/XML-RPC_Support\" target=\"_blank\">WordPress API support<\/a><\/li>\n<li><a href=\"http:\/\/www.sixapart.com\/developers\/xmlrpc\/movable_type_api\/\" target=\"_blank\">MovebleType API<\/a><\/li>\n<li><a href=\"http:\/\/code.google.com\/intl\/pt-BR\/apis\/gdata\/docs\/2.0\/reference.html\" target=\"_blank\">Google Data Protocol Refeference<\/a><\/li>\n<li><a href=\"http:\/\/www.xmlrpc.com\/metaWeblogApi\" target=\"_blank\">MetaBlog API<\/a><\/li>\n<li><a href=\"http:\/\/code.google.com\/intl\/pt-BR\/apis\/blogger\/docs\/1.0\/developers_guide_python.html\">Blogger API<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Este artigo mostra como importar texto e imagens do CMS de blogs WordPress para o programa livre de editora\u00e7\u00e3o Scribus. H\u00e1 tempos estou pensando sobre um sistema editorial que auxilie [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,25,15,14,16],"tags":[],"class_list":["post-951","post","type-post","status-publish","format-standard","hentry","category-design-grafico","category-diagramacao","category-editoracao","category-python","category-scribus"],"_links":{"self":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts\/951","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/comments?post=951"}],"version-history":[{"count":0,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts\/951\/revisions"}],"wp:attachment":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/media?parent=951"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/categories?post=951"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/tags?post=951"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}