Risponde a un particolare tweet, API Twitter


Risposte:


53

Da quello che ho capito, non c'è un modo per farlo direttamente (almeno non ora). Sembra qualcosa che dovrebbe essere aggiunto. Recentemente hanno aggiunto alcune funzionalità di "retweet", sembra logico aggiungere anche questo.

Ecco un modo possibile per farlo, primo esempio di dati tweet (da 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>
     ...

Da status/showpuoi trovare l'ID dell'utente. Quindi statuses/mentions_timelinerestituirà un elenco di stati per un utente. Basta analizzare quel ritorno alla ricerca di una in_reply_to_status_idcorrispondenza con il tweet originale id.


Diciamo che l'utente2 risponde al tweet dell'utente1. Per capirlo dal tweet di user1, avrei bisogno di cercare menzioni per user1. Ma cosa succede nel caso in cui non riesco ad autenticarmi come utente1? Le menzioni non sono accessibili pubblicamente senza autorizzazione?
letronje

@letronje Non che io sappia - potresti usare l'API di ricerca per trovare "@ user1" nel tweet, ma non credo che sarebbe affidabile quanto usare status/mentions.
Tim Lytle

1
Sembra che le statue / menzioni siano obsolete, quindi analizzerei search / tweets? Q = @ screenName invece: dev.twitter.com/docs/api/1.1/get/search/tweets
Dunc

4
@Dunc Sembra che sia stato appena cambiato instatus/mentions_timeline
Tim Lytle

@ Tim Buon punto. Ma il mio caso d'uso è simile a quello di letronje (cioè il tweet potrebbe essere di chiunque), quindi devo usare invece la ricerca.
Dunc

52

Ecco la procedura per ottenere le risposte a un tweet

  1. quando prendi il tweet, memorizza tweetId, ad esempio id_str
  2. utilizzando l'API di ricerca di Twitter, eseguire la seguente query [q="to:$tweeterusername", sinceId = $tweetId]
  3. Ripeti tutti i risultati, i risultati che corrispondono a in_reply_to_status_id_str to $tweetidè le risposte per il post.

10

Ecco la mia soluzione. Utilizza la libreria PHP Twitter Oauth di Abraham: https://github.com/abraham/twitteroauth

Richiede che tu conosca l'attributo screen_name dell'utente di Twitter e l'attributo id_str del tweet in questione. In questo modo, puoi ottenere un feed di conversazione arbitrario dal tweet di qualsiasi utente arbitrario:

* AGGIORNAMENTO: codice aggiornato per riflettere l'accesso agli oggetti rispetto all'accesso all'array:

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
Perché è stato bocciato? Funziona esattamente come indicato e risponde al problema con precisione. Inoltre, il mio metodo differisce da @vsubbotin in quanto puoi utilizzare l'ID di qualsiasi Tweeter invece del tuo.
lincolnberryiii

4
Questo è un bene, ma può consumare preziosi limiti di velocità (180 per oauth). 180 tweet eseguiti con questo metodo ... ci vediamo!
Mike Barwick,

8

Twitter ha un'API non documentata chiamata related_results. Ti darà risposte per l'id tweet specificato. Non sono sicuro di quanto sia affidabile in quanto sperimentale, tuttavia questa è la stessa chiamata api che viene chiamata su Twitter web.

Utilizzare a proprio rischio. :)

https://api.twitter.com/1/related_results/show/172019363942117377.json?include_entities=1

Per maggiori informazioni, controlla questa discussione su dev.twitter: https://dev.twitter.com/discussions/293


35
Questa API non è più attiva
mathieu

Sì. come ha detto Mathieu, non è più attivo. Dice {u'message ': u'Sorry, that page does not exist', u'code ': 34}
shadab.tughlaq

7

Qui sto condividendo un semplice codice R per recuperare la risposta di un tweet specifico

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

L'ho implementato nel modo seguente:

1) statuses / update restituisce l'id dell'ultimo stato (se include_entities è vero) 2) Quindi puoi richiedere stati / menzioni e filtrare il risultato per in_reply_to_status_id. Quest'ultimo dovrebbe essere uguale all'id particolare del passaggio 1


2

Come afferma satheesh, funziona alla grande. Ecco il codice API REST che ho usato

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

Mi sono imbattuto nello stesso problema alcuni mesi fa al lavoro, poiché in precedenza utilizzavo il loro related_tweets endpoint in REST V1.

Quindi ho dovuto creare una soluzione alternativa, che ho documentato qui:
http://adriancrepaz.com/twitter_conversations_api Mirror - Github fork

Questa classe dovrebbe fare esattamente quello che vuoi. Raschia l'HTML del sito per dispositivi mobili e analizza una conversazione. L'ho usato per un po 'e sembra molto affidabile.

Per recuperare una conversazione ...

Richiesta

<?php

require_once 'acTwitterConversation.php';

$twitter = new acTwitterConversation;
$conversation = $twitter->fetchConversion(324215761998594048);
print_r($conversation);

?>

Risposta

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

Puoi usare il pacchetto twarc in python per raccogliere tutte le risposte a un tweet.

twarc replies 824077910927691778 > replies.jsonl

Inoltre, è possibile raccogliere tutte le catene di risposte (risposte alle risposte) a un tweet utilizzando il comando seguente:

twarc replies 824077910927691778 --recursive


c'è un modo per farlo in javascript?
yashatreya

Non sono sicuro, non ho controllato, ti farò sapere se ho trovato qualcosa.
pouria babvey

1

poiché statuses / mentions_timeline restituirà la 20 menzione più recente, non sarà così efficiente da chiamare, e ha limitazioni come 75 richieste per finestra (15min), invece di questo possiamo usare user_timeline

il modo migliore: 1. ottenere i parametri screen_name o user_id da status / show.
2. ora usa user_timeline
GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=screen_name&count=count

(screen_name == nome che abbiamo ottenuto da status / show)
(count == 1 to max 200)
count: Specifica il numero di Tweet da provare e recuperare, fino a un massimo di 200 per richiesta distinta.

dal risultato Basta analizzare quel ritorno cercando un in_reply_to_status_id che corrisponda all'id del tweet originale.

Ovviamente non è l'ideale, ma funzionerà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.