Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

santosbio

[Resolvido] API do Twitter: exibição de mais de 100 resultados e

Recommended Posts

Então gente, é o seguinte. Estou criando um sistema onde vou buscar por uma determinada hashtag e vou fazer o seguinte:

 

  • exibir os resultados de 60 em 60;
  • contar todas as ocorrências no twitter da hashtag pesquisada

 

Preciso disso pra fazer algo do tipo: "1258 pessoas já twittaram essa tag. Veja os twits:"

Pra fazer a busca, estou fazendo o seguinte:


$hash = "%23fama"; // a hashtag que irei buscar
$qtde = "99999"; //  a quantidade de registros que vai ser resgatado na busca (usei isso com uma dica do William Bruno, aqui do Imasters mesmo)

$search = 'http://search.twitter.com/search.json?q='.$hash.'&rpp='.$qtde.'\''; //essa é minha query
$json = file_get_contents($search);  // pega os resultados da busca em JSON
$data = json_decode($json); //transforma os resultados acima em um array
$q = 1;  //variável que usei para numerar os resultados progressivamente


foreach( $data->results AS $post ){ //início do foreach, que exibirá os resultados

	if($q >= 1){$i = $q++;}  //condição que incrementará a variável $q, para gerar o número sequencial
       	$item = $post->text;  // seta a variável $item com o conteúdo do campo "texto" do meu array
	echo "$i - $item <br>"; //exibe o resultado, com o número ordenado à sua esquerda
}

 

 

Alguém consegue me dar uma luz sobre isso?

Já tentei fazer diversos tipos de paginação, mas sempre retorna um erro.

 

Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então pessoal. Pesquisando pela API, descobri que a paginação de resultados eu consigo fazer através da declaração da variável $page na minha URL.

Então, fica assim:

 


$hash = "%23fama";
$qtde = "64";
$pg = $_GET['page']; // pra pegar o valor da página enviado pelo sistema de paginação via GET
$search = 'http://search.twitter.com/search.json?q='.$hash.'&rpp='.$qtde.'&page='.$pg.'';

 

 

Mas eu ainda preciso contar quantos tweets ocorreram com essa hashtag.

 

Alguém sabe de alguma maneira de fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha eu aqui de novo... hahahah

Consegui +- fazer uma paginação dos resultados.

 

Meu código tá assim:

 


<?php header('Content-type: text/html; charset=utf-8'); //aqui seto o documento como UTF-8 ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.tools.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
   	$("div:#ttp-maos").fadeIn("slow");
 	});
</script>

<style type="text/css">
* {margin:0; padding:0; border:0;}
#container {width:760px; height:auto; min-height:760px;  background:url(img/bg.jpg) no-repeat center top; display:block; margin:0  auto;}
#topo {width:760px; height:166px; display:block;}
.tooltip {
display:none;
background:transparent url(img/black_big.png);
font-size:12px;
height:70px;
width:205px;
height:100px;
padding:15px;
display:block;
max-width:205px;
color:#fff;	
font-family: Verdana, Arial, Helvetica, sans-serif;
}
#ttp-maos {display:none; width:760px; height:440px;  min-height:440px;}
.mao {
float:left;
width:auto;
height:100px;
text-align:center;
}
#setas {float:left; margin-top:0px; position:relative; width:100%;}
#setas .seta-left {position:absolute; left:0; display:block; border:none;}
#setas .seta-right {position:absolute; right:0; display:block; border:none;}
#setas .maozinha {margin:-7px auto; display:block; border:none;}
</style>
</head>

<body>

<div id="container">
<div id="topo">
</div>
<div id="container-maos">
<?php

$hash = "%23fama";  //minha hashtag
$qtde = "47"; //quantidade de registros por página
$pg = $_GET['page']; //resgata o valor da página atual
$search =  'http://search.twitter.com/search.json?q='.$hash.'&rpp='.$qtde.'&page='.$pg.'';  // query de onde virão os twitts

$json = file_get_contents($search);  //resgata os dados da query
$data = json_decode($json); //decodifica os dados para um array
$q = 1; //essa variável eu estou utilizando apenas para exibir dinamicamente a imagem das mãos no meu mural

/***PHP_EOL;***/
echo '<div id="ttp-maos">'.PHP_EOL;
foreach( $data->results AS $post ){

	if($q >= 1){$i = $q++;}  //incremento minha variável $q, pra poder gerar o nome da minha imagem

   	$item = $post->text; //atribuo meu twitt à variável $item
	$usuario = $post->from_user; //atribuo o nome do usuário à variável $usuário
	$img_mao = "M".$i."L1.png"; //gero o link da minha imagem dinâmica
	$resultado = '<div class="mao"><img  src="img/'.$img_mao.'"   title="<b><u>'.$usuario.':</u></b>  '.$item.'"/></div>'.PHP_EOL;		//crio a estrutura do meu  resultado

	echo "$resultado"; //exibo meu resultado na tela

}  
echo '</div>'.PHP_EOL;

/****aqui eu faço a paginação ***/
$pag = $_GET['page'];
if (isset($pag)){
$page = 1;
$next = ++$page;
$prev = $page;
}
if ($pag == 1) {
$page = 1;
$page2 = 1;
$next = ++$page;
$prev = $page2;
$ocultar = 'display: none;';
}
if ($pag > 1) {
$page = $_GET['page'];
$next = ++$page;
$page2 = $_GET['page'];
$prev = --$page2;
}
else {
$page = 1;
$page2 = 1;
$next = ++$page;
$prev = $page2;
$ocultar = 'display: none;';
}
?>






</div>
<?php
/***aqui exibo os links anterior | postar | próximo ***/
echo '<div id="setas">';
echo '<a href="?page='.$prev.'" style="'.$ocultar.'"><img  src="img/seta-back.png" border="0" class="seta-left" /></a>';
echo '<a href="?page='.$next.'"><img src="img/seta-fwd.png" border="0" class="seta-right" /></a>';
echo '<img src="img/maozinha.png" border="0" class="maozinha" />';
echo '</div>';
?>
</div>

<script type="text/javascript">
$("#ttp-maos img[title]").tooltip();
</script>

</body>
</html>

 

Só que, qundo chego na última página com conteúdo, o botão de avançar ainda aparece e, quando clicado, gera um erro (pois não há mais conteúdo para se buscar via streaming).

 

Aqui está uma demonstração on-line:

http://portifolioadriano.com.br/app/

 

Tentem colocar a variável page como 99, por exemplo.

 

Esse erro aparece qdo clico em next, e estou na última página.

 

Quando trabalho com banco de dados, acho bem sussa paginar os resultados. Mas como esses estão vindo via streaming, estou com bastante dificuldade em paginar corretamente.

 

Obs.: ainda não consegui contar as ocorrências da hashtag no twitter. #fail

 

É isso, e obrigado pela atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obs.: ainda não consegui contar as ocorrências da hashtag no twitter. #fail

não sei se isso é completamente possível.

pelo menos qndo eu estudei a APi não achei essa informação.

 

trazer 'todos os dados' e contar na mão, me parece ser a unica solução, se não tiver essa resposta pela API

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... pela query, ele só traz 100 resultados (nunca mais que isso)... então, fica meio q impossível contar (e até paginar, pois não sabemos a qtde total de resultados).

 

Pra navegar entre as páginas, a API fala em usar o atributo &page= na query. E estou fazendo assim.

 

Só que quando chego no fim dos resultados, ele retorna um erro (óbvio), por falta de resultados na query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tô tentando fazer da forma que o william falou. O sistema já tá buscando as ocorrências no banco, masssss... não consigo inserir elas.

 

Meu código mudou só algumas coisinhas:



<?php header('Content-type: text/html; charset=utf-8');
	//aqui eu conecto coo o DB
	$conexao = mysql_connect("HOST", "LOGIN", "SENHA") or die ("Erro de conexão!");
	$db = mysql_select_db("minhatabela") or die ("Erro ao conectar no banco de dados!");

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.tools.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
       $("div:#ttp-maos").fadeIn("slow");
     });
</script>

<style type="text/css">
* {margin:0; padding:0; border:0;}
#container {width:760px; height:auto; min-height:760px; background:url(img/bg.jpg) no-repeat center top; display:block; margin:0 auto;}
#topo {width:760px; height:166px; display:block;}
.tooltip {
display:none;
background:transparent url(img/black_big.png);
font-size:12px;
height:70px;
width:205px;
height:100px;
padding:15px;
display:block;
max-width:205px;
color:#fff;	
font-family: Verdana, Arial, Helvetica, sans-serif;
}
#ttp-maos {display:none; width:760px; height:440px;  min-height:440px;}
.mao {
float:left;
width:auto;
height:100px;
text-align:center;
}
#setas {float:left; margin-top:0px; position:relative; width:100%;}
#setas .seta-left {position:absolute; left:0; display:block; border:none;}
#setas .seta-right {position:absolute; right:0; display:block; border:none;}
#setas .maozinha {margin:-7px auto; display:block; border:none;}
</style>
</head>

<body>

<div id="container">
<div id="topo">
   </div>
   <div id="container-maos">
<?php

$hash = "%23testefator";
$qtde = "47";
$pg = $_GET['page'];
$search = 'http://search.twitter.com/search.json?q='.$hash.'&rpp='.$qtde.'&page='.$pg.'';


$json = file_get_contents($search);  
$data = json_decode($json);
$q = 1;

/***PHP_EOL;***/
echo '<div id="ttp-maos">'.PHP_EOL;
foreach( $data->results AS $post ){

	if($q >= 1){$i = $q++;} 

       $item = $post->text;
	$usuario = $post->from_user;
	$postagem = $post->created_at;
	$id_post = $post->id_str;
	$img_mao = "M".$i."L1.png";

	$sql = mysql_query("SELECT * FROM tweets WHERE id_post = $id_post");
	$numero_linhas = mysql_num_rows($sql);


	if($numero_linhas == 0) {			
		$sql2 = mysql_query("INSERT INTO tweets (id, usuario, mensagem, data_post, id-post) VALUES ('', '$usuario', '$item', '$postagem', '$id_post')");			
	}		


	$resultado = '<div class="mao"><img src="img/'.$img_mao.'"  title="<b><u>'.$usuario.':</u></b> '.$item.'<br>'.$postagem.'<br><br>'.$id_post.'<br>Quant='.$numero_linhas.'"/></div>'.PHP_EOL;		

	echo "$resultado";



}  
echo '</div>'.PHP_EOL;

$pag = $_GET['page'];
if (isset($pag)){
$page = 1;
$next = ++$page;
$prev = $page;
}
if ($pag == 1) {
$page = 1;
$page2 = 1;
$next = ++$page;
$prev = $page2;
$ocultar = 'display: none;';
}
if ($pag > 1) {
$page = $_GET['page'];
$next = ++$page;
$page2 = $_GET['page'];
$prev = --$page2;
}
else {
$page = 1;
$page2 = 1;
$next = ++$page;
$prev = $page2;
$ocultar = 'display: none;';
}
?>






</div>
<?php
echo '<div id="setas">';
echo '<a href="?page='.$prev.'" style="'.$ocultar.'"><img src="img/seta-back.png" border="0" class="seta-left" /></a>';
echo '<a href="?page='.$next.'"><img src="img/seta-fwd.png" border="0" class="seta-right" /></a>';
echo '<img src="img/maozinha.png" border="0" class="maozinha" />';
echo '</div>';

?>
</div>

<script type="text/javascript">
$("#ttp-maos img[title]").tooltip();
</script>

</body>
</html>

 

 

Então... como podem ver, minha idéia era a seguinte: pegar o código único do tweet, pesquisar se ele já existe no banco e, se não existir, gravar no DB (junto com mais algumas informações que pretendo usar futuramente). Mas não consigo gravar. O único dado q tem lá eu inseri manualmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$sql2 = mysql_query("INSERT INTO tweets (id, usuario, mensagem, data_post, id-post) 
VALUES ('', '$usuario', '$item', '$postagem', '$id_post')")
or die( mysql_error() );

 

corrija o erro que aparecer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$sql2 = mysql_query("INSERT INTO tweets (id, usuario, mensagem, data_post, id-post) 
VALUES ('', '$usuario', '$item', '$postagem', '$id_post')")
or die( mysql_error() );

 

corrija o erro que aparecer.

 

Deu certo! faltavam as aspas nos valores. então, ficou assim:

 

$sql2 = mysql_query("INSERT INTO tweets (id, usuario, mensagem, data_post, id-post) 
VALUES ('', '".$usuario."', '".$item."', '".$postagem."', '".$id_post."')")
or die( mysql_error() );

 

Como sempre, um erro idiota aliado à falta de atenção!

 

Vlw gente!

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, sem querer reviver o tópico (mas já revivendo... rsrsr), esse meu projeto do Twitter acabou ficando jogado às traças, pois meu cliente não acreditava (e ainda não acredita) no potencial do Twitter (sim... foi isso mesmo o que vocês leram).

 

Por isso, resolvi disponibilizar o material que desenvolvi pra quem queira estudá-lo ou aplicá-lo em algum projeto. Só peço que, por gentileza, dêem os devidos créditos.

 

Segue o link: http://www.megaupload.com/?d=AS2PT07M

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.