Ответы на определенный твит, Twitter API
Есть ли способ в Twitter API получить ответы на определенный твит? Спасибо
13 ответов
Из того, что я понимаю, нет способа сделать это напрямую (по крайней мере, не сейчас). Похоже, что-то, что должно быть добавлено. Недавно они добавили некоторые возможности "ретвитов", кажется логичным добавить и это.
Вот один из возможных способов сделать это, первый пример данных твита (из 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
,
Вот процедура получения ответов на твиты
- когда вы выбираете твит, сохраняйте твит, т. е. id_str
- используя поиск в Твиттере API, выполните следующий запрос
[q="to:$tweeterusername", sinceId = $tweetId]
- Зациклить все результаты, результаты, соответствующие
in_reply_to_status_id_str to $tweetid
это ответы на пост.
Twitter API v2 теперь поддерживает это с помощью поля. Вы можете прочитать больше в документации.
Сначала запросите поле твита.
https://api.twitter.com/2/tweets?ids=1225917697675886593&tweet.fields=conversation_id
Во-вторых, затем ищите твиты, используя
conversation_id
как запрос.
https://api.twitter.com/2/tweets/search/recent?query=conversation_id:1225912275971657728
Это минимальный пример, поэтому вы должны добавить другие поля по мере необходимости в URL-адрес.
Твиттер имеет недокументированный API-интерфейс related_results. Он даст вам ответы на указанный твит идентификатор. Не уверен, насколько он надежен в качестве экспериментального, однако это тот же вызов API, который вызывается в твиттере.
Используйте на свой риск.:)
https://api.twitter.com/1/related_results/show/172019363942117377.json?include_entities=1
Для получения дополнительной информации, проверьте это обсуждение на dev.twitter: https://dev.twitter.com/discussions/293
Вот мое решение. Он использует 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;
}
}
Здесь я делюсь простым 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.
Вы можете использовать пакет twarc в Python для сбора всех ответов на твит.
twarc replies 824077910927691778 > replies.jsonl
Кроме того, можно собрать все цепочки ответов (ответы на ответы) на твит, используя команду ниже:
twarc replies 824077910927691778 --recursive
Не простым прагматичным способом. Для этого есть запрос функции:
http://code.google.com/p/twitter-api/issues/detail?id=142
Есть несколько сторонних веб-сайтов, которые предоставляют API, но они часто пропускают статусы.
Я реализовал это следующим образом:
1) statuses / update возвращает идентификатор последнего статуса (если include_entities равен true) 2) Затем вы можете запросить статусы / упоминания и отфильтровать результат по in_reply_to_status_id. Последний должен быть равен конкретному идентификатору из шага 1
Я столкнулся с той же проблемой несколько месяцев назад на работе, так как ранее я использовал их related_tweets
конечная точка в REST V1.
Поэтому мне пришлось создать обходной путь, который я задокументировал здесь. http://adriancrepaz.com/twitter_conversations_api
Этот класс должен делать именно то, что вы хотите. Он очищает 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
)
)
....
)
)
Надеюсь, это поможет, Адриан.
Как говорится сатиш это прекрасно работает. Вот код 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;
Поскольку statuses / mentions_timeline вернет 20 самых последних упоминаний, это будет не так эффективно для вызова, и у него есть ограничения, такие как 75 запросов на окно (15 минут), вместо этого мы можем использовать user_timeline
лучший способ: 1. получить параметры screen_name или user_id из status / show.
2. теперь используйте user_timeline
GET https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=screen_name&count=count
(screen_name == name, которое мы получили From status / show)
(count == от 1 до max 200)
count: Определяет количество твитов, которые нужно попытаться получить, до 200 на отдельный запрос.
из результата Просто проанализируйте этот ответ в поисках in_reply_to_status_id, соответствующего идентификатору исходного твита.
Очевидно, это не идеально, но работать будет.
Если вам нужны все ответы, относящиеся к одному пользователю за ЛЮБОЙ ДИАПАЗОН ДАТ, и вам нужно сделать это только один раз (например, для загрузки ваших материалов), это выполнимо.
- Сделать приложение для разработки Twitter
- Подать заявку на повышенные учетные данные. Вы моментально получите их после заполнения форм. По крайней мере, я сделал это на двух разных аккаунтах сегодня.
- У вашей учетной записи разработки теперь есть доступ к поиску API версии 1.1 на уровне «Песочница». Вы получаете 50 запросов против
tweets/search/fullarchive
конечная точка достигает максимума в 5000 возвращенных твитов.
- У вашей учетной записи разработки теперь есть доступ к поиску API версии 1.1 на уровне «Песочница». Вы получаете 50 запросов против
- Создайте среду для своего приложения для разработки.
- Сделать скрипт для запроса
https://api.twitter.com/1.1/tweets/search/fullarchive/<env name>.json
где<env name>
это имя вашей среды. Сделайте свой запросto:your_twitter_username
иfromDate
когда вы создали свою учетную запись,toDate
сегодня. - Итерация по результатам
Это не будет получать ваши ответы рекурсивно