Ответ 1
Вы специально помещаете строку retweet
в таблицу, а не значение $retweet
.
Я использую API Twitter, чтобы вытащить твиты от конкретных пользователей. Я работаю так, как хочу, за исключением того, что я могу определить, является ли конкретный твит или оригинальным для пользователя, или если он является ретвитом.
Я использую следующий вызов:
https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=philiprucker&count=1
При просмотре результатов кажется, что я должен вытащить retweeted
из результатов и вернуть true или false. Однако это возвращает строку retweet
.
$url = "http://api.twitter.com/1/statuses/user_timeline.xml?include_entities=true&include_rts=true&screen_name=$screen_name&count=200" ;
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
$xml = curl_exec ($ch);
curl_close ($ch);
$twelement = new SimpleXMLElement($xml);
foreach ($twelement->status as $status) {
$text = dbEscape(trim($status->text));
$time = strtotime($status->created_at);
$id = $status->id;
$num_retweets = $status->retweet_count;
$retweet = $status->retweeted;
dbQuery("INSERT INTO `twitter` (`id`,`screen_name`,`time`,`text`,`hidden`, `numRetweets`, `retweet`) VALUES ('$id','$screen_name','$time','$text','n','$num_retweets','retweet')");
// dbQuery("INSERT INTO `twitter` (`id`,`screen_name`,`time`,`text`,`hidden`) VALUES ('$id','$screen_name','$time','$text','n')");
}
Это код, который я описываю. Я считаю, что все соответствующие коды есть. Любая помощь будет принята с благодарностью!
Вы специально помещаете строку retweet
в таблицу, а не значение $retweet
.
Быстрый разъясняющий вопрос: хотите ли вы сохранить, был ли твит когда-либо изменен, или вы хотите сохранить, выполнил ли пользователь запрос, переименованный в твит?
"переработанное" логическое поле, прикрепленное к статусу, является перспективным для пользователя, делающего запрос, - он указывает, переписывает ли текущий пользователь твит или нет, а не изменен ли твит. Нетронутый retweet_count будет лучшим индикатором того, был ли изменен твит или нет.
Используя простой запрос GET
вместе с Язык запросов Yahoo (aka YQL) для доступа к retweeted
node может быть достигнуто следующим образом:
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 будет выглядеть так, чтобы вернуть retweeted node с эфиром 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 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 );
}
}
});
РЕДАКТИРОВАТЬ 2: Получить глобальное присвоенное значение.
Ссылка: OP Tweet с просмотром Retweet Count
jsFiddle DEMO: YQL Rest Query for Twitter Глобальный статус с помощью HTML
На этот раз общее количество повторных глобальных подсчетов этого твита будет списано с сайта Twitter с помощью твита. Этот метод не требует посещения оригинального твита, так как любой retweet покажет этот глобальный счет.
Чтобы убедиться, что 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, которое XPATH
также используется для доступа к требуемым данным. Это предотвращает загрузку всей веб-страницы HTML, а также доступ к этим конкретным данным для Global Tweet Count. Это возможно, поскольку это значение находится в привязке к веб-странице с уникальным именем класса 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');
}
}
});
В случае, если кто-то все еще читает это, я думаю, что, возможно, этот поток становится более точным и точнее для текущего api (1.1) fooobar.com/info/410169/...
TL;DR проверьте наличие retweeted_status на объекте состояния.