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.


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.

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

}

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


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.


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


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;

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
                        )
                )
             ....             
        )
)

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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.