Czy jest sposób w API Twittera, aby uzyskać odpowiedzi na konkretny tweet? Dzięki
Odpowiedzi:
Z tego, co rozumiem, nie ma sposobu, aby to zrobić bezpośrednio (przynajmniej nie teraz). Wygląda na to, że powinno się coś dodać. Niedawno dodali pewne możliwości „retweetowania”, wydaje się logiczne, aby dodać to również.
Oto jeden możliwy sposób, aby to zrobić, pierwsze przykładowe dane z tweeta (od 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>
...
Od status/show
możesz znaleźć identyfikator użytkownika. Następnie statuses/mentions_timeline
zwróci listę statusu użytkownika. Po prostu przeanalizuj ten zwrot, szukając in_reply_to_status_id
pasującego do oryginalnego tweeta id
.
status/mentions
.
status/mentions_timeline
Oto procedura uzyskiwania odpowiedzi na tweety
[q="to:$tweeterusername", sinceId = $tweetId]
in_reply_to_status_id_str to $tweetid
to odpowiedzi na post.Oto moje rozwiązanie. Wykorzystuje bibliotekę Abraham's Twitter Oauth PHP: https://github.com/abraham/twitteroauth
Wymaga znajomości atrybutu screen_name użytkownika Twittera, a także atrybutu id_str danego tweeta. W ten sposób możesz uzyskać dowolny kanał konwersacji z tweeta dowolnego użytkownika:
* UPDATE: Odświeżony kod, aby odzwierciedlić dostęp do obiektów w porównaniu z dostępem do tablicy:
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 ma nieudokumentowany interfejs API o nazwie related_results. Otrzymasz odpowiedzi na określony identyfikator tweeta. Nie jestem pewien, na ile niezawodny jest jego eksperymentalny, jednak jest to to samo wywołanie interfejsu API, które jest wywoływane w sieci Twitter.
Używaj na własne ryzyko. :)
https://api.twitter.com/1/related_results/show/172019363942117377.json?include_entities=1
Aby uzyskać więcej informacji, sprawdź tę dyskusję na dev.twitter: https://dev.twitter.com/discussions/293
Tutaj udostępniam prosty kod R, aby pobrać odpowiedź na konkretny tweet
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.
Nie w łatwy, pragmatyczny sposób. Jest w tym prośba o funkcję:
http://code.google.com/p/twitter-api/issues/detail?id=142
Istnieje kilka witryn internetowych innych firm, które udostępniają interfejsy API, ale często brakuje im statusów.
Zaimplementowałem to w następujący sposób:
1) statuses / update zwraca identyfikator ostatniego statusu (jeśli parametr include_entities jest prawdziwy) 2) Następnie możesz zażądać statusów / wzmianek i przefiltrować wynik według in_reply_to_status_id. Ten ostatni powinien być równy określonemu identyfikatorowi z kroku 1
Jak stwierdza satheesh, działa świetnie. Oto kod API REST, którego użyłem
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;
Na ten sam problem natknąłem się kilka miesięcy temu w pracy, ponieważ wcześniej korzystałem z ich related_tweets
punktu końcowego w REST V1.
Musiałem więc stworzyć obejście, które udokumentowałem tutaj:
http://adriancrepaz.com/twitter_conversations_api Mirror - Github fork
Ta klasa powinna robić dokładnie to, co chcesz. Pobiera kod HTML witryny mobilnej i analizuje rozmowę. Używam go przez jakiś czas i wydaje się bardzo niezawodny.
Aby pobrać rozmowę ...
Żądanie
<?php
require_once 'acTwitterConversation.php';
$twitter = new acTwitterConversation;
$conversation = $twitter->fetchConversion(324215761998594048);
print_r($conversation);
?>
Odpowiedź
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
)
)
....
)
)
Możesz użyć pakietu twarc w pythonie, aby zebrać wszystkie odpowiedzi na tweet.
twarc replies 824077910927691778 > replies.jsonl
Możliwe jest również zebranie wszystkich łańcuchów odpowiedzi (odpowiedzi na odpowiedzi) na tweet za pomocą poniższego polecenia:
twarc replies 824077910927691778 --recursive
ponieważ statuses / mentions_timeline zwróci 20 ostatnich wzmianek, to nie będzie tak wydajne, aby zadzwonić, i ma ograniczenia, takie jak 75 żądań na okno (15 minut), zamiast tego możemy użyć user_timeline
najlepszy sposób: 1. pobierz parametry screen_name lub user_id ze status / show.
2. teraz użyj user_timeline
GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=screen_name&count=count
(screen_name == nazwa, którą otrzymaliśmy From status / show)
(count == 1 do max 200)
count: Określa liczbę tweetów do pobrania, maksymalnie 200 na jedno żądanie.
z wyniku Po prostu przeanalizuj ten wynik, szukając in_reply_to_status_id pasującego do identyfikatora oryginalnego tweeta.
Oczywiście nie jest to idealne rozwiązanie, ale zadziała.