Twitter API'sinde belirli bir tweet'e verilen yanıtları almanın bir yolu var mı? Teşekkürler
Yanıtlar:
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/show
size Kullanıcının kimliği bulabilir. Ardından statuses/mentions_timeline
bir kullanıcı için bir durum listesi döndürür. in_reply_to_status_id
Orijinal tweet'lerle eşleşen bir tweet'i ararken o dönüşü ayrıştırın id
.
status/mentions
.
status/mentions_timeline
İşte bir tweet için yanıt alma prosedürü
[q="to:$tweeterusername", sinceId = $tweetId]
in_reply_to_status_id_str to $tweetid
verilen yanıtlardır.İş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;
}
}
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
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.
Kolay pragmatik bir şekilde değil. Bunun için bir özellik isteği var:
http://code.google.com/p/twitter-api/issues/detail?id=142
API sağlayan birkaç üçüncü taraf web sitesi vardır, ancak genellikle durumları gözden kaçırırlar.
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;
Daha önce related_tweets
uç 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
)
)
....
)
)
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
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.