file_get_contents('YOUTUBE API')返回缓存/未更新/旧信息

时间:2012-12-14 21:24:22

标签: youtube-api

https://gdata.youtube.com/feeds/api/users/EXAMPLE/uploads?v=2&alt=jsonc

直接从浏览器访问此网址时,它会100%返回正确的数据。如果添加了一个视频,它就在那里,如果一个视频被删除,它就消失了。

通过file_get_contents获取此数据时('https://gdata.youtube.com/feeds/api/users/EXAMPLE/uploads?v=2&alt=jsonc');

数据似乎已缓存或未更新/当前数据......

如果您继续刷新页面,它会显示/隐藏新视频,以及显示/隐藏已删除的视频大约5-10分钟,那么它将是准确的。

当我使用$ .getJSON()或$ .ajax()获取数据时,会发生同样的事情......

数据是否应该与浏览器中访问网址时的数据相同?

我只是想让用户“示例”上传最新视频。

public function ajaxUpdateVideoFeed()
{
        header("Content-type: application/json");
        $json = file_get_contents('https://gdata.youtube.com/feeds/api/users/EXAMPLE/uploads?v=2&alt=jsonc');
        $data = json_decode($json, TRUE);
        $videoId = $data['data']['items'][0]['id'];
        echo json_encode($videoId);die();
}

2 个答案:

答案 0 :(得分:0)

尝试在网址调用的末尾附加一个随机数。 https://gdata.youtube.com/feeds/api/users/EXAMPLE/uploads?v=2&alt=jsonc&r=RAND每次调用网址时,RAND都是随机生成的任意数字。不确定这是否适合您,但可能值得一试。

答案 1 :(得分:0)

我遇到了类似的问题。我正试图通过$ .ajax()调用来检索特定视频的当前状态,并且响应数据似乎保持缓存状态。如果我从浏览器尝试URL,则数据会更新。

$.ajax({
    url: 'https://gdata.youtube.com/feeds/api/videos/YouTubeID?v=2&alt=json'
    type: "post",
    dataType: 'json',
    cache: false,
    success: function(response, textStatus, jqXHR){ 
        var ytState = response.entry.app$control.yt$state.name;
    },
    error: function(jqXHR, textStatus, errorThrown){
        console.log( "The following error occured: "+ textStatus + errorThrown );
    },
    complete: function(){   
    }
});

我尝试过json,jsonp,cached = false,附加时间戳,将我的开发人员密钥附加到url,但没有成功。

*的 *修改

在我的ajax请求中使用POST vs GET似乎消除了我类似的缓存问题。

编辑编辑

没关系,我很糟糕。使用POST产生400错误。