C'è un modo nell'API di Twitter per ottenere le risposte a un particolare tweet? Grazie
Risposte:
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/show
puoi trovare l'ID dell'utente. Quindi statuses/mentions_timeline
restituirà un elenco di stati per un utente. Basta analizzare quel ritorno alla ricerca di una in_reply_to_status_id
corrispondenza con il tweet originale id
.
status/mentions
.
status/mentions_timeline
Ecco la procedura per ottenere le risposte a un tweet
[q="to:$tweeterusername", sinceId = $tweetId]
in_reply_to_status_id_str to $tweetid
è le risposte per il post.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;
}
}
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
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.
Non in modo facile e pragmatico. C'è una richiesta di funzionalità per questo:
http://code.google.com/p/twitter-api/issues/detail?id=142
Ci sono un paio di siti web di terze parti che forniscono API ma spesso perdono gli stati.
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
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;
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
)
)
....
)
)
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
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à.