Ответы на конкретный твит, 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;
     }

}

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


есть ли способ сделать это в 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, соответствующего идентификатору исходного твита.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.