从 Instagram API 类创建缓存文件

Posted

技术标签:

【中文标题】从 Instagram API 类创建缓存文件【英文标题】:Creating cache file from Instagram API Class 【发布时间】:2014-01-10 04:23:36 【问题描述】:

我正在与Cosenary Instagram php API Classes 合作从 instagram 获取照片并尝试创建缓存文件以提高速度。下面是sn-p,但它不起作用。

include('conf.php');
require 'bigflannel-instafeed/data/instagram.class.php';
// Initialize class
$instagram = new Instagram($accessToken);
$instagram->setAccessToken($accessToken);
$contents = $instagram->getUserMedia($userID,$settings['count']);
$cache = './instagram.json';
if(file_exists($cache) && filemtime($cache) > time() - 60*60 && filesize($cache) < 10)
// If a cache file exists, and it is newer than 1 hour and file size bigger than 10 bytes, use it
$instaData = file_get_contents($cache);
 else 
$instaData = file_get_contents($contents);
file_put_contents($cache,$instaData);

我检查了文件 instagram.json 只是留下了 0 字节大小的空白文件。 我在这里使用代码从其他问题创建缓存文件Caching Instagram API requests using PHP?

-- 编辑--

如果我用 json url 替换 $contents,它可以工作。但是如果我使用 $contents 作为 API 类的一部分,它就不起作用了。

include('conf.php');
require 'bigflannel-instafeed/data/instagram.class.php';
// Initialize class
$instagram = new Instagram($accessToken);
$instagram->setAccessToken($accessToken);
$contents = json_encode($instagram->getUserMedia($userID,$settings['count']));
$cache = './instagram.json';
if(file_exists($cache) && filemtime($cache) > time() - 60*60 && filesize($cache) > 10)
// If a cache file exists, and it is newer than 1 hour, use it
$jsonData = json_decode(file_get_contents($cache));
 else 
$jsonData = json_decode((file_get_contents("https://api.instagram.com/v1/users/3/media/recent/?access_token=180213154.f59def8.f888fe332f7c47e98bd20a44866ef0be&count=34")));
file_put_contents($cache,json_encode($jsonData));

【问题讨论】:

提供完整的网址,以便我为您做点什么。 我编辑了上面的问题。请检查,谢谢。 【参考方案1】:

更新答案

<?php
require 'instagram.class.php';

$cache = './cache.json';

if(file_exists($cache) && filemtime($cache) > time() - 60*60)
    // If a cache file exists, and it is newer than 1 hour, use it
    $response = json_decode(file_get_contents($cache),true); //Decode as an json array
 else 

    $instagram = new Instagram($accessToken);
    $instagram->setAccessToken($accessToken);
    $response = $instagram->getUserMedia($userID, $settings['count']);

    if($response)              
        file_put_contents($cache,json_encode($response)); //Save as json
         


echo "<pre>";
if(is_array($response))
    foreach($response['data'] as $data)
            print_r($data);
    

【讨论】:

我想要的是让它从这里与 Instagram PHP API 类一起工作:github.com/cosenary/Instagram-PHP-API 但我很欣赏你的回答:) 如何获取所有值,不限于title、src、lat、lon,因为我也想获取评论值。 当我想用这个代码打印/回显它时 foreach ($response->data as $data) 它说为 foreach() 提供的参数无效 现在你有数组而不是对象,所以尝试 foreach ($response['data'] as $data) 并尝试在某个时候使用 print_r.. 让我们continue this discussion in chat

以上是关于从 Instagram API 类创建缓存文件的主要内容,如果未能解决你的问题,请参考以下文章

超过 Instagram API 请求限制

Instagram API:获取所有用户媒体 API 并存储到文件

用 php 提取 Instagram 信息——解码然后呢?

从 Pig UDF Java 类、Amazon EMR 中的分布式缓存访问文件

Instagram API 匹配代码未找到或已被使用

Workbox Service Worker 不在缓存中存储图像和 API 响应