从Instagram缓存多个页面/图像

时间:2013-02-06 10:13:59

标签: php caching instagram

我正在开展一个小项目,在这个小项目中,用户可以看到图像,在这种情况下," kitties"。 Instagram每小时只允许5000个请求,我认为它不会达到此目的,但我选择以任何方式缓存。另外,因为我无法弄清楚如何让反向链接起作用。 我只能获取下一页的链接,然后最近页面的链接成为当前页面,这是自己的链接。 此外,api可以返回奇怪数量的图像,有时是14,有时是20,依此类推。我希望它总是每页显示20张图像,只有5页(100张图像)。然后每5/10分钟或更新一次更新此文件。

所以,我的计划是将100张图像存储到一个文件中。我得到了它的工作,但它的速度令人难以置信。 代码如下所示:

$cachefile = "instagram_cache/".TAG.".cache";
$num_requests = 0; //Just for developing and check how many request it does

//If the file does not exsists or is older than *UPDATE_CACHE_TIME* seconds
if (!file_exists($cachefile) || time()-filemtime($cachefile) > UPDATE_CACHE_TIME)
{
    $images = array();
    $current_file = "https://api.instagram.com/v1/tags/".TAG."/media/recent?client_id=".INSTAGRAM_CLIENT_ID;
    $current_image_index = 0;


    for($i = 0; $i >= 0; $i++)
    {
        //Get data from API
        $contents = file_get_contents($current_file);

        $num_requests++;
        //Decode it!
        $json = json_decode($contents, true);

        //Get what we want!
        foreach ($json["data"] as $x => $value)
        {                
            array_push($images, array(
                'img_nr' => $current_image_index,
                'thumb' => $value["images"]["thumbnail"]["url"],
                'fullsize' => $value["images"]["standard_resolution"]["url"],
                'link' => $value["link"], 
                'time' => date("d M", $value["created_time"]),
                'nick' => $value["user"]["username"],
                'avatar' => $value["user"]["profile_picture"],
                'text' => $value['caption']['text'],
                'likes' => $value['likes']['count'],
                'comments' => $value['comments']['data'],
                'num_comments' => $value['comments']['count'],
            ));

            //Check if the requested amount of images is equal or more...
            if($current_image_index > MAXIMUM_IMAGES_TO_GET)
                break;

            $current_image_index++;

        }
        //Check if the requested amount of images is equal or more, even in this loop...
        if($current_image_index > MAXIMUM_IMAGES_TO_GET)
            break;
        if($json['pagination']['next_url'])
            $current_file = $json['pagination']['next_url'];

        else
            break; //No more files to get!

    }
    file_put_contents($cachefile, json_encode($images));

这感觉就像一个非常丑陋的黑客,关于如何让这项工作变得更好的任何想法?

或者可以告诉我如何制作"反向链接"像它应该的工作? (是的,我可以是历史上的js和-1,但不是!)。

任何想法,建议,帮助,评论等都表示赞赏。

1 个答案:

答案 0 :(得分:0)

为什么不订阅实时并将图像存储在数据库中?然后,当它们被渲染时,您可以检查图像URL是否有效(检查照片是否已被删除)。从您自己的数据库获取数据将比从Instagram

快得多