我正在尝试使用PHP构建一个非常基本的网页,在html表格中显示Foursquare用户的800多个提示以及他们的Saved和Like计数,以用于报告和分析目的。这是我在foursquare上的一个例子:http://foursquare.com/redbull/list/tips。 (再次,redbull只是我的例子......我正在与一个有812个技巧的组织合作)。
Foursquare提供api来获取这些数据:
https://api.foursquare.com/v2/lists/{USER-ID}/tips?oauth_token={oauth-token}&limit=200&v=20120917
但是你一次只能获得200个结果,并且必须使用偏移来获得下一个200,400等等:
https://api.foursquare.com/v2/lists/{USER-ID}/tips?oauth_token={oauth-token}&limit=200&offset=200&v=20120917
在我的情况下,我需要调用API 5次以获得所有812提示。我提出了一个非常笨重且不可扩展的解决方案,我多次调用API并在表中继续创建行。这是我丑陋但有效的解决方案:http://pastebin.com/WL6kdTPY
但显然随着技巧的不断增长,我需要不断修改我的代码,以便每次迭代200次。在API数据中,我可以看到总提示(812),所以我觉得我应该能够用它来提出更精益的解决方案。
有人可以帮忙吗? 谢谢!
答案 0 :(得分:1)
第二个循环应该可以解决问题:
<?php
$today = date("Ymd");
$likes = 0;
$todo = 0;
$offset = 0;
$limit = 200;
do{
$url="https://api.foursquare.com/v2/lists/{user-id}/tips?oauth_token={oauth_token}&limit=".$limit."&offset=".$offset."&v={$today}";
$source = file_get_contents($url);
$obj = json_decode($source, true);
foreach($obj['response']['list']['listItems']['items'] as $item)
{
echo "<tr>";
echo "<td style = 'width: 75px;'>" . date('m/d/y', $item['createdAt']) . "</td>" ;
echo "<td style = 'width: 200px;'>" . $item['venue']['name'] . "</td>" ;
echo "<td style = 'width: 400px;'>" . $item['tip']['text'] . "</td>" ;
echo "<td style = 'width: 50px; text-align: center;'>" . $item['tip']['likes']['count'] . "</td>" ;
echo "<td style = 'width: 50px; text-align: center;'>" . $item['tip']['todo']['count'] . "</td>" ;
echo "</tr>";
$likes += $item['tip']['likes']['count'];
$todo += $item['tip']['todo']['count'];
}
$offset += $limit;
} while(count($obj['response']['list']['listItems']['items']) >= $limit);
?>
基本上,您检查返回项目的数量是否低于每个请求的限制。这应该意味着你到了最后