Говорят ли твит ретвит или нет? - PullRequest
12 голосов
/ 18 января 2012

Я использую Twitter API для получения твитов от определенных пользователей.У меня он работает точно так, как я хочу, за исключением того, что я могу сказать, является ли конкретный твит оригинальным от пользователя или это ретвит.

При просмотре результатов выясняется, что я должен иметь возможность извлечь 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')");
}

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

Ответы [ 4 ]

10 голосов
/ 18 января 2012

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

6 голосов
/ 18 января 2012

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

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

2 голосов
/ 31 декабря 2012

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

        }

    }
});
1 голос
/ 04 июня 2014

В случае, если кто-то все еще читает это, я думаю, что, возможно, этот поток добирается до точки более кратко, и является более правильным для текущего api (1.1) https://stackoverflow.com/a/24041978/1449799

tl; dr проверка на существованиеretweeted_status для объекта статуса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...