Відповідає на певний твіт, 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.