Почему неверный идентификатор твита возвращается из Twitter API? - PullRequest
5 голосов
/ 16 мая 2010

Я использую твиттер API для получения твитов пользователя с домашней шкалой времени. Я использую формат ответа JSON. Недавно идентификатор твита (в API это просто «идентификатор») перенастроен неправильно. Как пример

обычно он должен возвращаться так: "id": 14057503720, (пример из консоли твиттера) однако по моей просьбе он возвращается так: "id": 1172601832

Это на 1 цифру меньше, и это совершенно другое. Мне нужен правильный идентификатор, потому что я не могу использовать параметры, такие как since_id или max_id.

Ответы [ 4 ]

5 голосов
/ 23 марта 2011

Используйте id_str вместо id. Кажется, это не задокументировано, но если вы посмотрите на необработанный источник JSON, вы увидите, что id_str для каждого твита - это тот, который правильно соответствует идентификатору твита.

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

Это на 1 цифру меньше, и это совершенно другое. Мне нужен правильный идентификатор, потому что я не могу использовать параметры, такие как since_id или max_id.

Это не полностью отличается; просто другой. Если вы напишите оба идентификатора в шестнадцатеричном виде, вы получите

0x345E47BE8
 0x45E47BE8

Tweet ID являются 64-битными , и где-то при разборе вы теряете наиболее значимую 32-битную половину. Используйте id_str, как предлагают другие (также в связанной статье).

1 голос
/ 22 февраля 2019

"[неоднозначность в отношении кодирования чисел в текстовых форматах] является проблемой при работе с большими числами; например, целые числа больше 2 ^ 53 не могут быть точно представлены в числе с плавающей точкой двойной точности IEEE 754, поэтому такие числа становятся неточными при разборе на языке, который использует числа с плавающей запятой (например, JavaScript). Пример чисел больше 253 встречается в Twitter, который использует 64-битное число для идентификации каждого твита. JSON, возвращаемый API Twitter включает идентификаторы твитов дважды, один раз как число JSON и один раз как десятичную строку, чтобы обойти тот факт, что числа неправильно обрабатываются приложениями JavaScript "

Из "Проектирования приложений с интенсивным использованием данных" Мартина Клеппмана

1 голос
/ 09 июля 2012

пример получения идентификатора

$url = "http://search.twitter.com/search.json?q=QUERY"; //<--- replace the word QUERY for your own query 
$data = get_data($url);
$obj = json_decode($data);

function get_data($url){
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
    }

foreach ($obj->results as $item){
    $text = $item->text;
    $user = $item-> from_user;
    $img = $item->profile_image_url;
    $tweetId = $item->id_str;  // <--- On this line we are getting the ID of the tweet

echo ' @';  
echo $user;
echo $text;
echo 'Tweet ID: '. $tweetId; //<-- On this line we display the ID of the tweet

Для получения дополнительной информации GET search | Разработчики Twitter

Пример запроса в строке 30 показывает "id_str":"122032448266698752" и вот причина использования $tweetId = $item->id_str; чтобы получить id_str

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