<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Status Correios</title>
	<atom:link href="http://ivanrosolen.com/2008/12/12/status-correios/feed/" rel="self" type="application/rss+xml" />
	<link>http://ivanrosolen.com/2008/12/12/status-correios/</link>
	<description>Inovações Tecnológicas</description>
	<lastBuildDate>Tue, 31 Jan 2012 19:19:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Ivan</title>
		<link>http://ivanrosolen.com/2008/12/12/status-correios/comment-page-1/#comment-1276</link>
		<dc:creator>Ivan</dc:creator>
		<pubDate>Wed, 13 Jan 2010 13:46:58 +0000</pubDate>
		<guid isPermaLink="false">http://ivanrosolen.com/v3/?p=73#comment-1276</guid>
		<description>Opa! 

Valeu pelo feedback e as alterações, no meu caso eu tinha acesso a file_get_contents e só precisa ver se foi entregue.

Mas assim está bem mais completo mesmo.

Abraços</description>
		<content:encoded><![CDATA[<p>Opa! </p>
<p>Valeu pelo feedback e as alterações, no meu caso eu tinha acesso a file_get_contents e só precisa ver se foi entregue.</p>
<p>Mas assim está bem mais completo mesmo.</p>
<p>Abraços</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carlos</title>
		<link>http://ivanrosolen.com/2008/12/12/status-correios/comment-page-1/#comment-1275</link>
		<dc:creator>Carlos</dc:creator>
		<pubDate>Wed, 13 Jan 2010 13:18:59 +0000</pubDate>
		<guid isPermaLink="false">http://ivanrosolen.com/v3/?p=73#comment-1275</guid>
		<description>Outro comentário.
Nem todo servidor deixa acessar páginas externar via file_get_contents. Nesse caso uso o curl. Por isso fiz uma função (get_url) que funcionará em ambos, basta usá-la. Espero ter colaborado!

Código:


function get_url($url) {
	if ($f = @fopen($url, &#039;r&#039;)) {
		$url_content = &#039;&#039;;
		while (!feof($f)) {
			$url_content .= fgets($f, 4096);            	
		}
		fclose($f);
		$url_content = stripslashes($url_content);
	} 
	else 
	//se o servidor esta em safe-mode (requer curl)
	{					
		$ch = curl_init();
		$timeout = 3; // set to zero for no timeout
		curl_setopt ($ch, CURLOPT_URL, $url);
		curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
		$url_content = curl_exec($ch);
		curl_close($ch);
		$url_content = stripslashes($url_content);
	}
	if ( (strpos($url_content,&quot;Not Found&quot;)) &#124;&#124; 
		(strpos($url_content,&quot;Página não encontrada&quot;)) &#124;&#124; 
		(strpos($url_content,&quot;404 Not Found&quot;)) ) {	
		return FALSE; 
	}
	else {
		return $url_content; 
	}
}</description>
		<content:encoded><![CDATA[<p>Outro comentário.<br />
Nem todo servidor deixa acessar páginas externar via file_get_contents. Nesse caso uso o curl. Por isso fiz uma função (get_url) que funcionará em ambos, basta usá-la. Espero ter colaborado!</p>
<p>Código:</p>
<p>function get_url($url) {<br />
	if ($f = @fopen($url, &#8216;r&#8217;)) {<br />
		$url_content = &#8221;;<br />
		while (!feof($f)) {<br />
			$url_content .= fgets($f, 4096);<br />
		}<br />
		fclose($f);<br />
		$url_content = stripslashes($url_content);<br />
	}<br />
	else<br />
	//se o servidor esta em safe-mode (requer curl)<br />
	{<br />
		$ch = curl_init();<br />
		$timeout = 3; // set to zero for no timeout<br />
		curl_setopt ($ch, CURLOPT_URL, $url);<br />
		curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);<br />
		curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);<br />
		$url_content = curl_exec($ch);<br />
		curl_close($ch);<br />
		$url_content = stripslashes($url_content);<br />
	}<br />
	if ( (strpos($url_content,&#8221;Not Found&#8221;)) ||<br />
		(strpos($url_content,&#8221;Página não encontrada&#8221;)) ||<br />
		(strpos($url_content,&#8221;404 Not Found&#8221;)) ) {<br />
		return FALSE;<br />
	}<br />
	else {<br />
		return $url_content;<br />
	}<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carlos</title>
		<link>http://ivanrosolen.com/2008/12/12/status-correios/comment-page-1/#comment-1274</link>
		<dc:creator>Carlos</dc:creator>
		<pubDate>Wed, 13 Jan 2010 13:12:39 +0000</pubDate>
		<guid isPermaLink="false">http://ivanrosolen.com/v3/?p=73#comment-1274</guid>
		<description>Mto interessante essa sua função de grande utilidade!
Aconte um problema quando existe alguma linha da tabela que é dividida em outra duas sublinhas (um rowspan). Isso acontece quando tem alguma informação adicional naquela mesma data, como 
&quot;Em trânsito para CTE/SEI BELO HORIZONTE - BELO HORIZONTE/MG&quot;

Seu script acaba perdendo essa informação (dentro da variável $foo). Fiz algumas alterações tratando a variável $foo, de forma que quando acontece esse caso, essa informação adicional (segunda linha dentro do rowspan), a mesma assume a mesma data da linha superior e conta como um novo registro $foo e no array de retorno.

Vc pode testar usando o código &quot;teste&quot; no site dos correios. Ele traz todos os casos possíveis de retorno.
http://websro.correios.com.br/sro_bin/txect01$.QueryList?P_LINGUA=001&amp;P_TIPO=001&amp;P_COD_UNI=teste

O código alterado:

function status_correios( $id_correios ) {
 
    $conteudo = file_get_contents(&#039;http://websro.correios.com.br/sro_bin/txect01$.QueryList?P_LINGUA=001&amp;P_TIPO=001&amp;P_COD_UNI=&#039;.$id_correios);
 
    if ( empty($conteudo) ) return false;
 
    $array_retorno = array();
 
    preg_match_all( &#039;/\s*]*&gt;(.*)\s*/&#039; , $conteudo , $array_regex );
 
    if ( !is_array($array_regex) &#124;&#124; count($array_regex)  $linha ) {
 
        $foo = explode( &#039;&#039; , $linha );

	if ($foo[0] &amp;&amp; $foo[1] == &quot;&quot;) { //uma linha na tabela que esta em rowspan: mantem data anterior
		$foo[1] = $foo[0]; //joga pra [1]
		$foo[0] = $foo0_antigo;
		$foo0_antigo = &quot;&quot;; 
	}
	else { //uma linha comum (sem rowspan)
		$foo0_antigo = $foo[0]; //salva valor em temporario
	}

        //retirar codigos HTML em todos os campos
        $array_retorno[] = array( strip_tags( $foo[ 0 ] ), strip_tags( $foo[ 1 ] ), strip_tags( $foo[ 2 ] ) );
       
    }
 
    return $array_retorno;
}</description>
		<content:encoded><![CDATA[<p>Mto interessante essa sua função de grande utilidade!<br />
Aconte um problema quando existe alguma linha da tabela que é dividida em outra duas sublinhas (um rowspan). Isso acontece quando tem alguma informação adicional naquela mesma data, como<br />
&#8220;Em trânsito para CTE/SEI BELO HORIZONTE &#8211; BELO HORIZONTE/MG&#8221;</p>
<p>Seu script acaba perdendo essa informação (dentro da variável $foo). Fiz algumas alterações tratando a variável $foo, de forma que quando acontece esse caso, essa informação adicional (segunda linha dentro do rowspan), a mesma assume a mesma data da linha superior e conta como um novo registro $foo e no array de retorno.</p>
<p>Vc pode testar usando o código &#8220;teste&#8221; no site dos correios. Ele traz todos os casos possíveis de retorno.<br />
<a href="http://websro.correios.com.br/sro_bin/txect01$.QueryList?P_LINGUA=001&amp;P_TIPO=001&amp;P_COD_UNI=teste" rel="nofollow">http://websro.correios.com.br/sro_bin/txect01$.QueryList?P_LINGUA=001&amp;P_TIPO=001&amp;P_COD_UNI=teste</a></p>
<p>O código alterado:</p>
<p>function status_correios( $id_correios ) {</p>
<p>    $conteudo = file_get_contents(&#8216;http://websro.correios.com.br/sro_bin/txect01$.QueryList?P_LINGUA=001&amp;P_TIPO=001&amp;P_COD_UNI=&#8217;.$id_correios);</p>
<p>    if ( empty($conteudo) ) return false;</p>
<p>    $array_retorno = array();</p>
<p>    preg_match_all( &#8216;/\s*]*&gt;(.*)\s*/&#8217; , $conteudo , $array_regex );</p>
<p>    if ( !is_array($array_regex) || count($array_regex)  $linha ) {</p>
<p>        $foo = explode( &#8221; , $linha );</p>
<p>	if ($foo[0] &amp;&amp; $foo[1] == &#8220;&#8221;) { //uma linha na tabela que esta em rowspan: mantem data anterior<br />
		$foo[1] = $foo[0]; //joga pra [1]<br />
		$foo[0] = $foo0_antigo;<br />
		$foo0_antigo = &#8220;&#8221;;<br />
	}<br />
	else { //uma linha comum (sem rowspan)<br />
		$foo0_antigo = $foo[0]; //salva valor em temporario<br />
	}</p>
<p>        //retirar codigos HTML em todos os campos<br />
        $array_retorno[] = array( strip_tags( $foo[ 0 ] ), strip_tags( $foo[ 1 ] ), strip_tags( $foo[ 2 ] ) );</p>
<p>    }</p>
<p>    return $array_retorno;<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ivan</title>
		<link>http://ivanrosolen.com/2008/12/12/status-correios/comment-page-1/#comment-5</link>
		<dc:creator>Ivan</dc:creator>
		<pubDate>Wed, 17 Dec 2008 04:52:52 +0000</pubDate>
		<guid isPermaLink="false">http://ivanrosolen.com/v3/?p=73#comment-5</guid>
		<description>Concordo. 

Mas para pegar os status, deixamos o script rodando na cron e se já pegou o status &#039;Entrege&#039; ele não consultava mais....

No caso era necessário o status &#039;Entrege&#039; e quando foi....só!</description>
		<content:encoded><![CDATA[<p>Concordo. </p>
<p>Mas para pegar os status, deixamos o script rodando na cron e se já pegou o status &#8216;Entrege&#8217; ele não consultava mais&#8230;.</p>
<p>No caso era necessário o status &#8216;Entrege&#8217; e quando foi&#8230;.só!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: silici0</title>
		<link>http://ivanrosolen.com/2008/12/12/status-correios/comment-page-1/#comment-4</link>
		<dc:creator>silici0</dc:creator>
		<pubDate>Tue, 16 Dec 2008 13:45:00 +0000</pubDate>
		<guid isPermaLink="false">http://ivanrosolen.com/v3/?p=73#comment-4</guid>
		<description>Na verdade o correios tem um problema que esse server fica caindo, então cuidado, o certo seria ter um api segundario próprio com todos os calculos. :P

Abraços</description>
		<content:encoded><![CDATA[<p>Na verdade o correios tem um problema que esse server fica caindo, então cuidado, o certo seria ter um api segundario próprio com todos os calculos. <img src='http://ivanrosolen.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Abraços</p>
]]></content:encoded>
	</item>
</channel>
</rss>

