Trả lời một tweet cụ thể, API Twitter


Câu trả lời:


52

Theo những gì tôi hiểu, không có cách nào để làm điều đó trực tiếp (ít nhất là không phải bây giờ). Có vẻ như một cái gì đó cần được thêm vào. Gần đây họ đã thêm một số khả năng 'retweet', có vẻ hợp lý khi thêm điều này.

Đây là một cách khả thi để làm điều này, dữ liệu tweet mẫu đầu tiên (từ 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>
     ...

Từ status/showbạn có thể tìm thấy id của người dùng. Sau đó statuses/mentions_timelinesẽ trả về danh sách trạng thái cho người dùng. Chỉ cần phân tích cú pháp mà trả về tìm kiếm in_reply_to_status_idkết quả phù hợp với tweet gốc id.


Giả sử user2 trả lời tweet của user1. Để tìm ra điều đó từ tweet của user1, tôi cần tìm kiếm các đề cập cho user1. Nhưng trong trường hợp tôi không thể xác thực là user1 thì sao? Các đề cập không được truy cập công khai mà không có xác thực?
letronje

@letronje Không phải tôi biết - bạn có thể sử dụng API tìm kiếm để tìm '@ user1' trong tweet, nhưng tôi không nghĩ sẽ đáng tin cậy bằng việc sử dụng status/mentions.
Tim Lytle

1
Trông giống như bức tượng / đề cập đến việc bị phản đối, vì vậy tôi muốn phân tích cú pháp tìm kiếm / tweets q = @ screenname thay vì:? Dev.twitter.com/docs/api/1.1/get/search/tweets
Dunc

4
Trông @Dunc như nó chỉ được thay đổi đểstatus/mentions_timeline
Tim Lytle

@Tim Điểm tốt. Nhưng trường hợp sử dụng của tôi tương tự như của letronje (tức là tweet có thể từ bất kỳ ai) vì vậy tôi cần sử dụng tìm kiếm thay thế.
Dunc

51

Đây là quy trình để nhận được câu trả lời cho một tweet

  1. khi bạn tìm nạp tweet, hãy lưu trữ tweetId tức là., id_str
  2. sử dụng api tìm kiếm twitter thực hiện truy vấn sau [q="to:$tweeterusername", sinceId = $tweetId]
  3. Lặp lại tất cả các kết quả, các kết quả khớp với in_reply_to_status_id_str to $tweetidlà câu trả lời cho bài đăng.

10

Đây là giải pháp của tôi. Nó sử dụng thư viện Twitter Oauth PHP của Abraham: https://github.com/abraham/twitteroauth

Nó yêu cầu bạn biết thuộc tính screen_name của người dùng Twitter cũng như thuộc tính id_str của tweet được đề cập. Bằng cách này, bạn có thể nhận nguồn cấp dữ liệu hội thoại tùy ý từ bất kỳ tweet nào của người dùng tùy ý:

* CẬP NHẬT: Mã được làm mới để phản ánh quyền truy cập đối tượng so với quyền truy cập mảng:

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
Tại sao điều này lại bị bỏ phiếu? Nó hoạt động chính xác như đã nêu và trả lời chính xác vấn đề. Hơn nữa, phương pháp của tôi khác với @vsubbotin ở chỗ bạn có thể sử dụng bất kỳ id nào của Tweeter thay vì id của chính bạn.
lincolnberryiii

3
Điều này là tốt, nhưng có thể vượt quá giới hạn tỷ giá có giá trị (180 mỗi oauth). 180 tweet chạy bằng phương pháp này ... see ya!
Mike Barwick

8

Twitter có một api không có giấy tờ được gọi là liên quan đến kết quả. Nó sẽ cung cấp cho bạn câu trả lời cho id tweet được chỉ định. Không chắc mức độ đáng tin cậy của nó như thử nghiệm của nó, tuy nhiên đây là cùng một lệnh gọi api được gọi trên web twitter.

Sử dụng có nguy cơ của riêng bạn. :)

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

Để biết thêm thông tin, hãy xem cuộc thảo luận này trên dev.twitter: https://dev.twitter.com/discussions/293


34
API này không hoạt động nữa
Mathieu

Đúng. như mathieu đã nói, nó không còn hoạt động nữa. Nó nói {u'message ': u'Sorry, trang đó không tồn tại', u'code ': 34}
shadab.tughlaq

7

Ở đây tôi đang chia sẻ mã R đơn giản để tìm nạp trả lời của một tweet cụ thể

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

Tôi đã thực hiện điều này theo cách sau:

1) trạng thái / cập nhật trả về id của trạng thái cuối cùng (nếu include_entities là true) 2) Sau đó, bạn có thể yêu cầu các trạng thái / đề cập và lọc kết quả theo in_reply_to_status_id. Mã sau phải bằng với id cụ thể từ bước 1


2

Như trạng thái satheesh nó hoạt động tốt. Đây là mã REST API mà tôi đã sử dụng

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

Tôi đã gặp vấn đề tương tự cách đây vài tháng tại nơi làm việc, vì trước đây tôi đã sử dụng related_tweetsđiểm cuối của họ trong REST V1.

Vì vậy, tôi đã phải tạo một cách giải quyết, mà tôi đã ghi lại ở đây:
http://adriancrepaz.com/twitter_conversations_api Mirror - Github fork

Lớp học này sẽ làm chính xác những gì bạn muốn. Nó quét HTML của trang web dành cho thiết bị di động và phân tích cú pháp một cuộc hội thoại. Tôi đã sử dụng nó một thời gian và nó có vẻ rất đáng tin cậy.

Để tìm nạp một cuộc trò chuyện ...

Yêu cầu

<?php

require_once 'acTwitterConversation.php';

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

?>

Phản ứng

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

Bạn có thể sử dụng gói twarc trong python để thu thập tất cả các câu trả lời cho một tweet.

twarc replies 824077910927691778 > replies.jsonl

Ngoài ra, có thể thu thập tất cả các chuỗi trả lời (câu trả lời cho câu trả lời) cho một tweet bằng cách sử dụng lệnh dưới đây:

twarc replies 824077910927691778 --recursive


có cách nào để làm điều này trong javascript không?
yashatreya

Tôi không chắc, tôi đã không kiểm tra, sẽ cho bạn biết nếu tìm thấy thứ gì đó.
pouria babvey

1

vì statuses / mentions_timeline sẽ trả về 20 lượt đề cập gần đây nhất, điều này sẽ không hiệu quả để gọi và nó có các giới hạn như 75 yêu cầu mỗi cửa sổ (15 phút), với điều này, chúng ta có thể sử dụng user_timeline

cách tốt nhất: 1. lấy tham số screen_name hoặc user_id từ trạng thái / hiển thị.
2. bây giờ sử dụng user_timeline
GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=screen_name&count=count

(screen_name == tên mà chúng tôi nhận được Từ trạng thái / hiển thị)
(count == 1 đến max 200)
count: Chỉ định số lượng Tweet để thử và truy xuất, tối đa 200 cho mỗi yêu cầu riêng biệt.

từ kết quả Chỉ cần phân tích cú pháp mà trả về tìm kiếm một in_reply_to_status_id khớp với id của tweet ban đầu.

Rõ ràng, nó không lý tưởng, nhưng nó sẽ hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.