¿Existe alguna forma en la API de Twitter para obtener las respuestas a un tweet en particular? Gracias
Respuestas:
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/show
puede encontrar la identificación del usuario. Luego statuses/mentions_timeline
devolverá una lista de estado para un usuario. Simplemente analice ese retorno en busca de un in_reply_to_status_id
tweet que coincida con el original id
.
status/mentions
.
status/mentions_timeline
Este es el procedimiento para obtener las respuestas de un tweet.
[q="to:$tweeterusername", sinceId = $tweetId]
in_reply_to_status_id_str to $tweetid
son las respuestas de la publicación.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;
}
}
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
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.
No de una manera pragmática fácil. Hay una solicitud de función para ello:
http://code.google.com/p/twitter-api/issues/detail?id=142
Hay un par de sitios web de terceros que proporcionan API, pero a menudo pierden estados.
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;
Me encontré con el mismo problema hace unos meses en el trabajo, ya que anteriormente usaba su related_tweets
punto 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
)
)
....
)
)
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
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á.