Respostas a um tweet específico, API do Twitter


Respostas:


53

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/showvocê 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_idcorrespondência com o tweet original id.


Vamos dizer que o usuário2 responde ao tweet do usuário1. Para descobrir isso a partir do tweet do usuário1, eu precisaria pesquisar por menções para o usuário1. Mas e no caso de eu não conseguir autenticar como user1? As menções não são acessíveis publicamente sem autenticação?
letronje

@letronje Não que eu saiba - você poderia usar a API de pesquisa para encontrar '@ user1' no tweet, mas não acho que seria tão confiável quanto usar status/mentions.
Tim Lytle

1
Parece que estátuas / menções estão obsoletas, então eu analisaria search / tweets? Q = @ screenName em vez disso: dev.twitter.com/docs/api/1.1/get/search/tweets
Dunc

4
@Dunc Parece que acabou de ser alterado parastatus/mentions_timeline
Tim Lytle

@Tim Bom ponto. Mas meu caso de uso é semelhante ao do letronje (ou seja, o tweet pode ser de qualquer pessoa), então preciso usar a pesquisa.
Dunc de

52

Aqui está o procedimento para obter as respostas para um tweet

  1. quando você busca o tweet, armazene o tweetId, ou seja, id_str
  2. usando a API de pesquisa do Twitter, faça a seguinte consulta [q="to:$tweeterusername", sinceId = $tweetId]
  3. Faça um loop de todos os resultados, os resultados correspondentes a in_reply_to_status_id_str to $tweetidsão as respostas para a postagem.

10

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;
     }

}

3
Por que isso foi rejeitado? Funciona exatamente como afirmado e responde ao problema com precisão. Além disso, meu método difere de @vsubbotin porque você pode usar o id de qualquer Tweeter em vez do seu.
Lincolnberryiii

4
Isso é bom, mas pode consumir limites de taxa valiosos (180 por oauth). 180 tweets executados com este método ... até mais!
Mike Barwick de

8

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


35
Esta API não está mais ativa
mathieu

Sim. como disse mathieu, não é mais ativo. Diz {u'mensagem ': desculpe, essa página não existe', u'code ': 34}
shadab.tughlaq

7

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.


3

Eu implementei isso da seguinte maneira:

1) statuses / atualização retorna id do último status (se include_entities for verdadeiro) 2) Então você pode solicitar status / menções e filtrar o resultado por in_reply_to_status_id. Este último deve ser igual ao id específico da etapa 1


2

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;

2

Eu me deparei com o mesmo problema há alguns meses no trabalho, já que estava usando o related_tweetsendpoint 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
                        )
                )
             ....             
        )
)

2

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


existe uma maneira de fazer isso em javascript?
yashatreya

Não tenho certeza, não verifiquei, avisarei se encontrar algo.
pouria babvey

1

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á.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.