使用限制/偏移量通过Foursquare API结果进行分页以构建表

时间:2012-09-17 20:33:22

标签: php json api foursquare offset

我正在尝试使用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),所以我觉得我应该能够用它来提出更精益的解决方案。

有人可以帮忙吗? 谢谢!

1 个答案:

答案 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);


?>

基本上,您检查返回项目的数量是否低于每个请求的限制。这应该意味着你到了最后