Histórico da categoria ‘xml’

Linguagens de programação

Monday, August 11th, 2008

Fonte: VidaGeek.net

Índice de Linguagens de programação

  1. Linguagens de programação

Linguagens de programaçãoUma pergunta bastante relevante que surge na cabeça de quase todos os programadores certa hora da vida é: por que existem tantas linguagens de programação? Outra bastante comum é: qual delas é melhor? Alguém poderia responder: existem tantas porque uma vem para corrigir as falhas das outras, e a melhor é a que tem menos falhas. Certo? Errado.

Na Wikipédia, há uma lista com mais de uma centena de linguagens de programação. Será que todas elas surgiram para sanar problemas umas das outras? Se olharmos o histórico de surgimento de cada linguagem de programação, veremos que a maioria surgiu para sanar uma necessidade diferente numa determinada área. Isso já nos dá uma pista de qual delas é melhor.

Vamos começar analisando um exemplo famoso: Java. Java nasceu para substituir C e C++? Não. Java nasceu por causa da Orientação a Objetos? Não mesmo! Por que, então, Java nasceu? Nasceu pela necessidade de uma linguagem portável (cujos programas rodassem em plataformas diferentes sem necessidade de alterações). Mas já não existiam linguagens assim? Sim, existiam, mas não com esse enfoque. LISP, Smalltalk e Perl, por exemplo, são linguagens portáveis, assim como Java. Mas LISP, por exemplo, tem um paradigma de programação totalmente diferente. Smalltalk e Perl, um escopo diferente. Smalltalk, por exemplo, nasceu com o objetivo de tornar a programação mais intuitiva. Perl nasceu com o objetivo de ser uma linguagem poderosa e prática.

Há linguagens que surgiram de uma necessidade ainda mais específica. Simula, por exemplo, nasceu pela necessidade de realizar simulações de eventos discretos. MUMPS, pela necessidade de desenvolver aplicações baseadas em bancos de dados para um hospital.

Entretanto, nem todas as linguagens resolvem um problema novo. Há, sim, linguagens que vêm para competir com outras. C#, por exemplo, veio para competir com Java, uma competição que influenciou bastante esta última. Há, também, linguagens que surgem para simples diversão de geeks, como nós. Whitespace, por exemplo, não tem nada de inovador, apenas a forma de programar: o código-fonte é escrito usando-se tabs e espaços.

Dado que cada linguagem tem seus pontos fortes e fracos, não podemos dizer que uma certa linguagem é a melhor. Podemos sim, dizer, que uma linguagem é a melhor para determinado problema numa determinada situação. E, para dizer isso, precisamos avaliar o problema, o que a linguagem oferece para resolvê-lo e o que o programador sabe sobre ela. Fatores importantes na linguagem são o suporte nativo às ferramentas e paradigmas que serão utilizados e bibliotecas e extensões disponíveis.

Às vezes não vale a pena para o programador aprender uma linguagem na qual ele resolveria um problema mais facilmente; o tempo que ele levaria para aprender a nova linguagem (ou ferramenta) é maior do que o tempo que ele vai levar para resolver o problema na linguagem com a qual ele é mais familiar. Note que esse não deve ser um fator tão importante na escolha. Às vezes é melhor que o problema demore mais para ser resolvido para que depois alterações na solução possam ser incorporadas mais facilmente.

Não podemos dizer que existe a melhor e a pior linguagem, mas podemos dizer que existem linguagens boas e ruins. A linguagem ruim é aquela que não ajuda o programador a utilizar seus recursos corretamente, por exemplo: ser uma linguagem poderosa para orientação a objetos mas, ao mesmo tempo, não oferecer suporte fácil para pacotes.

É sempre bom tomar contato com diversas linguagens para saber qual usar em cada situação. Para começar, sugiro que se escolham linguagens sem uma relação forte (uma inspirada na outra). Uma boa lista de linguagens para estudar, na minha opinião:

  • Smalltalk
  • Prolog
  • Scheme
  • C
  • Self
  • Erlang
  • Assembly (para os mais corajosos)

Propositalmente, são linguagens não muito recentes, especialmente Assembly, C, Prolog e Scheme. As linguagens mais recentes, baseadas nessas, têm muitos recursos avançados. É bom começar pelo básico e, depois de capturar a forma de pensar em cada linguagem, partir para recursos mais avançados.

Especialmente para estudar Assembly (ou, pelo menos, os conceitos dela), sugiro usar uma máquina virtual como o Hipo.

Faremos uma série de posts, aqui no VidaGeek, comentando mais sobre cada linguagem que conhecemos. Você também pode colaborar! Envie um e-mail para admin at vidageek.net com seus comentários sobre qualquer linguagem de sua preferência.

Imagem via esenviseu

Pegando notícias de outros sites

Sunday, 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.


Categorias

Histórico

AddThis Social Bookmark Button