Belirli bir tweet'e yanıt verir, Twitter API


Yanıtlar:


53

Anladığıma göre, bunu doğrudan yapmanın bir yolu yok (en azından şimdi değil). Eklenmesi gereken bir şey gibi görünüyor. Son zamanlarda bazı 'retweet' yetenekleri eklediler, bunu eklemek mantıklı görünüyor.

Bunu yapmanın olası bir yolu, ilk örnek tweet verileri (nereden 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>
     ...

Gönderen status/showsize Kullanıcının kimliği bulabilir. Ardından statuses/mentions_timelinebir kullanıcı için bir durum listesi döndürür. in_reply_to_status_idOrijinal tweet'lerle eşleşen bir tweet'i ararken o dönüşü ayrıştırın id.


Diyelim ki user2, user1'in tweet'ine cevap veriyor. Bunu user1'in tweet'inden anlamak için user1 için bahsetmeleri aramam gerekir. Peki kullanıcı1 olarak kimlik doğrulayamadığım durumda ne olur? Yetkilendirme olmadan herkes tarafından erişilebilir değil mi?
letronje

@letronje Bildiğim kadarıyla değil - tweet'te '@ user1'i bulmak için arama API'sini kullanabilirsiniz, ancak kullanmak kadar güvenilir olacağını düşünmüyorum status/mentions.
Tim Lytle

1
?: Ben arama / tweet'leri q = @ Ekranismi yerine ayrıştırmak diye, heykel gibi görünüyor / itiraz edildi bahsedenler dev.twitter.com/docs/api/1.1/get/search/tweets
Dunc

4
@Dunc olarak değiştirilmiş gibi görünüyorstatus/mentions_timeline
Tim Lytle

@Tim İyi nokta. Ama benim kullanım durumum letronje'ye benziyor (yani tweet herhangi birinden olabilir) bu yüzden bunun yerine aramayı kullanmam gerekiyor.
Dunc

52

İşte bir tweet için yanıt alma prosedürü

  1. tweet'i getirdiğinizde tweetId yani, id_str depola
  2. twitter arama api'sini kullanarak aşağıdaki sorguyu yapın [q="to:$tweeterusername", sinceId = $tweetId]
  3. Tüm sonuçları döngüye alın, eşleşen sonuçlar gönderiye in_reply_to_status_id_str to $tweetidverilen yanıtlardır.

10

İşte benim çözümüm. Abraham'ın Twitter Oauth PHP kitaplığını kullanır: https://github.com/abraham/twitteroauth

Twitter kullanıcısının screen_name özniteliğini ve söz konusu tweet'in id_str özniteliğini bilmenizi gerektirir. Bu şekilde, herhangi bir rastgele kullanıcının tweet'inden rastgele bir konuşma beslemesi alabilirsiniz:

* GÜNCELLEME: Nesne erişimi ile dizi erişimini yansıtmak için yenilenen kod:

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
Bu neden reddedildi? Tam olarak belirtildiği gibi çalışır ve soruna tam olarak yanıt verir. Ayrıca, kendi yöntemim yerine herhangi bir Tweeter kimliğini kullanabilmeniz açısından benim yöntemim @vsubbotin'den farklı.
lincolnberryiii

4
Bu iyidir, ancak değerli oran sınırlarını (oauth başına 180) tüketebilir. Bu yöntemle 180 tweet çalıştırın ... görüşürüz!
Mike Barwick

8

Twitter, related_results adında belgelenmemiş bir API'ye sahiptir. Size belirtilen tweet kimliği için yanıtlar verecektir. Deneysel olarak ne kadar güvenilir olduğundan emin değilim, ancak bu, twitter web'de çağrılan aynı api çağrısı.

Kendi sorumluluğunuzdadır kullanın. :)

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

Daha fazla bilgi için dev.twitter'deki bu tartışmaya göz atın: https://dev.twitter.com/discussions/293


35
Bu API artık aktif değil
mathieu

Evet. mathieu'nun dediği gibi, artık aktif değil. {U'message 'yazıyor: u'Özür dilerim, o sayfa yok', u'code ': 34}
shadab.tughlaq

7

Burada belirli bir tweet'in yanıtını almak için basit R kodunu paylaşıyorum

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

Bunu şu şekilde uyguladım:

1) durumlar / güncelleme, son durumun kimliğini döndürür (include_entities doğruysa) 2) Daha sonra durumları / bahisleri isteyebilir ve sonucu in_reply_to_status_id ile filtreleyebilirsiniz. İkincisi, 1. adımdaki belirli kimliğe eşit olmalıdır


2

Eyaletler satheesh olarak harika çalışıyor. İşte kullandığım REST API kodu

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

Daha önce related_tweetsuç noktalarını REST V1'de kullandığımdan, birkaç ay önce işte aynı sorunla karşılaştım .

Bu nedenle, burada belgelediğim bir geçici çözüm oluşturmalıydım:
http://adriancrepaz.com/twitter_conversations_api Mirror - Github fork

Bu sınıf tam olarak istediğinizi yapmalıdır. Mobil sitenin HTML'sini çıkarır ve bir görüşmeyi ayrıştırır. Bir süredir kullandım ve çok güvenilir görünüyor.

Bir görüşmeyi getirmek için ...

İstek

<?php

require_once 'acTwitterConversation.php';

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

?>

Tepki

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

Bir tweet'e gönderilen tüm yanıtları toplamak için python'da twarc paketini kullanabilirsiniz .

twarc replies 824077910927691778 > replies.jsonl

Ayrıca, aşağıdaki komutu kullanarak tüm yanıt zincirlerini (yanıtlara verilen yanıtları) bir tweet'e toplamak mümkündür:

twarc replies 824077910927691778 --recursive


bunu javascript'te yapmanın bir yolu var mı?
yashatreya

Emin değilim, kontrol etmedim, bir şey bulursa size haber veririm.
pouria babvey

1

statuses / mentions_timeline en son 20 bahsi döndüreceğinden , bu çağrı için o kadar verimli olmayacak ve pencere başına 75 istek (15dk) gibi sınırlamaları vardır, bunun yerine user_timeline kullanabiliriz

en iyi yol: 1. status / show'dan screen_name veya user_id parametrelerini alın.
2. şimdi user_timeline
GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=screen_name&count=count kullanın

(screen_name == From status / show)
(count == 1 to max 200)
count: Farklı istek başına en fazla 200 olmak üzere denenecek ve alınacak Tweet sayısını belirtir.

sonuçtan Orijinal tweet'in kimliğiyle eşleşen bir in_reply_to_status_id arayan dönüşü ayrıştırın.

Açıkçası ideal değil ama işe yarayacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.