Есть ли исправление для пропуска видео YouTube в плейлисте, если видео «недоступно» - PullRequest
1 голос
/ 10 июля 2019

У меня есть агрегированный список (запрашивается из mySql db) видео YouTube в плейлисте медиаплеера HTML 5.Но со временем YouTube отключит некоторые видео из-за проблем с авторским правом или оценкой, но ссылки все еще в моем списке.Может ли кто-нибудь порекомендовать JS или другое решение или статью, в которой указано, что ссылка на видео не запускается через x промежуток времени, чтобы начать пропуск или следующее действие.Пожалуйста, сообщите.

Нет решений, потому что интенсивное гугление не дает предложений.

Моя основная логика заключается в том, что если видео не воспроизводится через x секунд, то пропустите, в противном случае воспроизведите.

// THIS ACTUALLY CHECKS PLAYTIME AND ADD TO A COUNTER - CAN I USE SOMETHING SIMILAR?

var counter = 0;
var currentIndex_inc = 0;
function onProgress() {

if(player.currentTime() <= 1){
    counter = 0;
}

//-- ------------------------------------- -->
// ----- COUNTER - If track plays longer than 30 seconds - add 1 --------
//-- ------------------------------------- -->
if(player.currentTime() >= 30  && trackURL != ''){
    if(counter==0){
    counter = 1;
    var playlist_name = "<?php echo $playlist ; ?>";
    var play_type = "<?php echo $type ; ?>";
    var trackURL = player.currentSrc();
    track_source = trackURL.src ;

        if(typeof(track_source)==="undefined"){
         track_source = trackURL;
        };

    $.ajax({
        type: "POST",
        url: "_inc/2018_process_counter.php",
        dataType: "text",
            data: { 
                playlist_name: playlist_name,track_source:track_source }
    }).done(function( data ) {
});
    }
    return false;
}

Logic:
If (video link does not start || video link == live){ 
   skip 
} else if (video link does start || video link == dead) {
   play 
}

Список кодов с помощью Queru - на основании успешного ответа.Ответ работает для одного идентификатора, но не для списка ... См. Мой код ниже:

if ($result_a->num_rows > 0) {
        // output data of each row
        while($row = $result_a->fetch_assoc()) {
            $id = $row['id'];
            $share_key = $row['share_key'];
            echo $row['id'];
            echo '<br>';
            echo $row['artist'];
            echo '<br>';
            echo $row['title'];
            echo '<br>';
            echo $row['source_url'];
            echo '<br>';            
            $my_link = $row['source_url'];

            $testlink = substr($my_link, strrpos($my_link, '/' )+1)."\n";

            echo '<p style="color:#ff0000">';
            echo $testlink;
            echo '</p>';            

            //# is ERROR = https://www.youtube.com/watch?v=R5mpcDWpYSA
            // $url = "https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=R5mpcDWpYSA"; //# test video deleted.

            //# is OK = https://www.youtube.com/watch?v=mLuh_O4mYbA
            $url = "https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=".$testlink; //# test working (not deleted).
            echo $url;
            echo '<br>';
            try
            {
                set_error_handler(function() { /* # temp ignore Warnings/Errors */ });

                $fop = fopen($url, "rb");
                if ( !$fop && $fop==false) { throw new Exception(); }

                restore_error_handler(); //# restore Warnings/Errors

                echo "OK 200 ::: Youtube video was found";
            }
            catch ( Exception $e ) 
            { echo "Error 404 ::: Youtube video not found (deleted or bad link)"; }




            echo '<hr>';









        }
    } else {
        // echo "0 results";
    }

1 Ответ

1 голос
/ 13 июля 2019

"... YouTube отключит некоторые видео из-за проблем с авторским правом или оценкой, но ссылки все еще находятся в моем списке. Может кто-нибудь порекомендовать JS или другое решение или статью, которая видит, если ссылка на видеоне запускается через x времени, чтобы начать пропустить или выполнить следующее действие. Пожалуйста, сообщите. "

Поскольку вы уже используете PHP-код, то одним из возможных вариантов являются следующие шаги:

1) Сделайте запрос к https://www.youtube.com/oembed? + Youtube video URL.

Пример запроса:

https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=R5mpcDWpYSA

2) Используйте fopen для проверки доступности видео.Обратите внимание, что file_exists($url) не будет работать правильно с серверами Youtube (они всегда возвращают некоторый контент страницы, даже если само видео было удалено).

Пример кода для тестирования ниже:
(отобразится "OK 200"или" ERROR 404 ", в зависимости от состояния видео ...)

<?php

    //# is ERROR = https://www.youtube.com/watch?v=R5mpcDWpYSA
    $url = "https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=R5mpcDWpYSA"; //# test video deleted.

    //# is OK = https://www.youtube.com/watch?v=mLuh_O4mYbA
    //$url = "https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=mLuh_O4mYbA"; //# test working (not deleted).

    try
    {
        set_error_handler(function() { /* # temp ignore Warnings/Errors */ });

        $fop = fopen($url, "rb");
        if ( !$fop && $fop==false) { throw new Exception(); }

        restore_error_handler(); //# restore Warnings/Errors

        echo "OK 200 ::: Youtube video was found";
    }
    catch ( Exception $e ) 
    { echo "Error 404 ::: Youtube video not found (deleted or bad link)"; }

?>


Вариант 2:

Выможно также добиться того же результата, используя file_get_contents с запросом к Youtube get_video_info?.

Пример запроса:

https://www.youtube.com/get_video_info?video_id=R5mpcDWpYSA

Пример кода:

<?php

    //# ERROR = https://www.youtube.com/watch?v=R5mpcDWpYSA
    $url = "https://www.youtube.com/get_video_info?video_id=R5mpcDWpYSA"; //# test video deleted.

    //# OK = https://www.youtube.com/watch?v=mLuh_O4mYbA
    //$url = "https://www.youtube.com/get_video_info?video_id=mLuh_O4mYbA"; //# test working (not deleted).

    $src = file_get_contents($url);

    //# find text... playabilityStatus%22%3A%7B%22status%22%3A%22OK ...
    $str1 = "playabilityStatus%22%3A%7B%22status%22%3A%22";
    $pos = strpos($src, $str1);

    $result = substr( $src, $pos + (strlen($str1)), 5);

    if( $result{0} == "O" && $result{1} == "K" )
    { echo "OK 200 ::: Youtube video was found"; }
    else 
    { echo "Error 404 ::: Youtube video not found (deleted or bad link)"; }

?>
...