我使用twitter API来检索用户家庭时间线推文。我使用json响应格式。最近,推文ID(在API中只是'id')被重新调整错误。举个例子
通常它应该像这样返回:“id”:14057503720,(例子来自twitter控制台)但是根据我的要求它会像这样返回:“id”:1172601832
它少了1位数,完全不同。我需要正确的ID,因为我无法使用像since_id或max_id这样的参数。
使用id_str
而不是id
。它似乎没有记录,但是如果你看一下JSON的原始资源,你会发现每条推文的id_str
都是正确对应于推文ID的那个。
它少了1位数,完全不同。我需要正确的ID,因为我无法使用像since_id或max_id这样的参数。
它并非完全不同;只是不同。如果你用十六进制写两个ID,你会收到
0x345E47BE8
0x45E47BE8
Tweet IDs are 64-bit和解析中的某个地方失去了最重要的32位一半。使用id_str
作为其他(也在链接文章中)建议。
如何获取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
的原因
“[文本格式中数字编码的模糊性]在处理大数时是个问题;例如,大于2 ^ 53的整数不能在IEEE 754双精度浮点数中精确表示,因此这些数字变为在使用浮点数(例如JavaScript)的语言中解析时不准确。在Twitter上出现大于253的数字的示例,它使用64位数字来识别每条推文.Twitter API返回的JSON包括推文ID两次,一次作为JSON号,一次作为十进制字符串,以解决JavaScript应用程序未正确解析数字的事实“
来自Martin Kleppmann的“设计数据密集型应用”