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();
}
答案 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错误。