Archive

Archive for December, 2007

Pegando notícias de outros sites

December 30th, 2007

Galera vou postar aqui um pequeno código que eu fiz para pegar
notícias a partir do RSS de outros sites e gravar em sua base de dados.

Sempre lembrando que é importante dizer qual foi a fonte da informação, pois assim você não violará nenhum direito autoral.

Bom, vamos ao que interessa, o código.

Listagem 1: Classe responsável por pegar o RSS e transformar em um array com os dados

PHP:
  1. <?php
  2. /*
  3. ======================================================================
  4. lastRSS 0.9.1
  5. Simple yet powerfull PHP class to parse RSS files.
  6. by Vojtech Semecky, webmaster @ webdot . cz
  7. Latest version, features, manual and examples:
  8. http://lastrss.webdot.cz/
  9. ———————————————————————-
  10. LICENSE
  11. This program is free software; you can redistribute it and/or
  12. modify it under the terms of the GNU General Public License (GPL)
  13. as published by the Free Software Foundation; either version 2
  14. of the License, or (at your option) any later version.
  15. This program is distributed in the hope that it will be useful,
  16. but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. GNU General Public License for more details.
  19. To read the license please visit http://www.gnu.org/copyleft/gpl.html
  20. ======================================================================
  21. */
  22.  
  23. /**
  24. * lastRSS
  25. * Simple yet powerfull PHP class to parse RSS files.
  26. */
  27. class xmlWeb {
  28. // ——————————————————————-
  29. // Public properties
  30. // ——————————————————————-
  31. var $default_cp = ‘UTF-8′;
  32. var $CDATA = ‘nochange’;
  33. var $cp = ;
  34. var $items_limit = 0;
  35. var $stripHTML = False;
  36. var $date_format = ;
  37.  
  38. // ——————————————————————-
  39. // Private variables
  40. // ——————————————————————-
  41. var $channeltags = array (‘title’, ‘link’, ‘description’, ‘language’, ‘copyright’, ‘managingEditor’, ‘webMaster’, ‘lastBuildDate’, ‘rating’, ‘docs’);
  42. var $itemtags = array(‘title’, ‘link’, ‘description’, ‘author’, ‘category’, ‘comments’, ‘enclosure’, ‘guid’, ‘pubDate’, ’source’);
  43. var $imagetags = array(‘title’, ‘url’, ‘link’, ‘width’, ‘height’);
  44. var $textinputtags = array(‘title’, ‘description’, ‘name’, ‘link’);
  45.  
  46. // ——————————————————————-
  47. // Parse RSS file and returns associative array.
  48. // ——————————————————————-
  49. function Get ($rss_url) {
  50. // If CACHE ENABLED
  51. if ($this->cache_dir != ) {
  52. $cache_file = $this->cache_dir . ‘/rsscache_’ . md5($rss_url);
  53. $timedif = @(time() - filemtime($cache_file));
  54. if ($timedif <$this->cache_time) {
  55. // cached file is fresh enough, return cached array
  56. $result = unserialize(join(, file($cache_file)));
  57. // set ‘cached’ to 1 only if cached file is correct
  58. if ($result) $result[‘cached’] = 1;
  59. } else {
  60. // cached file is too old, create new
  61. $result = $this->Parse($rss_url);
  62. $serialized = serialize($result);
  63. if ($f = @fopen($cache_file, ‘w’)) {
  64. fwrite ($f, $serialized, strlen($serialized));
  65. fclose($f);
  66. }
  67. if ($result) $result[‘cached’] = 0;
  68. }
  69. }
  70. // If CACHE DISABLED>> load and parse the file directly
  71. else {
  72. $result = $this->Parse($rss_url);
  73. if ($result) $result[‘cached’] = 0;
  74. }
  75. // return result
  76. return $result;
  77. }
  78.  
  79. // ——————————————————————-
  80. // Modification of preg_match(); return trimed field with index 1
  81. // from ‘classic’ preg_match() array output
  82. // ——————————————————————-
  83. function my_preg_match ($pattern, $subject) {
  84. // start regullar expression
  85. preg_match($pattern, $subject, $out);
  86.  
  87. // if there is some result… process it and return it
  88. if(isset($out[1])) {
  89. // Process CDATA (if present)
  90. if ($this->CDATA == ‘content’) { // Get CDATA content (without CDATA tag)
  91. $out[1] = strtr($out[1], array(‘<![CDATA['=>'', ']]>’=>));
  92. } elseif ($this->CDATA == ’strip’) { // Strip CDATA
  93. $out[1] = strtr($out[1], array(‘<![CDATA['=>'', ']]>’=>));
  94. }
  95.  
  96. // If code page is set convert character encoding to required
  97. if ($this->cp != )
  98. //$out[1] = $this->MyConvertEncoding($this->rsscp, $this->cp, $out[1]);
  99. $out[1] = iconv($this->rsscp, $this->cp.‘//TRANSLIT’, $out[1]);
  100. // Return result
  101. return trim($out[1]);
  102. } else {
  103. // if there is NO result, return empty string
  104. return ;
  105. }
  106. }
  107.  
  108. // ——————————————————————-
  109. // Replace HTML entities &something; by real characters
  110. // ——————————————————————-
  111. function unhtmlentities ($string) {
  112. // Get HTML entities table
  113. $trans_tbl = get_html_translation_table (HTML_ENTITIES, ENT_QUOTES);
  114. // Flip keys<==>values
  115. $trans_tbl = array_flip ($trans_tbl);
  116. // Add support for ‘ entity (missing in HTML_ENTITIES)
  117. $trans_tbl += array(‘ => "’“);
  118. // Replace entities by values
  119. return strtr ($string, $trans_tbl);
  120. }
  121. // ——————————————————————-
  122. // Parse() is private method used by Get() to load and parse RSS file.
  123. // Don’t use Parse() in your scripts - use Get($rss_file) instead.
  124. // ——————————————————————-
  125. function Parse ($rss_url) {
  126. // Open and load RSS file
  127. if ($f = @fopen($rss_url, ‘r’)) {
  128. $rss_content = ”;
  129. while (!feof($f)) {
  130. $rss_content .= fgets($f, 4096);
  131. }
  132. fclose($f);
  133. // Parse document encoding
  134. $result['encoding'] = $this->my_preg_match(”‘encoding=[\'\"](.*?)[\'\"]‘si“, $rss_content);
  135. // if document codepage is specified, use it
  136. if ($result['encoding'] != ”)
  137. { $this->rsscp = $result['encoding']; } // This is used in my_preg_match()
  138. // otherwise use the default codepage
  139. else
  140. { $this->rsscp = $this->default_cp; } // This is used in my_preg_match()
  141. // Parse CHANNEL info
  142. preg_match(”‘<channel.*?>(.*?)</channel>’si“, $rss_content, $out_channel);
  143. foreach($this->channeltags as $channeltag)
  144. {
  145. $temp = $this->my_preg_match(”‘<$channeltag.*?>(.*?)</$channeltag>’si“, $out_channel[1]);
  146. if ($temp != ”) $result[$channeltag] = $temp; // Set only if not empty
  147. }
  148. // If date_format is specified and lastBuildDate is valid
  149. if ($this->date_format != ” && ($timestamp = strtotime($result['lastBuildDate'])) !==-1) {
  150. // convert lastBuildDate to specified date format
  151. $result['lastBuildDate'] = date($this->date_format, $timestamp);
  152. }
  153. // Parse TEXTINPUT info
  154. preg_match(”‘<textinput(|[^>]*[^/])>(.*?)</textinput>’si“, $rss_content, $out_textinfo);
  155. // This a little strange regexp means:
  156. // Look for tag <textinput> with or without any attributes, but skip truncated version <textinput /> (it’s not beggining tag)
  157. if (isset($out_textinfo[2])) {
  158. foreach($this->textinputtags as $textinputtag) {
  159. $temp = $this->my_preg_match(”‘<$textinputtag.*?>(.*?)</$textinputtag>’si“, $out_textinfo[2]);
  160. if ($temp != ”) $result['textinput_'.$textinputtag] = $temp; // Set only if not empty
  161. }
  162. }
  163. // Parse IMAGE info
  164. preg_match(”‘<image.*?>(.*?)</image>’si“, $rss_content, $out_imageinfo);
  165. if (isset($out_imageinfo[1])) {
  166. foreach($this->imagetags as $imagetag) {
  167. $temp = $this->my_preg_match(”‘<$imagetag.*?>(.*?)</$imagetag>’si“, $out_imageinfo[1]);
  168. if ($temp != ”) $result['image_'.$imagetag] = $temp; // Set only if not empty
  169. }
  170. }
  171. // Parse ITEMS
  172. preg_match_all(”‘<item(| .*?)>(.*?)</item>’si“, $rss_content, $items);
  173. $rss_items = $items[2];
  174. $i = 0;
  175. $result['items'] = array(); // create array even if there are no items
  176. foreach($rss_items as $rss_item) {
  177. // If number of items is lower then limit: Parse one item
  178. if ($i <$this->items_limit || $this->items_limit == 0) {
  179. foreach($this->itemtags as $itemtag) {
  180. $temp = $this->my_preg_match(”‘<$itemtag.*?>(.*?)</$itemtag>’si“, $rss_item);
  181. if ($temp != ”) $result['items'][$i][$itemtag] = $temp; // Set only if not empty
  182. }
  183. // Strip HTML tags and other bullshit from DESCRIPTION
  184. if ($this->stripHTML && $result['items'][$i]['description'])
  185. $result['items'][$i]['description'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['description'])));
  186. // Strip HTML tags and other bullshit from TITLE
  187. if ($this->stripHTML && $result['items'][$i]['title'])
  188. $result['items'][$i]['title'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['title'])));
  189. // If date_format is specified and pubDate is valid
  190. if ($this->date_format != ” && ($timestamp = strtotime($result['items'][$i]['pubDate'])) !==-1) {
  191. // convert pubDate to specified date format
  192. $result['items'][$i]['pubDate'] = date($this->date_format, $timestamp);
  193. }
  194. // Item counter
  195. $i++;
  196. }
  197. }
  198. $result['items_count'] = $i;
  199. return $result;
  200. }
  201. else // Error in opening return False
  202. {
  203. return False;
  204. }
  205. }
  206. }
  207. ?>

Listagem 2: Exemplo de uso da classe do RSS

PHP:
  1. <?
  2. require_once “xmlWeb.php”;
  3.  
  4. //abre a classe responsavel por ler o rss diretamente na web
  5. $rss = new xmlWeb();
  6.  
  7. //url de onde serao pegas as noticias
  8. //caso queira outro local é só trocar a url, isso se o site estiver no padrao rss de noticias
  9. $site = $rss->Get(“http://idgnow.uol.com.br/internet/RSS2″);
  10.  
  11. //pega o nome da fonte
  12. $fonte = $site[‘title’];
  13.  
  14. //faz um loop no array e grava as noticias dentro do mysql
  15. foreach ($site[‘items’] as $xml  ) {
  16.  
  17. //pega o título da noticia
  18. $titulo = $xml[‘title’];
  19.  
  20. //pega o link para abrir a noticia dentro do site fonte
  21. $link = $xml[‘link’];
  22.  
  23. //pega a data em que a noticia foi publicada
  24. $data = date(‘Y-m-d H:i’, strtotime($xml[‘pubDate’]));
  25.  
  26. //pega o texto da noticia
  27. $noticia = $xml[‘description’];
  28.  
  29. //conexão com o banco de dados
  30. $conexao = mysql_pconnect(“localhost”,“root”,“senhasecreta”);
  31. mysql_select_db(“rss”,$conexao);
  32.  
  33. //inserindo os dados dentro do banco de dados
  34. $sql = “insert into noticia (fonte, titulo, link, data, noticia) values (”;
  35. $sql .= “‘” . $fonte . “‘,”;
  36. $sql .= “‘” . $titulo . “‘,”;
  37. $sql .= “‘” . $link . “‘,”;
  38. $sql .= “‘” . $data . “‘,”;
  39. $sql .= “‘” . $noticia . “‘)”;
  40.  
  41. mysql_query($sql, $conexao);
  42.  
  43. //pronto desta forma vc terá a noticia dentro do seu banco de dados simples não
  44. }
  45.  
  46. echo “Fim do programa”;
  47.  
  48. ?>

Valew galera, que todos tenham um ótimo fim de ano, tenham muita paz, muita saúde e é claro, muito dinheiro no bolso.

Powered by ScribeFire.

php, xml

Votação 4Linux

December 25th, 2007

Pessoal me ajudem a ganhar um eeePc.
Está rolando uma promoção da 4Linux respondendo a pergunta: Onde mais o Linux deveria rodar? A reposta mais votada ganha um eeePc da Asus.

Votem: http://promo.4linux.com.br/resposta/1673

Abraço a todos e Feliz Natal!!!

Powered by ScribeFire.

outros

Dicas Netbeans 6

December 21st, 2007

Galera vou mandar uma dica do Netbeans muito legal que descobri de sem querer, fui usar uma tecla de atalho que eu sempre que é Shift+Insert que é nada mais é que o colar, eu prefiro usar assim do que control+V, onde usando o Netbeans 6 fui colocar um conteúdo sendo que eu de sem querer apertei ALT+INSERT, para minha surpresa apareceu um menu da seguinte maneira:

Simplesmente com esta telinha podemos rapidamente criar métodos getters e setters mais rápidamente, podemos alterar o construtor da classe, criar métodos equals() ou hashCode() e etc.

Com certeza é de muita utilidade para muita gente.

Abraços e até a próxima.

Powered by ScribeFire.

java

Como fazer o cliente investir em um projeto web de qualidade com todos os recursos e padrões necessários, quando há gente por aí desenvolvendo sites a R$ 500,00?

December 21st, 2007

Há dois pontos interessantes nessa pergunta.

O primeiro é que nem todo negócio necessita de um website. O Sr. Manoel da quitanda da esquina talvez não precise realmente de um website. Opa pera ai, vou explicar melhor, quero dizer que ele, o Sr. Manoel, acha que não precisa aiiiiinda de um projeto web. Pode ser que isso venha a mudar num futuro próximo, mas hoje talvez parte do problema seja que você está tentando vender um website para alguém que realmente não precisa de um.

Esse ponto nos leva a um outro mais interessante:

Ninguém está interessado em comprar esse negócio de website aí. Ninguém compra website. Se você vende website, está vendendo alguma coisa que ninguém quer comprar, e seus clientes vão achar caro mesmo. Ninguém compra website, ninguém compra sistema, ninguém compra e-commerce. Essa é a mais dura verdade que uma empresa especializada na área pode ouvir. Sabe o que se passa na cabeça do seu prospect quando você oferece a ele um a solução de e-commerce por, digamos, *R$ 30.000,00?

“Por esse dinheiro eu coloco dois operadores de telemarketing para trabalhar aqui por um ano.”

“Hummm, é o preço de uma boa reforma para a minha loja.”

“Por que eu deveria pagar por isso mesmo?”

O irmão de uma amigo meu faz muito mais barato”

Padrões web, usabilidade, acessibilidade, tecnologias, tudo isso tem um custo, mas não é isso que seu futuro cliente vai comprar de você. Em nosso exemplo, uma possível solução de e-commerce, ele estará comprando um vendedor. Um vendedor que trabalhará 24 horas por dia, 7 dias por semana e que não vai ficar doente ou abrir um processo trabalhista, um vendedor que pode atender milhares de pessoas simultaneamente. Isso tudo é uma questão de números, R$ 30.000,00 pode ser muito barato se você puder mostrar ao seu futuro cliente que vale a pena. Não estou aqui desmerecendo de forma alguma o trabalho humano, só tentando provar que esse tipo de pensamento não é válido. É quase a mesma coisa que dizer o seguinte: “Poxa, por R$70.000,00 ao invés de eu comprar esse carro importado que eu tanto sonhei, poderia comprar 2 populares”.

E-commerce não é simplesmente um paradigma de modernidade. É uma realidade, um nova maneira de fazer negócio, um novo modo de utilizar a tecnologia e uma nova forma de construir empresas. Se você ainda não convenceu o seu prospect que ele deveria investir em um projeto web, mesmo que seja um projeto simples para dar o primeiro passo neste gigantesco mundo de possibilidades de negócios, coloco aqui um caso de sucesso, uma empresa 100% do mundo digital, o Submarino.com.br

O Submarino é a maior empresa de varejo de bens de consumo em vendas ao consumidor (B2C) segundo o INFO100, levantamento realizado pela revista InfoExame. A varejista on-line é a primeira colocada do ranking (cujas vendas no ano passado cresceram 59%, atingindo 245,2 milhões de dólares), em comparação com Magazine Luíza, Ponto Frio, Livraria Saraiva, ShopTime, entre outras.

O volume de dinheiro movimentado pelo e-commerce cresceu 30,6% no ano passado, atingindo 65,3 bilhões de dólares. Trata-se de um saldo 13,3 vezes maior que o PIB, que ficou em 2,3%. O levantamento lista os 100 maiores nomes das transações online do país, compondo um ranking com 50 empresas líderes em operações B2C, diretas ao consumidor, e 50 em negócios B2B, de empresa

* Você provavelmente deve ter entendido que eu não estou dizendo que um e-commerce deva custar R$ 30.000,00. Esse é um preço hipotético. Um e-commerce pode custar R$ 4.500,00 ou R$ 250.000,00, e esse não é o nosso assunto aqui.

e-commerce , , , , ,

Casal mata irmã simulando o jogo Mortal kombat

December 20th, 2007

mortal_combat2.jpg

Um assunto meio que off-topic, porém importante para quem trabalha e vive no mundo digital. Chega ser ridículo ver que certos seres humanos confundem um simples game com a realidade. Tendo inclusive casos em que a confusão leva a morte de terceiros.

Em 6 de dezembro uma menina de 7 anos chamada Zoe Garcia estava em casa com a irmã mais velha, Heather Trujillo, de 16 anos e o namorado Lamar Roberts de 17.
Eles encheram a cara e resolveram encenar o jogo Mortal Kombat e por a irmãzinha na roda.

Eles encheram ela de porrada a ponto de quebrar o pulso da menina. O namorado, que se diz ser expert em artes marciais contou que a Zoe pediu para ele parar, mas como estava muito bêbado, não obedeceu e resolveu dar um bicão na menina, que caiu e não levantou mais. Os namorados tentaram revive-la varias vezes e não conseguiram. A causa da morte foi “traumatismo por concussão”, que danificou o cérebro e sistema nervoso central.

O histórico da familia também mostrou casos de abuso em casa, e que Zoe havia contado a uma outra babá que Lamar batia nela. Vizinhos comentaram que ela brincava sozinha e não gostava de voltar para casa.

O Lamar e a Heather foram presos na terça acusados de abuso infantil resultando em morte.

outros

Ferramentas

December 19th, 2007

Depois de uma semana de blog, resolví fazer o meu primeiro post. O assunto que venho escrever hoje é sobre ferramentas.

Nesse post falarei um pouco sobre quais ferramentas utilizo para desenvolver, tanto os layouts e banners, quanto as páginas em html e as folhas de estilo.

Acredito que faça uns 5 anos quando eu tive meu primeiro contato com o Dreamweaver, software que utilizei como editor de html e css até o final de 2006. Há 4 anos eu tive meu primeiro contato com um programa profissional de edição de imagens que na época foi Fireworks. Após algum tempo tive contato com o Photoshop e o Flash.

Anos se passaram e na verdade as ferramentas não mudaram muito. O Dreamweaver como eu disse, foi deixado de lado e substituído pelo Textmate e o CSS Edit, ambos softwares utilizo até hoje como editores de html e css respectivamente.

Falando de editores de imagens, até hoje ainda costumo utilizar com mais frequencia o Fireworks que na minha modesta opinião dá um banho no Photoshop em relação a facilidade de manipulação de formas (escalar, rotacionar..), o que consecutivamente ajuda muito na criação de um layout de um website. Resumindo, o Fireworks é minha ferramenta titular para criação de layouts desde 2004. O Photoshop sempre me serviu mais para recursos como o Automate Batch na hora de redimensionar e tratar centenas de imagens em pouco tempo, porém estou adotando-o como ferramenta principal para a criação de banners. O website da Ramada por exemplo, todos seus banners foram feitos utilizando Photoshop, e por um motivo que ainda não sei explicar, em geral são bem mais bonitos que os antigos feitos no Fireworks. Logo, para mim é: Fireworks para layouts de websites e Photoshop para banners.

Agora para finalizar, sobre ferramentas de desenho, já tive a oportunidade de mexer com o Corel Draw, Inkscape, Illustrator e Freehand. Desses 4 os que mais gostei foi o Illustrator e Inkscape. Nunca fui fã do Corel, acho um software horrível de se trabalhar e o fato da Corel ter abandonado a plataforma Mac parando da versão 11, parece que é uma prova de desistência diante do Illustrator que hoje está na sua versão CS3. Hoje para mim só existem 2 boas opções de ferramentas desse tipo, uma é o Inkscape e a outra é o Illustrator. Como o Inkscape ainda não possui sua versão nativa pro MacOSX (necessita do X11), a ferramenta que adotei como definitiva é o Illustrator.

Essas são as minhas ferramentas de trabalho: Flash, Fireworks, Photoshop, Illustrator, Textmate e CSS Edit, nenhuma mais e nenhuma menos. É isso, até a próxima.

Abraços!

CSS, Design, html

Ótimo site JAVA

December 17th, 2007

Ótimo site para pesquisa sobre Java, neste site podemos encontrar diversos exemplos de código feito em diversas linguagens, principalmente Java é claro… rsrsrs.
Espero que seja útil para todos.

http://www.java2s.com/

Abraço

Powered by ScribeFire.

java

Evoluir digitalmente é o desafio desse novo tempo

December 13th, 2007

Estamos vivendo em uma espécie de grande guerra do novo mundo digital contra o velho mundo pós-industrial. E nessa disputa as empresas tradicionais têm que aprender a pensar e agir digitalmente, adaptando-se ao meio e prosperando em um contexto diferente daquele já conhecido.

E-commerce não é simplesmente um paradigma de modernidade. É uma realidade, um nova maneira de fazer negócio, um novo modo de utilizar a tecnologia e uma nova forma de construir empresas.

Uma pesquisa feita por uma das mais famosas empresas de consultoria, a McKinsey, compreendendo as mil maiores empresas americanas nos últimos 30 anos, informa que, quanto mais antiga uma empresa, menor é sua capacidade competitiva e de desempenho em relação ao mercado.

Acredite que a Internet pode ser utilizada para aumentar a eficiência dos processos de negócio”.

Nós acreditamos que vivemos no melhor momento da história da humanidade. A internet e o comércio eletrônico não são modismos, mas ferramentas que vieram para mudar a história, redesenhar modelos de negócios, derrubar fronteiras entre parceiros e estreitar o relacionamento entre as pessoas.

Construir um website na maioria das vezes é uma tarefa fácil, por isso muita gente com pouco conhecimento em programação e designer está fazendo hoje, qualquer empresa pode ter o seu website pagando alguns R$800,00, o difícil é o projeto ficar competitivo para o mercado. Construir um projeto de e-commerce tem que ir além de simplesmente ter um endereço na internet, tem que ter um planejamento estratégico, modificações no sistema atual e até mudanças de processos dentro da empresa. Uma empresa de desenvolvimento de websites hoje tem que oferecer todas essas condições para que seus projetos cheguem a ter sucesso neste imenso mundo digital.

Para ter um projeto de e-commerce de sucesso, comece com uma combinação de domínio técnico em áreas como Websites, redes e comunicações. Acrescente conhecimento em administração de negócios e logística. Misture algumas habilidades em design, conteúdo de informação, programação, inovação, estratégia e marketing. Depois, atualize constantemente todas essas habilidades, à medida que novos avanços vão surgindo. Agora, você está pronto para criar ou colocar em operação uma empresa de e-commerce bem-sucedida.

e-commerce , , ,

iReport para Netbeans 6

December 13th, 2007

Lançada a versão beta do “iReport designer for
JasperReports” plugins NetBeans 6.0 platform, com lançamento final para
Fevereiro de 2008.

http://www.jasperforge.org/jaspersoft/opensource/b…report/page.php?name=iReportNB

http://plugins.netbeans.org/PluginPortal/faces/Plu…inDetailPage.jsp?pluginid=4425

Fonte: GUJ (www.guj.com.br)

Powered by ScribeFire.

java

Criando seus próprios Boletos Bancários

December 12th, 2007

Este artigo irá introduzir o desenvolvedor a criar um pequeno código que o ajudará a criar boletos de cobrança. Quase todos os programadores passam pelo menos uma vez em sua carreira com a terrível tarefa de fazer o seu sistema gerar boletos bancários.

A inclusão de um sistema de emissão, envio e impressão de boleto de cobrança em um sistema interno de uma empresa é fundamental e requer um trabalhoso levantamento de dados para para gerar alguns campos (código de barras e a linha digitável por ex.), ainda mais se o sistema tiver que ter a opção de gerar boletos de cobrança para mais de um banco, pois cada banco tem uma forma de trabalhar diferente com esses números.

Introdução

O sistema de boleto bancário é indispensável para qualquer atividade comercial. O pagamento via boleto é muito prático e seguro para o consumidor e pouco oneroso para o empresário, se comparado ao cartão de crédito que tem uma taxa de juros muito maior, pois no boleto bancário é cobrado uma taxa fixa para cada boleto, esta taxa é negociada com o gerente do seu banco, a média desta taxa é mais ou menos de R$ 2,50, enquanto o cartão de crédito é uma porcentagem em cima do valor cobrado.
“Infelizmente os sistemas bancários não possuem padrão único para elaboração de seus boletos de cobrança gerando assim um desperdício enorme na hora do desenvolvimento. Outra coisa é os sistemas de impressão de boleto que cada banco oferece aos seus clientes que em sua maioria são muito pobres em suas funcionalidades para médias e grandes empresas que necessitam de uma larga escala de impressão.” Diz Márcio Morais Presidente da Kobi System.
Passando por este problema, a Kobi System, onde trabalha Fabio Souza decidiu criar um componente próprio para gerar boletos de cobrança para seus clientes. Evitando assim ficar dependendo de empresas terceirizadas que fazem este tipo de trabalho. Encubido de realizar esta tarefa, Fabio Souza defensor do desenvolvimento e da filosofia do Software Livre, decidiu criar este componente em código aberto (OpenSource) e licenciá-lo sob a GNU LGPL. Com isso nenhuma outra empresa passaria por tal problema e poderia a ter os seus boletos personalizados não ficando preso a nenhum tecnologia fechada.
O JBoleto é um excelente componente de fácil instalação e utilização, bastando incluir no CLASSPATH do projeto que em poucos minutos você estará gerando os seus boletos de cobrança.
Além disso o programador poderá contar com o suporte oferecido pelo próprio site do JBoleto (www.jboleto.org) que deixa aberto um Fórum para a colaboração de todos os usuários que utilizam o componente.

Como colaborar com o Jboleto:

  • Desenvolvendo um boleto de um determinado banco que ainda não tenha sido incluído no componente;
  • Fazendo doações para manter o projeto ativo ou para ajudar no crescimento do projeto. As doações podem ser de diversas maneiras: em dinheiro, com equipamentos e etc;
  • Criando documentações e exemplos : Irá funcionar como no tópico acima, o colaborador nos envia um e-mail (documentacao@jboleto.org) e após uma avaliação colocaremos no site.

Baixando os componentes necessários
O artigo doi desenvolvido utilizando as seguintes recursos:
Java SE 6
Componente JBoleto
iText

Obtendo a biblioteca JBoleto
A biblioteca Jboleto é a responsável por realizar todas lógicas para se gerar um boleto de cobrança.
Para obter o pacote da biblioteca JBoleto, você deverá se cadastrar e se logar no site http://www.jboleto.org . Feito isso clicar no link Downloads encontrada na parte superior do site. Dentro desta tela você deve clicar em cima do arquivo jboleto-0.9.6.jar e salva-lo em uma pasta qualquer do seu computador.

Obtendo a biblioteca iText
A biblioteca iText é a responsável por gerar os boletos de cobrança no formato PDF da Adobe.
Para obter o pacote da biblioteca iText basta acessar o site http://www.lowagie.com/iText/download.html e baixar o arquivo itext-2.0.4.jar e salva-lo na mesma pasta onde foi salvo o Jboleto.

Dados Bancários
Caso o programador tenha interesse em gerar um boleto específico para algum banco que não tenha no componente, ele tem seguir apenas os seguintes passos.
Entrar em contato com o gerente de sua conta para pedir a liberação de sua conta para poder receber cobranças a partir de boletos. Esta conta pode ser de pessoa física ou jurídica, qualquer um destes tipos pode ter este recurso.
Logo depois peça a documentação com os procedimentos necessários com as especificações de cada campo do boleto, normalmente o que muda de um banco para outro é código de barras e a linha digitável. Lembrando, cada banco tem a sua própria maneira de gerar determinados campos, principalmente os citados anteriormente.
Todo banco é obrigado a fornecer esta documentação, pois os bancos não possuem recursos suficientes que o ajudem a controlar seu boletos com facilidade.

Listagem 1:

JAVA:
  1. package jboleto;
  2.  
  3. import java.util.Vector;
  4. import org.jboleto.JBoleto;
  5. import org.jboleto.JBoletoBean;
  6.  
  7. public class GeraBoletoItau {
  8.  
  9.     public static void main (String[] args) {
  10.  
  11.         JBoletoBean jBoletoBean = new JBoletoBean();
  12.  
  13.         jBoletoBean.setDataDocumento(“09/08/2007″);
  14.         jBoletoBean.setDataProcessamento(“09/08/2007″);
  15.  
  16.         jBoletoBean.setCedente(“Kobi Consultoria”);
  17.         jBoletoBean.setCarteira(175);
  18.  
  19.         jBoletoBean.setNomeSacado(“Fabio Souza”);
  20.         jBoletoBean.setEnderecoSacado(“Av. das Américas 10101);
  21.         jBoletoBean.setBairroSacado(“Barra da Titjuca”);
  22.         jBoletoBean.setCidadeSacado(“Rio de Janeiro”);
  23.         jBoletoBean.setUfSacado(“RJ”);
  24.         jBoletoBean.setCepSacado(22753-212);
  25.         jBoletoBean.setCpfSacado(09876634567);
  26.  
  27.         jBoletoBean.setDataVencimento(05/10/1980);
  28.         jBoletoBean.setInstrucao1(“Após o vencimento cobrar 2% de juros.”);
  29.         jBoletoBean.setInstrucao2(“Após o vencimento cobrar R$ 0,50 centavos de mora por dia.”);
  30.  
  31.         jBoletoBean.setAgencia(2971);
  32.         jBoletoBean.setContaCorrente(08690);
  33.         jBoletoBean.setDvContaCorrente(1);
  34.  
  35.         jBoletoBean.setNossoNumero(123456”,8);
  36.         jBoletoBean.setValorBoleto(580.45);
  37.  
  38.         Vector descricoes = new Vector();
  39.         descricoes.add(“”);
  40.         jBoletoBean.setDescricoes(descricoes);
  41.  
  42.         JBoleto jBoleto = new JBoleto();
  43.  
  44.         jBoleto.addBoleto(jBoletoBean,JBoleto.ITAU);
  45.         jBoleto.writeToFile(“itau.pdf”);
  46.  
  47.         try {
  48.             File arq = new File(“itau.pdf”);
  49.             Desktop desk = Desktop.getDesktop();
  50.             desk.open(arq);
  51.         }
  52.         catch (Exception e) {
  53.             e.printStackTrace();
  54.         }
  55.     }
  56. }

Listagem 2 – Pequeno Servlet para gerar um boleto on-line

JAVA:
  1. import java.io.BufferedInputStream;
  2. import java.io.IOException;
  3. import java.io.OutputStream;
  4. import java.net.URL;
  5. import java.util.Vector;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import org.jboleto.JBoletoBean;</code>
  11.  
  12. public class JBoleto extends HttpServlet {
  13.  
  14.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
  15.  
  16.         JBoletoBean jBoletoBean = new JBoletoBean();
  17.  
  18.         jBoletoBean.setDataDocumento(“09/08/2007″);
  19.         jBoletoBean.setDataProcessamento(“09/08/2007″);
  20.  
  21.         jBoletoBean.setCedente(“Kobi Consultoria”);
  22.         jBoletoBean.setCarteira(“175″);
  23.  
  24.         jBoletoBean.setNomeSacado(“Fabio Souza”);
  25.         jBoletoBean.setEnderecoSacado(“Av. das Américas 10101″);
  26.         jBoletoBean.setBairroSacado(“Barra da Titjuca”);
  27.         jBoletoBean.setCidadeSacado(“Rio de Janeiro”);
  28.         jBoletoBean.setUfSacado(“RJ”);
  29.         jBoletoBean.setCepSacado(“22753-212″);
  30.         jBoletoBean.setCpfSacado(“09876634567″);
  31.  
  32.         jBoletoBean.setDataVencimento(“05/10/1980″);
  33.         jBoletoBean.setInstrucao1(“Após o vencimento cobrar 2% de juros.”);
  34.         jBoletoBean.setInstrucao2(“Após o vencimento cobrar R$ 0,50 centavos de mora por dia.”);
  35.  
  36.         jBoletoBean.setAgencia(“2971″);
  37.         jBoletoBean.setContaCorrente(“08690″);
  38.         jBoletoBean.setDvContaCorrente(“1″);
  39.  
  40.         jBoletoBean.setNossoNumero(“123456″,8);
  41.         jBoletoBean.setValorBoleto(“580.45″);
  42.  
  43.         Vector descricoes = new Vector();
  44.         descricoes.add(“”);
  45.         jBoletoBean.setDescricoes(descricoes);
  46.  
  47.         org.jboleto.JBoleto jBoleto = new org.jboleto.JBoleto();
  48.  
  49.         jBoleto.addBoleto(jBoletoBean,org.jboleto.JBoleto.ITAU);
  50.         jBoleto.writeToFile(“itau.pdf”);
  51.  
  52.         URL url = request.getSession().getServletContext().getResource(“/itau.pdf”);
  53.         BufferedInputStream leitor = new BufferedInputStream( url.openStream(), 4 * 1024 );
  54.  
  55.         OutputStream escritor = response.getOutputStream();
  56.  
  57.         byte[] buffer = new byte[ 4 * 1024 ];
  58.         int size = 0;
  59.  
  60.         while( ( size = leitor.read( buffer, 0, buffer.length ) ) != -1 ) {
  61.             escritor.write( buffer, 0, size );
  62.         }
  63.  
  64.         escritor.close();
  65.         leitor.close();
  66.     }
  67. }

Casos de Uso
Após a introdução do JBoleto no mercado, empresas de médio e grande porte já utilizam o boleto em suas transações via comércio eletrônico. É o caso da Ramada, que é uma distribuidora de materiais de construção, que gera uma média 350 boletos por dia para serem enviados junto as suas notas fiscais. Temos também uma empresa de grande nome que é a Caelum, empresa especializada em treinamento Java que utiliza o Jboleto diariamente, imprimindo uma média de 20 à 60 boletos dia. Existem diversas outras empresas que tem usado o JBoleto como mecanismo de geração de boletos de cobrança, algumas delas podem ser conferidas no site.

Considerações Finais
Após o término deste artigo o programa deve ser capaz de gerar um boleto de cobrança do banco Itaú.
Claro que o nosso pequeno programa, não é para fazer um controle total de boletos, e sim para dar uma idéia do que se pode fazer com o componente.
A minha filosofia e da Kobi System é compartilhar nossas soluções, acreditamos que estamos na era do Software Livre, ou seja, do progresso da tecnologia de desenvolvimento. Já recebemos algumas colaborações no código fonte de programadores de vários locais do Brasil e sem dúvida o componente será de grande utilidade para para todas as empresas.

Referências
http://www.jboleto.org
http://www.kobi.com.br

java