Rastrear encomendas dos Correios via RSS
Tuesday, February 12th, 2008Escrevi um script hoje para ajudar o pessoal que deseja rastrear o andamento dos seus pacotes nos Correios via RSS.
Infelizmente os Correios ainda não disponibilizam um feed para o rastreio das encomendas, obrigando as pessoas a visitarem o site para ver se houve alguma alteração no status. Tão 1998…
Usando esse programa, você pode inscrever seu pacote num leitor de RSS e ser informado imadiatamente das movimentações dele. Tudo o que você precisa é visitar http://www.standardista.com.br/utils/correios.php e informar o número da encomenda. Ou simplesmente adicionar ‘?objeto=numero do objeto‘ no final da url para ter acesso direto ao feed.
Simples né? Podem baixar e rodar no site de vocês ou usar direto do meu site. Banda aqui é o que não falta.
Update: Adicionado o recurso de opensearch direto na barra de buscas do Firefox e IE 7.
Vou incluir aqui embaixo o código-fonte dele, e estou publicando-o como CC-GNU LGPL, o que basicamente permite que vocês usem e alterem ele como bem entenderem sem me dar satisfação.
<?php
/* GERADOR DE FEED RSS PARA RASTREIO DE ENCOMENDAS DOS CORREIOS
*
* Desenvolvido por Leonardo Toledo Sarmento Ribeiro (http://www.standardista.com.br)
* Url: http://www.standardista.com.br/utils/correios.php
*
* This software is licensed under the CC-GNU LGPL. (http://creativecommons.org/licenses/LGPL/2.1/)
*/
if (isset($_GET['objeto']) && $_GET['objeto']) {
$objeto = $_GET['objeto'];
$url = “http://websro.correios.com.br/sro_bin/txect01$.QueryList?P_LINGUA=001&P_TIPO=001&P_COD_UNI=$objeto”;
// $arquivo = file($url);
/*
* Usando cURL ao invés de file()
*/
$ch = curl_init();
$timeout = 5; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
$arquivo = array();
$arquivo = explode(”\n”, $file_contents);
/*
* FIM
*/
$items = Array();
foreach ($arquivo as $num => $linha) {
if (substr($linha, 0, 7) == ‘<tr><td’) {
if (preg_match(’/<td rowspan=[0-9]>.+?<\/td>/’, $linha, $match))
$items[$num]['data'] = utf8_encode(strip_tags($match[0]));
if (preg_match(’/<td colspan=[0-9]>.+?<\/td>/’, $linha, $match))
$items[$num-1]['para'] = utf8_encode(strip_tags($match[0]));
if (preg_match(’/<td>.+?<\/td>/’, $linha, $match))
$items[$num]['local'] = utf8_encode(strip_tags($match[0]));
if (preg_match(’/<FONT.*>.+?<\/font>/’, $linha, $match))
$items[$num]['situacao'] = utf8_encode(strip_tags($match[0]));
}
}
if (!$items) {
$items[0]['data'] = 0;
$items[0]['situacao'] = ‘Sem informações sobre o pacote’;
$items[0]['descricao'] = “O nosso sistema não possui dados sobre o objeto informado. Se o objeto foi postado recentemente, é natural que seus rastros não tenham ingressado no sistema, nesse caso, por favor, tente novamente mais tarde. Adicionalmente, verifique se o código digitado está correto: $objeto”;
}
}
?>
<?php if (isset($objeto) && $objeto):?>
<?php header(’Content-Type: text/xml; charset=utf-8′)?>
<?php echo ‘<?xml version=”1.0″?>’?>
<rss version=”2.0″>
<channel>
<title>Rastreio do objeto <?php echo $objeto?></title>
<image>
<link>http://www.correios.com.br</link>
<title>Correios</title>
<url>http://websro.correios.com.br/correios/Img/correios.gif</url>
<height>24</height>
<width>113</width>
</image>
<link><?php echo htmlentities($url)?></link>
<description>Rastreio do objeto <?php echo $objeto?></description>
<language>pt-br</language>
<pubDate><?php echo date(’r’)?></pubDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>standardista.com.br</generator>
<webMaster>leonardotsr@gmail.com (Leonardo Ribeiro)</webMaster>
<?php foreach ($items as $num => $item):?>
<item>
<title><?php if (isset($item['para'])) echo $item['para']; else echo $item['situacao']?></title>
<link><?php echo htmlentities($url).”&$num”?></link>
<guid><?php echo htmlentities($url).”&$num”?></guid>
<description>
<?php if ($item['data'] != 0):?>
<![CDATA[A encomenda recebeu o status de <strong><?php if (isset($item['para'])) echo $item['para']; else echo $item['situacao']?></strong> por <?php echo $item['local']?> em <?php echo $item['data']?>.<?php if ($item['situacao'] == ‘Entregue’) echo ‘<p><em>Esta é a última atualização deste feed. Você pode removê-lo do seu leitor.</em></p>’?>]]>
<?else: echo $item['descricao']?>
<?php endif?>
</description>
</item>
<?php endforeach?>
</channel>
</rss>
<?php elseif (!isset($_GET['opensearch'])):?>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”
“http://www.w3.org/TR/html4/strict.dtd”>
<html lang=”pt-BR”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>Rastreio de Encomenda via RSS</title>
<meta name=”generator” content=”TextMate http://macromates.com/”>
<meta name=”author” content=”Leonardo Ribeiro”>
<link rel=”search” type=”application/opensearchdescription+xml” title=”Rastreio de encomendas ECT” href=”<?php echo $_SERVER['SCRIPT_URI']?>?opensearch”>
<style type=”text/css” media=”screen”>
h1 {
font-size:200%;
font-weight:bold;
}
body {
background-color:#fff;
text-align:center;
font:12px Trebuchet, Verdana, Tahoma, Arial;
color: #444;
}
form {
width:300px;
background-color: #ffffe1;
margin:0 auto;
text-align:left;
padding:1em 2em;
border:1px solid #e1e1e1;
}
button {
float:left;
color:#444;
}
#objeto {
float:left;
border:1px inset;
color:#444;
font-size:150%;
width:50%;
display:block;
margin-right:1em;
padding:0 0.5em;
}
label {
line-height:2.5em;
font-weight:bold;
}
p {
clear:both;
font-size:80%;
}
</style>
<!– Date: 2007-02-16 –>
</head>
<body>
<h1>Rastreio de Encomenda dos Correios via RSS</h1>
<form action=”<?php echo $_SERVER['SCRIPT_URI']?>” method=”get” accept-charset=”utf-8″>
<label for=”objeto”>Digite o código de rastreio da encomenda:</label>
<input type=”text” name=”objeto” id=”objeto”>
<button type=”submit”>Gerar RSS</button>
<p>Exemplo: SE114552845BR</p>
</form>
</body>
</html>
<?php else:?>
<?php header(’Content-Type: text/xml; charset=utf-8′)?>
<?php echo “<?xml version=\”1.0\” encoding=\”UTF-8\”?>\n”?>
<OpenSearchDescription xmlns=”http://a9.com/-/spec/opensearch/1.1/”>
<ShortName>Rastreio de Encomendas ECT</ShortName>
<Description>Rastreio de encomendas dos Correios via RSS feed.</Description>
<Image height=”16″ width=”16″ type=”image/vnd.microsoft.icon”>http://www.correios.com.br/images/favicon.ico</Image>
<Contact>leonardo@standardista.com.br</Contact>
<Url type=”text/html”
template=”<?php echo $_SERVER['SCRIPT_URI']?>?objeto={searchTerms}”/>
</OpenSearchDescription>
<?php endif?>





