为什么从twitter API返回错误的推文ID?

时间:2010-05-15 20:56:38

标签: json api twitter

我使用twitter API来检索用户主页时间轴推文。我使用json响应格式。最近,推文ID(在API中只是'id')被重新调整错误。作为一个例子

通常它应该像这样返回:“id”:14057503720,(例子来自twitter控制台) 但是根据我的要求,它会像这样返回:“id”:1172601832

它少了1位数,完全不同。我需要正确的ID,因为我无法使用像since_id或max_id这样的参数。

4 个答案:

答案 0 :(得分:5)

使用id_str代替id。它似乎没有记录,但是如果你查看JSON的原始源,你会发现每个推文的id_str是正确对应于推文ID的那个。

答案 1 :(得分:2)

  

它少了1位数,完全不同。我需要正确的ID,因为我无法使用像since_id或max_id这样的参数。

不完全不同;只是不同。如果你用十六进制写两个ID,你会收到

0x345E47BE8
 0x45E47BE8

Tweet IDs are 64-bit在解析的某个地方你失去了最重要的32位一半。使用id_str作为其他(也在链接文章中)建议。

答案 2 :(得分:1)

如何获取ID的示例

$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 Developers

第30行的示例请求显示"id_str":"122032448266698752" 这就是使用的原因$tweetId = $item->id_str; 得到id_str

答案 3 :(得分:1)

“ [[文本格式的数字编码周围的歧义]在处理大数时是一个问题;例如,大于2 ^ 53的整数不能在IEEE 754双精度浮点数中精确表示,因此当使用使用浮点数的语言(例如JavaScript)进行解析时,此类数字将变得不准确。Twitter上存在一个大于253的数字示例,该示例使用64位数字来标识每条推文。TwitterAPI返回的JSON包含两次推特ID,一次是JSON数字,一次是十进制字符串,以解决JavaScript应用程序未正确解析数字的事实。

摘自Martin Kleppmann的“设计数据密集型应用程序”