Ответы на конкретный твит, Twitter API

Ответы:

53

Насколько я понимаю, это невозможно сделать напрямую (по крайней мере, сейчас). Похоже, что нужно добавить. Недавно они добавили некоторые возможности «ретвита», кажется логичным добавить и это.

Вот один из возможных способов сделать это, первый пример данных твита (из 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вы можете найти идентификатор пользователя. Затем statuses/mentions_timelineвернет список статуса для пользователя. Просто проанализируйте этот ответ в поисках in_reply_to_status_idсовпадения с исходным твитом id.

Тим Литл
источник
Допустим, user2 отвечает на твит пользователя user1. Чтобы выяснить это из твита пользователя user1, мне нужно будет найти упоминания пользователя user1. Но что в случае, если я не могу пройти аутентификацию как user1? Разве упоминания не доступны публично без авторизации?
letronje
@letronje Насколько я знаю, вы можете использовать API поиска, чтобы найти "@ user1" в твите, но я не думаю, что это было бы так надежно, как использование status/mentions.
Тим Литл,
1
Похоже , статуй / упоминает осуждается, так что я бы разобрать поиск / твитов д = @ ScreenName вместо:? Dev.twitter.com/docs/api/1.1/get/search/tweets
Dunc
4
@Dunc Похоже, его только что поменяли наstatus/mentions_timeline
Тим Литл,
@ Тим Хорошее замечание. Но мой вариант использования аналогичен сценарию letronje (т.е. твит может быть от кого угодно), поэтому мне нужно вместо этого использовать поиск.
Дунк
52

Вот процедура, чтобы получить ответы на твиты

  1. когда вы получаете твит, сохраните tweetId, т.е. id_str
  2. используя twitter search api, выполните следующий запрос [q="to:$tweeterusername", sinceId = $tweetId]
  3. Прокрутите все результаты, результаты совпадают in_reply_to_status_id_str to $tweetidс ответами на сообщение.
Сатиш
источник
10

Вот мое решение. Он использует PHP-библиотеку Twitter Oauth Авраама: https://github.com/abraham/twitteroauth

Для этого вам необходимо знать атрибут screen_name пользователя Twitter, а также атрибут 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;
     }

}
Lincolnberryiii
источник
3
Почему это было отклонено? Он работает точно так, как указано, и точно отвечает на проблему. Кроме того, мой метод отличается от @vsubbotin тем, что вы можете использовать любой идентификатор твитера вместо своего собственного.
lincolnberryiii
4
Это хорошо, но может съесть ценные ограничения скорости (180 на OAuth). 180 твитов запускаются с помощью этого метода ... увидимся!
Майк Барвик,
8

У Twitter есть недокументированный API под названием related_results. Он даст вам ответы на указанный идентификатор твита. Не уверен, насколько он надежен в качестве экспериментального, однако это тот же вызов API, который вызывается в сети Twitter.

Используйте на свой риск. :)

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

Для получения дополнительной информации ознакомьтесь с этим обсуждением на dev.twitter: https://dev.twitter.com/discussions/293

миназ
источник
35
Этот API больше не активен
mathieu
Да. как сказал Матье, он больше не активен. Там написано {u'message ': u'Извините, эта страница не существует', u'code ': 34}
shadab.tughlaq
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

Непросто прагматично. Для этого есть запрос функции:

http://code.google.com/p/twitter-api/issues/detail?id=142

Есть несколько сторонних веб-сайтов, которые предоставляют API, но они часто пропускают статусы.

Авраам
источник
gnip.com - это практически единственное стороннее место, где можно получить данные Twitter.
Авраам
3

Я реализовал это следующим образом:

1) statuses / update возвращает id последнего статуса (если include_entities истинно) 2) Затем вы можете запросить статусы / упоминания и отфильтровать результат по in_reply_to_status_id. Последний должен быть равен конкретному идентификатору из шага 1.

Вилли
источник
2

Как утверждает сатиш, он отлично работает. Вот код REST API, который я использовал

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конечную точку в REST V1.

Поэтому мне пришлось создать обходной путь, который я описал здесь:
http://adriancrepaz.com/twitter_conversations_api Mirror - вилка 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

Вы можете использовать пакет twarc в Python для сбора всех ответов на твит.

twarc replies 824077910927691778 > replies.jsonl

Кроме того, можно собрать все цепочки ответов (ответы на ответы) на твит, используя команду ниже:

twarc replies 824077910927691778 --recursive

Pouria Babvey
источник
есть ли способ сделать это в javascript?
Яшатрея
Не уверен, не проверял, дам знать, если что-то найду.
pouria babvey
1

поскольку statuses / mentions_timeline вернет 20 самых последних упоминаний, это будет не так эффективно для вызова, и у него есть ограничения, такие как 75 запросов на окно (15 минут), вместо этого мы можем использовать user_timeline

лучший способ: 1. получить параметры screen_name или user_id из status / show.
2. теперь используйте user_timeline
GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=screen_name&count=count

(screen_name == имя, которое мы получили From status / show)
(count == от 1 до max 200)
count: Определяет количество твитов, которые нужно попробовать и получить, до максимум 200 на отдельный запрос.

из результата Просто проанализируйте этот ответ в поисках in_reply_to_status_id, соответствующего идентификатору исходного твита.

Очевидно, не идеально, но работать будет.

Дилип
источник