ตอบกลับทวีตเฉพาะ 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_idid


ให้บอกว่า user2 ตอบกลับทวีตของ user1 หากต้องการทราบว่าจากทวีตของ user1 ฉันจะต้องค้นหาการกล่าวถึงสำหรับ user1 แต่จะเกิดอะไรขึ้นเมื่อฉันไม่สามารถพิสูจน์ตัวตนเป็น user1 ได้? การกล่าวถึงไม่สามารถเข้าถึงได้แบบสาธารณะโดยไม่ต้องรับรองความถูกต้อง?
letronje

@letronje ไม่ว่าฉันรู้ - คุณสามารถใช้ API ค้นหา '@ user1' ในทวีต status/mentionsแต่ผมไม่คิดว่าจะเป็นที่เชื่อถือได้ตามการใช้
Tim Lytle

1
ดูเหมือนว่ารูปปั้น / การกล่าวถึงจะเลิกใช้แล้วดังนั้นฉันจึงแยกวิเคราะห์การค้นหา / ทวีต q = @ screenName แทน: dev.twitter.com/docs/api/1.1/get/search/tweets
Dunc

4
@Dunc ดูเหมือนเพิ่งเปลี่ยนเป็นstatus/mentions_timeline
Tim Lytle

@ ทิมจุดดี. แต่กรณีการใช้งานของฉันคล้ายกับของ letronje (เช่นทวีตอาจมาจากใครก็ได้) ดังนั้นฉันจึงต้องใช้การค้นหาแทน
Dunc

52

นี่คือขั้นตอนในการรับการตอบกลับสำหรับทวีต

  1. เมื่อคุณเรียกเก็บทวีตที่เก็บทวีตคือ id_str
  2. ใช้ api การค้นหาของ twitter ทำแบบสอบถามต่อไปนี้ [q="to:$tweeterusername", sinceId = $tweetId]
  3. วนin_reply_to_status_id_str to $tweetidซ้ำผลลัพธ์ทั้งหมดผลลัพธ์ที่ตรงกับคำตอบของโพสต์

10

นี่คือทางออกของฉัน มันใช้ไลบรารี Twitter Oauth PHP ของ Abraham: https://github.com/abraham/twitteroauth

คุณต้องรู้แอตทริบิวต์ screen_name ของผู้ใช้ Twitter รวมถึงแอตทริบิวต์ id_str ของทวีตที่เป็นปัญหา ด้วยวิธีนี้คุณจะได้รับฟีดการสนทนาโดยพลการจากทวีตของผู้ใช้ใด ๆ :

* UPDATE:รหัสที่รีเฟรชเพื่อสะท้อนการเข้าถึงวัตถุเทียบกับการเข้าถึงอาร์เรย์:

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 ทวีตทำงานด้วยวิธีนี้ ... เจอกัน!
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


35
API นี้ไม่ทำงานอีกต่อไป
mathieu

ใช่. ตามที่ mathieu กล่าวว่าไม่มีการใช้งานอีกต่อไป มันบอกว่า {u'message: u'Sorry, หน้าที่ไม่อยู่ '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 หลังควรเท่ากับ 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 fork

ชั้นเรียนนี้ควรทำในสิ่งที่คุณต้องการ จะคัดลอก 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


มีวิธีทำในจาวาสคริปต์ไหม
yashatreya

ฉันไม่แน่ใจฉันไม่ได้ตรวจสอบจะแจ้งให้คุณทราบหากพบบางสิ่งบางอย่าง
pouria babvey

1

เนื่องจาก statuses / mentions_timeline จะส่งคืนการกล่าวถึงล่าสุด 20 รายการซึ่งจะไม่มีประสิทธิภาพในการโทรและมีข้อ จำกัด เช่น 75 คำขอต่อหน้าต่าง (15 นาที) เนื่องจากสิ่งนี้เราสามารถใช้user_timeline

วิธีที่ดีที่สุด: 1. รับพารามิเตอร์ screen_name หรือ user_id จากสถานะ / แสดง
2. ตอนนี้ใช้user_timeline
GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=screen_name&count=count

(screen_name == ชื่อที่เราได้รับจากสถานะ / การแสดง)
(นับ == 1 ถึงสูงสุด 200)
จำนวน: ระบุจำนวนทวีตที่จะพยายามและเรียกคืนสูงสุด 200 ต่อคำขอที่แตกต่างกัน

จากผลลัพธ์เพียงแยกวิเคราะห์ผลตอบแทนที่มองหา in_reply_to_status_id ที่ตรงกับ id ของทวีตดั้งเดิม

เห็นได้ชัดว่ามันไม่เหมาะ แต่จะได้ผล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.