Existe uma maneira na API do Twitter de obter respostas a um tweet específico? obrigado
Respostas:
Pelo que entendi, não há uma maneira de fazer isso diretamente (pelo menos não agora). Parece algo que deve ser adicionado. Recentemente, eles adicionaram alguns recursos de 'retuíte', parece lógico adicionar isso também.
Esta é uma maneira possível de fazer isso, primeiro exemplo de dados de tweet (de status/show
):
<status>
<created_at>Tue Apr 07 22:52:51 +0000 2009</created_at>
<id>1472669360</id>
<text>At least I can get your humor through tweets. RT @abdur: I don't mean this in a bad way, but genetically speaking your a cul-de-sac.</text>
<source><a href="http://www.tweetdeck.com/">TweetDeck</a></source>
<truncated>false</truncated>
<in_reply_to_status_id></in_reply_to_status_id>
<in_reply_to_user_id></in_reply_to_user_id>
<favorited>false</favorited>
<in_reply_to_screen_name></in_reply_to_screen_name>
<user>
<id>1401881</id>
...
De status/show
você pode encontrar o id do usuário. Em seguida statuses/mentions_timeline
, retornará uma lista de status para um usuário. Apenas analise esse retorno procurando uma in_reply_to_status_id
correspondência com o tweet original id
.
status/mentions
.
status/mentions_timeline
Aqui está o procedimento para obter as respostas para um tweet
[q="to:$tweeterusername", sinceId = $tweetId]
in_reply_to_status_id_str to $tweetid
são as respostas para a postagem.Aqui está minha solução. Ele utiliza a biblioteca de PHP Oauth do Twitter de Abraham: https://github.com/abraham/twitteroauth
Requer que você conheça o atributo screen_name do usuário do Twitter, bem como o atributo id_str do tweet em questão. Dessa forma, você pode obter um feed de conversa arbitrário a partir do tweet de qualquer usuário:
* ATUALIZAÇÃO: Código atualizado para refletir o acesso ao objeto vs acesso à matriz:
function get_conversation($id_str, $screen_name, $return_type = 'json', $count = 100, $result_type = 'mixed', $include_entities = true) {
$params = array(
'q' => 'to:' . $screen_name, // no need to urlencode this!
'count' => $count,
'result_type' => $result_type,
'include_entities' => $include_entities,
'since_id' => $id_str
);
$feed = $connection->get('search/tweets', $params);
$comments = array();
for ($index = 0; $index < count($feed->statuses); $index++) {
if ($feed->statuses[$index]->in_reply_to_status_id_str == $id_str) {
array_push($comments, $feed->statuses[$index]);
}
}
switch ($return_type) {
case 'array':
return $comments;
break;
case 'json':
default:
return json_encode($comments);
break;
}
}
O Twitter tem uma api não documentada chamada related_results. Ele lhe dará respostas para o id do tweet especificado. Não tenho certeza de quão confiável é como seu experimental, no entanto, esta é a mesma chamada de API que é chamada no Twitter web.
Use por sua conta e risco. :)
https://api.twitter.com/1/related_results/show/172019363942117377.json?include_entities=1
Para obter mais informações, verifique esta discussão em dev.twitter: https://dev.twitter.com/discussions/293
Aqui estou compartilhando um código R simples para buscar a resposta de um tweet específico
userName = "SrBachchan"
##fetch tweets from @userName timeline
tweets = userTimeline(userName,n = 1)
## converting tweets list to DataFrame
tweets <- twListToDF(tweets)
## building queryString to fetch retweets
queryString = paste0("to:",userName)
## retrieving tweet ID for which reply is to be fetched
Id = tweets[1,"id"]
## fetching all the reply to userName
rply = searchTwitter(queryString, sinceID = Id)
rply = twListToDF(rply)
## eliminate all the reply other then reply to required tweet Id
rply = rply[!rply$replyToSID > Id,]
rply = rply[!rply$replyToSID < Id,]
rply = rply[complete.cases(rply[,"replyToSID"]),]
## now rply DataFrame contains all the required replies.
Não de uma maneira fácil e pragmática. Há uma solicitação de recurso para ele:
http://code.google.com/p/twitter-api/issues/detail?id=142
Existem alguns sites de terceiros que fornecem APIs, mas eles geralmente perdem o status.
Como afirma satheesh funciona muito bem. Aqui está o código da API REST que usei
ini_set('display_errors', 1);
require_once('TwitterAPIExchange.php');
/** Set access tokens here - see: https://dev.twitter.com/apps/ **/
$settings = array(
'oauth_access_token' => "xxxx",
'oauth_access_token_secret' => "xxxx",
'consumer_key' => "xxxx",
'consumer_secret' => "xxxx"
);
// Your specific requirements
$url = 'https://api.twitter.com/1.1/search/tweets.json';
$requestMethod = 'GET';
$getfield = '?q=to:screen_name&sinceId=twitter_id';
// Perform the request
$twitter = new TwitterAPIExchange($settings);
$b = $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
$arr = json_decode($b,TRUE);
echo "Replies <pre>";
print_r($arr);
die;
Eu me deparei com o mesmo problema há alguns meses no trabalho, já que estava usando o related_tweets
endpoint no REST V1.
Então eu tive que criar uma solução alternativa, que documentei aqui:
http://adriancrepaz.com/twitter_conversations_api Mirror - Github fork
Esta classe deve fazer exatamente o que você deseja. Ele raspa o HTML do site móvel e analisa uma conversa. Eu o usei por um tempo e parece muito confiável.
Para buscar uma conversa ...
Solicitação
<?php
require_once 'acTwitterConversation.php';
$twitter = new acTwitterConversation;
$conversation = $twitter->fetchConversion(324215761998594048);
print_r($conversation);
?>
Resposta
Array
(
[error] => false
[tweets] => Array
(
[0] => Array
(
[id] => 324214451756728320
[state] => before
[username] => facebook
[name] => Facebook
[content] => Facebook for iOS v6.0 ? Now with chat heads and stickers in private messages, and a more beautiful News Feed on iPad itunes.apple.com/us/app/faceboo?
[date] => 16 Apr
[images] => Array
(
[thumbnail] => https://pbs.twimg.com/profile_images/3513354941/24aaffa670e634a7da9a087bfa83abe6_normal.png
[large] => https://pbs.twimg.com/profile_images/3513354941/24aaffa670e634a7da9a087bfa83abe6.png
)
)
[1] => Array
(
[id] => 324214861728989184
[state] => before
[username] => michaelschultz
[name] => Michael Schultz
[content] => @facebook good April Fools joke Facebook?.chat hasn?t changed. No new features.
[date] => 16 Apr
[images] => Array
(
[thumbnail] => https://pbs.twimg.com/profile_images/414193649073668096/dbIUerA8_normal.jpeg
[large] => https://pbs.twimg.com/profile_images/414193649073668096/dbIUerA8.jpeg
)
)
....
)
)
Você pode usar o pacote twarc em python para coletar todas as respostas a um tweet.
twarc replies 824077910927691778 > replies.jsonl
Além disso, é possível coletar todas as cadeias de respostas (respostas às respostas) para um tweet usando o comando abaixo:
twarc replies 824077910927691778 --recursive
uma vez que statuses / mentions_timeline retornará as 20 menções mais recentes, não será tão eficiente chamar, e tem limitações como 75 solicitações por janela (15min), em vez disso, podemos usar user_timeline
a melhor maneira: 1. obter os parâmetros screen_name ou user_id de status / show.
2. agora use user_timeline
GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=screen_name&count=count
(screen_name == nome que obtivemos em status / show)
(contagem == 1 até no máximo 200)
contagem: Especifica o número de Tweets para tentar e recuperar, até um máximo de 200 por solicitação distinta.
do resultado Apenas analise esse retorno procurando por um in_reply_to_status_id que corresponda ao id do tweet original.
Obviamente, não é o ideal, mas funcionará.