Получите Twitter-канал как JSON без аутентификации
Несколько лет назад я написал небольшой JavaScript, который схватил последнее (т.н.) пользователей, а затем разобрал его для отображения, включая ссылки, дату и т.д.
Он использовал этот json-вызов для извлечения твитов, и он больше не работает.
http://twitter.com/statuses/user_timeline/radfan.json
Теперь он возвращает ошибку:
{"errors":[{"message":"Sorry, that page does not exist","code":34}]}
Я рассмотрел использование версии api (код ниже), но для этого требуется аутентификация, которую я бы предпочел избежать, поскольку она просто отображает мой последний твит на моем веб-сайте, который является общедоступным на моей странице профиля:
http://api.twitter.com/1/statuses/radfan.json
Я не поддерживал изменения в API Twitter, поскольку я больше не работаю с ним, есть ли способ обойти эту проблему или это уже невозможно?
Ответы
Ответ 1
Как вы можете видеть в документации, используя REST API, вам понадобится OAuth Tokens, чтобы сделать это. К счастью, мы можем использовать Поиск (который не использует OAuth) и использовать оператор from:[USERNAME]
Пример:
http://search.twitter.com/search.json?q=from:marcofolio
Дает вам объект JSON с твитами от этого пользователя, где
object.results[0]
предоставит вам последний твит.
Ответ 2
Раньше API поиска был единственным API-интерфейсом Twitter, который не требовал какой-либо формы OAuth. Теперь для этого требуется auth.
Twitter API поиска приобретается у стороннего приобретения - они редко поддерживают его и, по-видимому, не используют его, даже если он существует. Кроме того, существует множество ограничений для полезной нагрузки, включая, но не ограничиваясь, сильно уменьшенный набор пар key: value в JSON или XML, который вы вернетесь.
Когда я услышал это, я был в шоке. Я потратил много времени на выяснение того, как использовать минимальное количество кода для простого запроса GET (например, отображения временной шкалы).
Я решил пойти по маршруту OAuth, чтобы обеспечить соответствующую полезную нагрузку. Для этого вам нужен серверный язык. JavaScript отображается конечным пользователям, и, следовательно, это плохая идея включить в <.sys файл > ключи и секреты.
Я не хотел использовать большую библиотеку, поэтому для меня был ответ PHP и помощь от ответа @Rivers здесь. Ответ под ним @lackovic10 описывает, как включать запросы в вашу аутентификацию.
Надеюсь, это поможет другим сэкономить время, думая о том, как использовать API Twitter с новым требованием OAuth.
Ответ 3
Вы можете получить доступ и очистить Twitter через расширенный поиск без входа в систему:
Запрос GET
При выполнении основного запроса поиска вы получаете:
https://twitter.com/search?q=Babylon%205&src=typd
- q (наш запрос закодирован)
- src (предполагается, что он является источником запроса, т.е. введенным)
по умолчанию, Twitter возвращает 25 результатов, но если вы нажмете
all
вы можете получить твиты в реальном времени:
https://twitter.com/search?f=realtime&q=Babylon%205&src=typd
Содержимое JSON
Дополнительные твиты загружаются на страницу через AJAX:
https://twitter.com/i/search/timeline?f=realtime&q=Babylon%205&src=typd&include_available_features=1&include_entities=1&last_note_ts=85&max_position=TWEET-553069642609344512-553159310448918528-BD1UO2FFu9QAAAAAAAAETAAAAAcAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Используйте max_position
для запроса следующих твитов
Следующий массив json возвращает все, что вам нужно, чтобы очистить содержимое:
https://twitter.com/i/search/timeline?f=realtime&q=Babylon%205&src=typd
- has_more_items (bool)
- items_html (html)
- max_position (ключ)
- refresh_cursor (ключ)
Элементы DOM
Вот список DOM elements
, который вы можете использовать для извлечения
Авторы twitter handle
div.original-tweet[data-tweet-id]
Имя автора
div.original-tweet[data-name]
Идентификатор пользователя автора
div.original-tweet[data-user-id]
Отметка времени публикации
span._timestamp[data-time]
Временная метка сообщения в ms
span._timestamp[data-time-ms]
Текст Tweet
p.tweet-text
Число Retweets
span.ProfileTweet-action–retweet > span.ProfileTweet-actionCount[data-tweet-stat-count]
Число Favo
span.ProfileTweet-action–favorite > span.ProfileTweet-actionCount[data-tweet-stat-count]
Ресурсы
Ответ 4
Twitter перешел в систему OAuth для большинства вызовов API. Они также сделали некоторые работы, которые могли повлиять на это - https://dev.twitter.com/discussions/10803
Ответ 5
Если вы все еще ищете неавторизованные твиты в JSON, это должно работать:
https://github.com/cosmocatalano/tweet-2-json
Ответ 6
Вы можете использовать twitter api v1 для приема твитов без использования OAuth. Например: эта ссылка включает @jack последние 100 твитов.
Документация по временной шкале здесь.
Ответ 7
Вот быстрый взломать (на самом деле взломать, следует использовать с осторожностью, поскольку это не будущее доказательство), который использует http://anyorigin.com, чтобы очистить twitter для последних твитов.
http://codepen.io/JonOlick/pen/XJaXBd
Он работает, используя anyorigin (вы должны заплатить за его использование), чтобы захватить HTML. Затем он анализирует HTML, используя jquery, чтобы извлечь соответствующие твиты.
Твиты на мобильном сайте используют div с классом .tweet-text, поэтому это довольно безболезненно.
Соответствующий код выглядит следующим образом:
$.getJSON('http://anyorigin.com/get?url=mobile.twitter.com/JonOlick&callback=?', function(data){
// Remap ... utf8 encoding to ascii.
var bar = data.contents;
bar = bar.replace(/…/g, '...');
var el = $( '<div></div>' );
el.html(bar);
// Change all links to point back at twitter
$('.twitter-atreply', el).each(function(i){
$(this).attr('href', "https://twitter.com" + $(this).attr('href'))
});
// For all tweets
$('.tweet-text', el).each(function(i){
// We only care about the first 4 tweets
if(i < 4) {
var foo = $(this).html();
$('#test').html($('#test').html() + "<div class=ProfileTweet><div class=ProfileTweet-contents>" + foo + "</div></div><br>");
}
});
});
Ответ 8
Метод "GET statuses/user_timeline" нуждается в аутентификации пользователя, как вы можете видеть в официальной документации:
Вы можете использовать метод поиска "GET search", для которого не требуется аутентификация.
У вас есть код для запуска здесь: http://jsfiddle.net/73L4c/6/
function searchTwitter(query) {
$.ajax({
url: 'http://search.twitter.com/search.json?' + jQuery.param(query),
dataType: 'jsonp',
success: function(data) {
var tweets = $('#tweets');
tweets.html('');
for (res in data['results']) {
tweets.append('<div>' + data['results'][res]['from_user'] + ' wrote: <p>' + data['results'][res]['text'] + '</p></div><br />');
}
}
});
}
$(document).ready(function() {
$('#submit').click(function() {
var params = {
q: $('#query').val(),
rpp: 5
};
// alert(jQuery.param(params));
searchTwitter(params);
});
})