Відповідає на певний твіт, Twitter API


Відповіді:


52

Наскільки я розумію, немає способу зробити це безпосередньо (принаймні зараз). Здається, це те, що слід додати. Нещодавно вони додали деякі можливості ретвіту, здається логічним додати і це.

Ось один із можливих способів зробити це, перший зразок даних твітів (від 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.


Скажімо, користувач2 відповідає на твіт користувача1. Щоб зрозуміти це з твіту користувача user1, мені потрібно було б шукати згадки для користувача1. Але що у випадку, коли я не можу пройти аутентифікацію як user1? Хіба згадки не доступні для всіх без авторизації?
— letronje

@letronje Не те, що я знаю - ви могли б використовувати API пошуку, щоб знайти '@ user1' у твіті, але я не думаю, що це було б настільки надійно, як використання status/mentions.
— Tim Lytle

1
Схоже , статуй / згадує засуджується, так що я б розібрати пошук / твітів д = @ ScreenName замість :? Dev.twitter.com/docs/api/1.1/get/search/tweets
— Dunc

4
@Dunc Схоже, що його щойно змінили наstatus/mentions_timeline
— Tim Lytle

@Tim Гарна думка. Але мій варіант використання подібний до letronje (тобто твіт може бути від кого завгодно), тому мені потрібно використовувати замість цього пошук.
— Dunc

51

Ось процедура отримання відповідей на твіти

  1. коли ви отримуєте твіт-сховище tweetId, тобто. id_str
  2. використовуючи API пошуку twitter, виконайте наступний запит [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;
     }

}

2
Чому це було проголосовано проти? Він працює точно так, як зазначено, і точно відповідає на проблему. Крім того, мій метод відрізняється від @vsubbotin тим, що ви можете використовувати будь-який ідентифікатор твітера замість свого власного.
— lincolnberryiii

3
Це добре, але може з’їсти цінні обмеження норми (180 за штуку). За допомогою цього методу працює 180 твітів ... бачимось!
— Mike Barwick

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


34
Цей API вже не активний
— mathieu

Так. як сказав Матьє, він більше не активний. Там написано {u'message ': u'Вибачте, ця сторінка не існує', u'code ': 34}
— shadab.tughlaq 02.03.15

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) статуси / оновлення повертає ідентифікатор останнього статусу (якщо 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 Дзеркало - вилка 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

оскільки statusses / mentions_timeline поверне 20 останніх згадувань, це буде не так ефективно викликати, і у нього є обмеження, такі як 75 запитів на вікно (15 хвилин), на підставі цього ми можемо використовувати user_timeline

найкращий спосіб: 1. отримати параметри "ім'я екрана" або "ім'я користувача" із статусу / шоу.
2. тепер використовуйте user_timeline
GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=screen_name&count=count

(ім'я екрана == ім'я, яке ми отримали від статусу / шоу)
(count == 1 до макс. 200)
count: Вказує кількість твітів, які потрібно спробувати отримати, максимум до 200 на окремий запит.

з результату Просто розберіть, що повертається, шукаючи in_reply_to_status_id, який відповідає ідентифікатору оригінального твіту.

Очевидно, це не ідеально, але це спрацює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.