Odpowiedzi na konkretny tweet, Twitter API

Odpowiedzi:

52

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/showmożesz znaleźć identyfikator użytkownika. Następnie statuses/mentions_timelinezwróci listę statusu użytkownika. Po prostu przeanalizuj ten zwrot, szukając in_reply_to_status_idpasującego do oryginalnego tweeta id.

Tim Lytle
źródło
Powiedzmy, że użytkownik2 odpowiada na tweeta użytkownika1. Aby dowiedzieć się tego na podstawie tweeta użytkownika 1, musiałbym poszukać wzmianek dla użytkownika 1. Ale co w przypadku, gdy nie mogę uwierzytelnić się jako użytkownik1? Czy wzmianki nie są dostępne publicznie bez autoryzacji?
letronje
@letronje Nie to, o czym wiem - możesz użyć interfejsu API wyszukiwania, aby znaleźć „@ user1” w tweecie, ale nie sądzę, aby było to tak niezawodne jak używanie status/mentions.
Tim Lytle
1
Wygląda na to, że statuetki / wzmianki są przestarzałe, więc przeanalizowałbym wyszukiwanie / tweety? Q = @ screenName zamiast: dev.twitter.com/docs/api/1.1/get/search/tweets
Dunc
4
@Dunc Wygląda na to, że został właśnie zmieniony nastatus/mentions_timeline
Tim Lytle
@Tim Słuszna uwaga. Ale mój przypadek użycia jest podobny do letronje (tj. Tweet może pochodzić od kogokolwiek), więc zamiast tego muszę użyć wyszukiwania.
Dunc
51

Oto procedura uzyskiwania odpowiedzi na tweety

  1. po pobraniu tweeta zapisz tweetId tj. id_str
  2. używając interfejsu API wyszukiwania na Twitterze, wykonaj następujące zapytanie [q="to:$tweeterusername", sinceId = $tweetId]
  3. Zapętl wszystkie wyniki, wyniki pasujące do in_reply_to_status_id_str to $tweetidto odpowiedzi na post.
Satheesh
źródło
10

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;
     }

}
lincolnberryiii
źródło
2
Dlaczego głosowanie odrzucono? Działa dokładnie tak, jak podano i precyzyjnie rozwiązuje problem. Co więcej, moja metoda różni się od @vsubbotin tym, że możesz użyć dowolnego identyfikatora głośnika wysokotonowego zamiast własnego.
Lincolnberryiii
3
To jest dobre, ale może pochłonąć cenne limity szybkości (180 za oauth). 180 tweetów działa tą metodą ... do zobaczenia!
Mike Barwick
8

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

minaz
źródło
34
To API nie jest już aktywne
mathieu
Tak. jak powiedział mathieu, nie jest już bardziej aktywny. Mówi {u'message ': u'Sorry, ta strona nie istnieje', u'code ': 34}
shadab.tughlaq
7

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.
Denish Thummar
źródło
3

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.

Abraham
źródło
gnip.com to w zasadzie jedyne zewnętrzne miejsce, w którym można teraz uzyskać dane z Twittera.
Abraham
3

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

Willy
źródło
2

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;
Kamal Kumar
źródło
2

Na ten sam problem natknąłem się kilka miesięcy temu w pracy, ponieważ wcześniej korzystałem z ich related_tweetspunktu 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
                        )
                )
             ....             
        )
)
Adrian
źródło
2

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

pouria babvey
źródło
czy istnieje sposób na zrobienie tego w javascript?
yashatreya
Nie jestem pewien, nie sprawdzałem, dam znać, jeśli coś znajdę.
pouria babvey
1

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.

Dilip
źródło