特定のツイート、TwitterAPIへの返信


回答:


52

私が理解していることから、それを直接行う方法はありません(少なくとも今はそうではありません)。追加する必要があるもののようです。彼らは最近、いくつかの「リツイート」機能を追加しましたが、これも追加するのが理にかなっているようです。

これを行うための1つの可能な方法は、最初のサンプルツイートデータ(から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>
     ...

そこからstatus/showユーザーのIDを見つけることができます。次にstatuses/mentions_timeline、ユーザーのステータスのリストを返します。そのリターンを解析してin_reply_to_status_id、元のツイートに一致するものを探しidます。


user2がuser1のツイートに返信するとします。user1のツイートからそれを理解するには、user1のメンションを検索する必要があります。しかし、user1として認証できない場合はどうなりますか?認証なしで公にアクセス可能なことについて言及していませんか?
letronje 2010年

@letronje私が知っていることではありません-検索APIを使用してツイート内の「@ user1」を見つけることができますが、を使用するほど信頼性は低いと思いますstatus/mentions
ティムライトル

1
彫像/メンションは非推奨のようですので、代わりにsearch / tweets?q = @ screenNameを解析します:dev.twitter.com/docs/api/1.1/get/search/tweets
Dunc

4
@Dunc変更されたばかりのようですstatus/mentions_timeline
Tim Lytle

@Tim良い点。しかし、私のユースケースはletronjeのユースケースに似ているため(つまり、ツイートは誰からでも可能です)、代わりに検索を使用する必要があります。
ダンク2014

51

ツイートへの返信を取得する手順は次のとおりです

  1. ツイートストアをフェッチするときは、tweetId、つまりid_str
  2. Twitter Search APIを使用して、次のクエリを実行します [q="to:$tweeterusername", sinceId = $tweetId]
  3. すべての結果をループします。一致する結果in_reply_to_status_id_str to $tweetidが投稿への返信です。

10

これが私の解決策です。AbrahamのTwitterOauth PHPライブラリを利用しています:https//github.com/abraham/twitteroauth

Twitterユーザーのscreen_name属性と、問題のツイートのid_str属性を知っている必要があります。このようにして、任意のユーザーのツイートから任意の会話フィードを取得できます。

*更新:オブジェクトアクセスと配列アクセスを反映するようにコードを更新しました

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
なぜこれが却下されたのですか?記載されているとおりに機能し、問題に正確に答えます。さらに、私のメソッドは@vsubbotinとは異なり、独自のIDの代わりに任意のツイーターのIDを使用できます。
lincolnberryiii 2014

3
これは良いことですが、貴重なレート制限(oauthあたり180)を使い果たす可能性があります。この方法で180件のツイートが実行されます...じゃあね!
マイクバーウィック2016

8

Twitterには、related_resultsと呼ばれる文書化されていないAPIがあります。指定されたツイートIDに対する返信が表示されます。実験的なものとしてどれほど信頼できるかはわかりませんが、これはTwitterWebで呼び出されるのと同じAPI呼び出しです。

自己責任。:)

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

詳細については、dev.twitterでこのディスカッションをチェックしてくださいhttps://dev.twitter.com/discussions/293


34
このAPIはもうアクティブではありません
mathieu 2013年

はい。マシューが言ったように、それはもはや活発ではありません。{u 'メッセージ':u '申し訳ありませんが、そのページは存在しません'、u 'コード':34}
shadab.tughlaq 2015年

7

ここでは、特定のツイートの返信を取得するための簡単なRコードを共有しています

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

私はこれを次の方法で実装しました:

1)statuss / updateは最後のステータスのIDを返します(include_entitiesがtrueの場合)2)次に、statuss /メンションを要求し、in_reply_to_status_idで結果をフィルタリングできます。後者は、ステップ1の特定のIDと同じである必要があります


2

州がsatheeshとして、それは素晴らしい働きをします。これが私が使用したRESTAPIコードです

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

以前related_tweetsはRESTV1でエンドポイントを使用していたので、数か月前に職場で同じ問題に遭遇しました。

:私は、私がここで説明している回避策は、作成する必要がありましたので、
http://adriancrepaz.com/twitter_conversations_api ミラー- Githubのフォークを

このクラスは、あなたが望むことを正確に実行する必要があります。モバイルサイトのHTMLをスクレイプし、会話を解析します。私はしばらくそれを使用しました、そしてそれは非常に信頼できるようです。

会話を取得するには...

リクエスト

<?php

require_once 'acTwitterConversation.php';

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

?>

応答

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

Pythonでtwarcパッケージを使用して、ツイートへのすべての返信を収集できます。

twarc replies 824077910927691778 > replies.jsonl

また、以下のコマンドを使用して、ツイートに対するすべての返信チェーン(返信への返信)を収集することもできます。

twarc replies 824077910927691778 --recursive


javascriptでこれを行う方法はありますか?
yashatreya

確認していませんが、何か見つかった場合はお知らせします。
pouria babvey

1

statuss / ments_timelineは最新の20件の言及を返すため、これを呼び出すのはそれほど効率的ではなく、ウィンドウあたり75リクエスト(15分)などの制限があります。これを使用すると、user_timelineを使用できます

最良の方法:1。status/ showからscreen_nameまたはuser_idパラメーターを取得します。
2.今使用user_timeline
GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=screen_name&count=count

(screen_name ==ステータス/ショーから取得した名前)
(count == 1から最大200)
count:個別のリクエストごとに最大200まで、取得しようとするツイートの数を指定します。

結果からその戻り値を解析して、元のツイートのIDと一致するin_reply_to_status_idを探します。

明らかに、それは理想的ではありませんが、機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.