Используя простой GET
запрос вместе с Yahoo Query Language (он же YQL) для доступа к узлу retweeted
, можно добиться следующим образом:
jsFiddle DEMO: YQL Rest Query для статуса Twitter, ретвитированного через JSON
Результаты обратного вызова json
показаны ниже:
cbfunc({
"query": {
"count": 1,
"created": "2012-12-31T09:51:58Z",
"lang": "en-US",
"results": {
"json": {
"retweeted": "false"
}
}
}
});
И вы также можете получить это значение как xml
:
<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng"
yahoo:count="1" yahoo:created="2012-12-31T09:54:49Z" yahoo:lang="en-US">
<results>
<json>
<retweeted>false</retweeted>
</json>
</results>
</query>
Вот как YQL Statement будет выглядеть так, чтобы возвращать ретвитнул узел с эфиром true или false в результате:
SELECT retweeted FROM json WHERE url="https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=philiprucker&count=1"
И этот простой запрос GET
- это просто запрос ajax();
с функцией успеха, такой как this :
// The YQL Statement used below is shown next, starting with the word SELECT:
//
// SELECT retweeted FROM json WHERE url="https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=philiprucker&count=1"
//
// View the above YQL Statement using Yahoo Console at:
// http://developer.yahoo.com/yql/console/?q=SELECT%20retweeted%20FROM%20json%20WHERE%20url%3D%22https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fuser_timeline.json%3Finclude_entities%3Dtrue%26include_rts%3Dtrue%26screen_name%3Dphiliprucker%26count%3D1%22&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys
//
// The variable 'q' below is the Yahoo Rest Query. That is provided after creating the above Yahoo Statement.
// It's provided at the bottom of that web page.
var q = 'http://query.yahooapis.com/v1/public/yql?q=SELECT%20retweeted%20FROM%20json%20WHERE%20url%3D%22https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fuser_timeline.json%3Finclude_entities%3Dtrue%26include_rts%3Dtrue%26screen_name%3Dphiliprucker%26count%3D1%22&format=json';
// Use simple jQuery .ajax along with the above YQL Rest Statement.
// The benefit of YQL rest statement is we can select the desired node, in this case "retweeted"
$.ajax({
url: q,
dataType: "json",
success: function(data) {
// Enable to show the jQuery data Object received in the browsers console.
//console.log(data);
// If we have data, continue.
if (data) {
// Display retweeted value of 'true' or 'false' via browser alert.
alert('The retweeted status is: ' + data.query.results.json.retweeted );
}
}
});
EDIT 2:Получить глобальное ретвитированное значение.
Ссылка: твит OP с видимым счетчиком ретвитов
jsFiddle DEMO: YQLRest Query for Twitter Глобальная ретвитированная статистиканас через HTML
На этот раз общее ретвитированное глобальное число этого твита будет удалено из данных прямо со страницы Twitter счирикать.Этот метод не требует посещения исходного твита, так как любой ретвит покажет этот глобальный счет.
Чтобы убедиться, что jsFiddle показывает фактическое количество ретвитов, обратитесь к странице твита OP, используя предоставленную ссылку выше.
Процесс аналогичен описанному выше, за исключением того, что на этот раз наш .ajax()
dataType
равен html
, а оператор YQL выглядит следующим образом:
SELECT * FROM html WHERE url="https://twitter.com/PostBaron/status/286544211556319233" AND xpath="//a[@class='request-retweeted-popup']"
Обратите внимание на выше YQL Statement , что XPATH
также используется для доступа к необходимым требуемым данным.Это предотвращает загрузку всей веб-страницы HTML, и только те специфические данные для Global Tweet Count доступны.Это возможно, поскольку это значение находится в привязке веб-страницы с уникальным classname request-retweeted-popup
.Чтобы быстро найти это имя класса, я использовал инструмент Inspect Element , который есть в браузере, когда я наводил курсор на это значение на веб-странице.Когда имя класса стало известно, я настроил ответ так, чтобы он возвращал значение в тегах <strong>
, которое является числом, которое мы хотим знать.
Естественно, значение 0
означает, что твит никогда не былбыл ретвитнут, но, что более важно, означает, что это сам исходный твит.
Конечный результат - API Twitter не требуется, поскольку вы очищаете данные от общедоступной веб-страницы, чтобы получить Global Tweet Count .
$.ajax({
url: q,
dataType: "html",
success: function(data) {
// If we have data, continue.
if ( $(data).find('.request-retweeted-popup') ) {
// Store the value of total retweets in this variable.
var totalRetweets = $(data).find('strong').text();
// Show browser alert of the totalRetweets value. Change alert() to console.log() for console log browser responses.
alert('The following Tweet has been retweeted: ' + totalRetweets + ' times');
}
}
});