3

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

当直接从浏览器访问这个 url 时,它将 100% 的时间返回正确的数据。如果添加了一个视频,它就在那里,如果一个视频已被删除,它就消失了。

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

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

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

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

数据不应该和浏览器中访问url的时候一样吗?

我只是想获取用户“EXAMPLE”上传的最新视频。

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();
}
4

2 回答 2

0

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

于 2012-12-14T21:56:48.197 回答
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 与 GET 似乎消除了我类似的缓存问题。

编辑编辑

没关系,我很烂。使用 POST 会产生 400 错误。

于 2012-12-17T18:53:55.400 回答