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呼び出しの最後に乱数を追加してみてください。https://gdata.youtube.com/feeds/api/users/EXAMPLE/uploads?v=2&alt=jsonc&r=RAND ここでRAND、URLが呼び出されるたびにランダムに生成される任意の数になります。これがうまくいくかどうかはわかりませんが、試してみる価値があるかもしれません。

于 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 に答える