Respuestas a un tweet en particular, API de Twitter


Respuestas:


52

Por lo que tengo entendido, no hay forma de hacerlo directamente (al menos no ahora). Parece algo que debería agregarse. Recientemente agregaron algunas capacidades de 'retweet', parece lógico agregar esto también.

Aquí hay una forma posible de hacer esto, la primera muestra de datos de tweets (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>
     ...

Desde status/showpuede encontrar la identificación del usuario. Luego statuses/mentions_timelinedevolverá una lista de estado para un usuario. Simplemente analice ese retorno en busca de un in_reply_to_status_idtweet que coincida con el original id.


Digamos que el usuario2 responde al tweet del usuario1. Para averiguarlo a partir del tweet de user1, necesitaría buscar menciones para user1. Pero, ¿qué pasa en el caso de que no pueda autenticarme como usuario1? ¿Las menciones no son accesibles públicamente sin autorización?
letronje

@letronje No que yo sepa, podrías usar la API de búsqueda para encontrar '@ user1' en el tweet, pero no creo que sea tan confiable como usar status/mentions.
Tim Lytle

1
Parece que las estatuas / menciones están en desuso, así que analizaría search / tweets? Q = @ screenName en su lugar: dev.twitter.com/docs/api/1.1/get/search/tweets
Dunc

4
@Dunc Parece que se acaba de cambiar astatus/mentions_timeline
Tim Lytle

@Tim Buen punto. Pero mi caso de uso es similar al de letronje (es decir, el tweet podría ser de cualquiera), así que necesito usar la búsqueda en su lugar.
Dunc

51

Este es el procedimiento para obtener las respuestas de un tweet.

  1. cuando recuperas el tweet, almacena el tweetId, es decir, id_str
  2. usando la API de búsqueda de Twitter, haga la siguiente consulta [q="to:$tweeterusername", sinceId = $tweetId]
  3. Repita todos los resultados, los resultados que coinciden con in_reply_to_status_id_str to $tweetidson las respuestas de la publicación.

10

Aquí está mi solución. Utiliza la biblioteca PHP Oauth de Twitter de Abraham: https://github.com/abraham/twitteroauth

Requiere que conozca el atributo screen_name del usuario de Twitter, así como el atributo id_str del tweet en cuestión. De esta manera, puede obtener un feed de conversación arbitrario desde el tweet de cualquier usuario arbitrario:

* ACTUALIZACIÓN: código actualizado para reflejar el acceso a objetos frente al acceso a la 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;
     }

}

2
¿Por qué se votó en contra? Funciona exactamente como se indica y responde al problema con precisión. Además, mi método difiere de @vsubbotin en que puedes usar la identificación de cualquier Tweeter en lugar de la tuya.
lincolnberryiii

3
Esto es bueno, pero puede consumir valiosos límites de tasa (180 por oauth). 180 tweets ejecutados con este método ... ¡nos vemos!
Mike Barwick

8

Twitter tiene una API indocumentada llamada related_results. Le dará respuestas para la identificación de tweet especificada. No estoy seguro de cuán confiable es ya que es experimental, sin embargo, esta es la misma llamada de API que se llama en la web de Twitter.

Úselo bajo su propio riesgo. :)

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

Para obtener más información, consulte esta discusión en dev.twitter: https://dev.twitter.com/discussions/293


34
Esta API ya no está activa
mathieu

Si. como dijo Mathieu, ya no está activo. Dice {u'message ': u'Sorry, that page does not exist', u'code ': 34}
shadab.tughlaq

7

Aquí estoy compartiendo un código R simple para obtener la respuesta de un 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

Implementé esto de la siguiente manera:

1) status / update devuelve id del último estado (si include_entities es verdadero) 2) Luego puede solicitar estados / menciones y filtrar el resultado por in_reply_to_status_id. Este último debe ser igual al ID particular del paso 1


2

Como dice satheesh, funciona muy bien. Aquí está el código REST API que utilicé

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

Me encontré con el mismo problema hace unos meses en el trabajo, ya que anteriormente usaba su related_tweetspunto final en REST V1.

Así que tuve que crear una solución alternativa, que he documentado aquí:
http://adriancrepaz.com/twitter_conversations_api Mirror - Github fork

Esta clase debería hacer exactamente lo que quieres. Raspa el HTML del sitio móvil y analiza una conversación. Lo he usado por un tiempo y parece muy confiable.

Para buscar una conversación ...

Solicitud

<?php

require_once 'acTwitterConversation.php';

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

?>

Respuesta

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

Puede usar el paquete twarc en python para recopilar todas las respuestas a un tweet.

twarc replies 824077910927691778 > replies.jsonl

Además, es posible recopilar todas las cadenas de respuesta (respuestas a las respuestas) a un tweet usando el siguiente comando:

twarc replies 824077910927691778 --recursive


¿Hay alguna manera de hacer esto en javascript?
yashatreya

No estoy seguro, no lo verifiqué, te avisaré si encontré algo.
pouria babvey

1

dado que statuses / mentions_timeline devolverá las 20 menciones más recientes, esta no será tan eficiente para llamar, y tiene limitaciones como 75 solicitudes por ventana (15min), en lugar de esto podemos usar user_timeline

la mejor manera: 1. Obtenga los parámetros screen_name o user_id de status / show.
2. ahora use user_timeline
GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=screen_name&count=count

(screen_name == nombre que obtuvimos de estado / show)
(recuento == 1 hasta un máximo de 200)
count: Especifica el número de Tweets para intentar recuperar, hasta un máximo de 200 por solicitud distinta.

del resultado Simplemente analice ese retorno en busca de un in_reply_to_status_id que coincida con la identificación del tweet original.

Obviamente, no es ideal, pero funcionará.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.