Подтвердить что ты не робот

Говорить, является ли твит или нет?

Я использую 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')");
}

Это код, который я описываю. Я считаю, что все соответствующие коды есть. Любая помощь будет принята с благодарностью!

4b9b3361

Ответ 1

Вы специально помещаете строку retweet в таблицу, а не значение $retweet.

Ответ 2

Быстрый разъясняющий вопрос: хотите ли вы сохранить, был ли твит когда-либо изменен, или вы хотите сохранить, выполнил ли пользователь запрос, переименованный в твит?

"переработанное" логическое поле, прикрепленное к статусу, является перспективным для пользователя, делающего запрос, - он указывает, переписывает ли текущий пользователь твит или нет, а не изменен ли твит. Нетронутый retweet_count будет лучшим индикатором того, был ли изменен твит или нет.

Ответ 3

Используя простой запрос 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');

        }

    }
});

Ответ 4

В случае, если кто-то все еще читает это, я думаю, что, возможно, этот поток становится более точным и точнее для текущего api (1.1) fooobar.com/info/410169/...

TL;DR проверьте наличие retweeted_status на объекте состояния.