Antworten auf einen bestimmten Tweet, die Twitter-API

85

Gibt es eine Möglichkeit in der Twitter-API, die Antworten auf einen bestimmten Tweet zu erhalten? Vielen Dank

Sieger
quelle
Sieht

Antworten:

51

Soweit ich weiß, gibt es keine Möglichkeit, dies direkt zu tun (zumindest jetzt nicht). Scheint etwas zu sein, das hinzugefügt werden sollte. Sie haben kürzlich einige "Retweet" -Funktionen hinzugefügt. Es scheint logisch, dies ebenfalls hinzuzufügen.

Hier ist eine Möglichkeit, dies zu tun: Erste Beispiel-Tweet-Daten (von 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>
     ...

Hier status/showfinden Sie die Benutzer-ID. Anschließend statuses/mentions_timelinewird eine Statusliste für einen Benutzer zurückgegeben. Analysieren Sie einfach diese Rückkehr und suchen Sie nach einem in_reply_to_status_idpassenden Tweet id.

Tim Lytle
quelle
Nehmen wir an, Benutzer2 antwortet auf den Tweet von Benutzer1. Um das aus dem Tweet von Benutzer1 herauszufinden, müsste ich nach Erwähnungen für Benutzer1 suchen. Aber was ist, wenn ich mich nicht als Benutzer1 authentifizieren kann? Sind Erwähnungen ohne Authentifizierung nicht öffentlich zugänglich?
Letronje
@letronje Nicht das ich wüsste - Sie könnten die Such-API verwenden, um '@ user1' im Tweet zu finden, aber ich denke nicht, dass dies so zuverlässig wäre wie die Verwendung status/mentions.
Tim Lytle
1
Es sieht so aus, als wären Statuen / Erwähnungen veraltet, also würde ich stattdessen search / tweets analysieren? Q = @ screenName: dev.twitter.com/docs/api/1.1/get/search/tweets
Dunc
4
@Dunc Sieht aus wie es gerade geändert wurde zustatus/mentions_timeline
Tim Lytle
@ Tim Guter Punkt. Aber mein Anwendungsfall ähnelt dem von letronje (dh Tweet könnte von jedem stammen), daher muss ich stattdessen die Suche verwenden.
Dunc
51

Hier ist das Verfahren, um die Antworten für einen Tweets zu erhalten

  1. Wenn Sie den Tweet-Speicher abrufen, speichern Sie die tweetId, dh id_str
  2. Verwenden Sie die Twitter-Such-API, um die folgende Abfrage durchzuführen [q="to:$tweeterusername", sinceId = $tweetId]
  3. Schleife alle Ergebnisse, die Ergebnisse stimmen in_reply_to_status_id_str to $tweetidmit den Antworten für den Beitrag überein.
Satheesh
quelle
10

Hier ist meine Lösung. Es nutzt Abrahams Twitter Oauth PHP-Bibliothek: https://github.com/abraham/twitteroauth

Dazu müssen Sie das Attribut screen_name des Twitter-Benutzers sowie das Attribut id_str des betreffenden Tweets kennen. Auf diese Weise können Sie einen beliebigen Konversations-Feed aus dem Tweet eines beliebigen Benutzers abrufen:

* UPDATE: Aktualisierter Code, der den Objektzugriff im Vergleich zum Arrayzugriff widerspiegelt:

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
quelle
2
Warum wurde dies abgelehnt? Es funktioniert genau wie angegeben und beantwortet das Problem genau. Außerdem unterscheidet sich meine Methode von @vsubbotin darin, dass Sie anstelle Ihrer eigenen die ID eines beliebigen Hochtöners verwenden können.
Lincolnberryiii
3
Dies ist gut, kann aber wertvolle Ratenlimits (180 pro Stunde) verschlingen. 180 Tweets laufen mit dieser Methode ... bis dann!
Mike Barwick
8

Twitter hat eine undokumentierte API namens related_results. Sie erhalten Antworten auf die angegebene Tweet-ID. Ich bin mir nicht sicher, wie zuverlässig es als Experiment ist, aber dies ist der gleiche API-Aufruf, der im Twitter-Web aufgerufen wird.

Benutzung auf eigene Gefahr. :) :)

https://api.twitter.com/1/related_results/show/172019363942117377.json?include_entities=1

Weitere Informationen finden Sie in dieser Diskussion auf dev.twitter: https://dev.twitter.com/discussions/293

Minaz
quelle
34
Diese API ist nicht mehr aktiv
Mathieu
Ja. wie mathieu sagte, ist es nicht mehr aktiv. Es heißt {u'message ': u'Sorry, diese Seite existiert nicht', u'code ': 34}
shadab.tughlaq
7

Hier teile ich einfachen R-Code, um die Antwort eines bestimmten Tweets abzurufen

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
quelle
3

Ich habe dies folgendermaßen implementiert:

1) statuses / update gibt die ID des letzten Status zurück (wenn include_entities true ist). 2) Anschließend können Sie Status / Erwähnungen anfordern und das Ergebnis nach in_reply_to_status_id filtern. Letzteres sollte der bestimmten ID aus Schritt 1 entsprechen

Willy
quelle
2

Als Staaten satheesh funktioniert es großartig. Hier ist der REST-API-Code, den ich verwendet habe

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
quelle
2

Ich bin vor einigen Monaten bei der Arbeit auf dasselbe Problem gestoßen, da ich zuvor ihren related_tweetsEndpunkt in REST V1 verwendet habe.

Also musste ich eine Problemumgehung erstellen, die ich hier dokumentiert habe:
http://adriancrepaz.com/twitter_conversations_api Mirror - Github Fork

Diese Klasse sollte genau das tun, was Sie wollen. Es kratzt den HTML-Code der mobilen Site und analysiert eine Konversation. Ich habe es für eine Weile benutzt und es scheint sehr zuverlässig zu sein.

Um ein Gespräch zu führen ...

Anfrage

<?php

require_once 'acTwitterConversation.php';

$twitter = new acTwitterConversation;
$conversation = $twitter->fetchConversion(324215761998594048);
print_r($conversation);

?>

Antwort

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
quelle
1

Sie können das Twarc- Paket in Python verwenden, um alle Antworten auf einen Tweet zu sammeln.

twarc replies 824077910927691778 > replies.jsonl

Es ist auch möglich, alle Antwortketten (Antworten auf die Antworten) auf einen Tweet mit dem folgenden Befehl zu sammeln:

twarc replies 824077910927691778 --recursive

pouria babvey
quelle
Gibt es eine Möglichkeit, dies in Javascript zu tun?
Yashatreya
Ich bin nicht sicher, ich habe nicht überprüft, werde Sie wissen lassen, wenn etwas gefunden.
pouria babvey
1

Da statuses / Erwähnungen_Timeline die letzten 20 Erwähnungen zurückgibt, ist dies nicht so effizient aufzurufen, und es gibt Einschränkungen wie 75 Anforderungen pro Fenster (15 Minuten). In diesem Fall können wir user_timeline verwenden

Der beste Weg: 1. Rufen Sie die Parameter screen_name oder user_id von status / show ab.
2. Verwenden Sie jetzt user_timeline
GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=screen_name&count=count

(screen_name == name, den wir von status / show erhalten haben)
(count == 1 bis max 200)
count: Gibt die Anzahl der Tweets an, die abgerufen und abgerufen werden sollen, bis zu maximal 200 pro eindeutiger Anforderung.

aus dem Ergebnis Analysieren Sie einfach diese Rückgabe und suchen Sie nach einer in_reply_to_status_id, die mit der ID des ursprünglichen Tweets übereinstimmt.

Natürlich ist es nicht ideal, aber es wird funktionieren.

Dilip
quelle