Иногда пропадают видео с YouTube

Тема в разделе "Как сделать...", создана пользователем vave, 5 мар 2015.

  1. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    369
    Симпатии:
    14
    Есть у меня сайт, в нем раздел видео, который постоянно перестает работать, выдает ошибку "No videos found".
    Мне кажется это как-то связано с посещаемостью, чем она выше, тем чаще перестают работать видео.
    Так как, когда этот раздел посещало 50-100 человек в сутки, проблема давала о себе знать максимум 1-2 раза в день, сейчас посещаемость выше в несколько раз, и я редко застаю раздел в рабочем виде.
    Видео пропадают полностью все, либо частично, что на странице со всеми видео, что при переходе к просмотру видео.

    Вот
    на сам раздел.


    Код всех видео
    PHP:

    // DISPLAY ERROR PAGE IF USER IS NOT LOGGED IN AND ADMIN SETTING REQUIRES REGISTRATION

    if($user->user_exists == $setting[setting_permission_vidfeeder] == 0) {

      
    $page "error";

      
    $smarty->assign('error_header'11020601);

      
    $smarty->assign('error_message'11020602);

      
    $smarty->assign('error_submit'11020603);

      include 
    "footer.php";

    }



    $task rc_toolkit::get_request('task','main');

    $p rc_toolkit::get_request('p',1);

    $keyword trim(rc_toolkit::get_request('keyword',''));





    $rc_vidfeeder = new rc_vidfeeder();





    if (
    $keyword$search "$keyword";



    if (
    $task=='search' && $keyword) {


    }



    if (
    $setting['setting_vidfeeder_force_keyword']) {

      
    $search $rc_vidfeeder->main_keyword $search";

    }

    if (!
    strlen($search)) {

      
    $search $rc_vidfeeder->main_keyword;

    }

    $search trim($search);



    $videos $rc_vidfeeder->get_videos_by_keyword($search$p);

    $total_videoentries $rc_vidfeeder->get_total_entries();



    $page_vars make_page($total_videoentries$rc_vidfeeder->entries_per_page$p);







    //rc_toolkit::debug($tagclouds);



    $smarty->assign('keyword'$keyword);

    $smarty->assign('videos'$videos);

    $smarty->assign('keywords'$rc_vidfeeder->listing_keywords);

    $smarty->assign('main_keyword'$rc_vidfeeder->main_keyword);



    $smarty->assign('total_videoentries'$total_videoentries);

    $smarty->assign('p'$page_vars[1]);

    $smarty->assign('maxpage'$page_vars[2]);

    $smarty->assign('p_start'$page_vars[0]+1);

    $smarty->assign('p_end'$page_vars[0]+count($videos));


    Код страницы просмотра видео
    PHP:

    // DISPLAY ERROR PAGE IF USER IS NOT LOGGED IN AND ADMIN SETTING REQUIRES REGISTRATION
    if($user->user_exists == $setting[setting_permission_vidfeeder] == 0) {
      
    $page "error";
      
    $smarty->assign('error_header'$vidfeeder[1]);
      
    $smarty->assign('error_message'$vidfeeder[2]);
      
    $smarty->assign('error_submit'$vidfeeder[3]);
      include 
    "footer.php";
    }


    $vid rc_toolkit::get_request('id');
    $keyword rc_toolkit::get_request('keyword','');
    $tag rc_toolkit::get_request('tag','');

    $rc_vidfeeder = new rc_vidfeeder();
    $video $rc_vidfeeder->get_video($vid);











    // DISPLAY ERROR PAGE IF USER IS NOT LOGGED IN AND ADMIN SETTING REQUIRES REGISTRATION

    if($user->user_exists == $setting[setting_permission_vidfeeder] == 0) {

      
    $page "error";

      
    $smarty->assign('error_header'11020601);

      
    $smarty->assign('error_message'11020602);

      
    $smarty->assign('error_submit'11020603);

      include 
    "footer.php";

    }



    $task rc_toolkit::get_request('task','main');

    $p rc_toolkit::get_request('p',1);

    $keyword trim(rc_toolkit::get_request('keyword',''));





    $rc_vidfeeder = new rc_vidfeeder();





    if (
    $keyword$search "$keyword";



    if (
    $task=='search' && $keyword) {


    }



    if (
    $setting['setting_vidfeeder_force_keyword']) {

      
    $search $rc_vidfeeder->main_keyword $search";

    }

    if (!
    strlen($search)) {

      
    $search $rc_vidfeeder->main_keyword;

    }

    $search trim($search);



    $videos $rc_vidfeeder->get_videos_by_keyword($search$p);

    $total_videoentries $rc_vidfeeder->get_total_entries();

    $page_vars make_page($total_videoentries$rc_vidfeeder->entries_per_page$p);

    /*
    $rc_vidfeedertag = new rc_vidfeeder_tag();
    $tagclouds = $rc_vidfeedertag->get_cloud($rc_vidfeeder->entries_in_tagcloud,'name');
    */
    $smarty->assign('videos'$videos);
    $smarty->assign('tag'$tag);
    $smarty->assign('keyword'$keyword);
    $smarty->assign('tagclouds',$tagclouds);
    $smarty->assign('video'$video);
    $smarty->assign('keywords'$rc_vidfeeder->listing_keywords);
    $smarty->assign('main_keyword'$rc_vidfeeder->main_keyword);
     
  2. yaden

    yaden Создатель

    Регистр.:
    6 май 2014
    Сообщения:
    17
    Симпатии:
    1
    кеш или чпу

    Смотря какой двиг.
     
    Последнее редактирование модератором: 26 мар 2015
  3. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    369
    Симпатии:
    14
    Сошил Энжин 3

    Почему эта проблема возникает в связи с посещаемостью?
     
    Последнее редактирование модератором: 26 мар 2015
  4. sandyc

    sandyc Создатель

    Регистр.:
    26 авг 2011
    Сообщения:
    10
    Симпатии:
    0
    может, удаляют просто кто-то из совладельцев канала/видео?
     
  5. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    369
    Симпатии:
    14
    Заходишь в раздел видео, или какую-то определенную категорию, если на странице видео отсутствуют, обновляешь страничку и все видео появляются, иногда приходиться раз 10 обновить страницу что бы видео появились, а то и больше...
    Может всё работать без проблем минут 5, и потом снова пропадают видео.

    Скопировал сайт на другой сервер для проверки, всё работает.

    Подозреваю что нужно править данный код, что скажете касательно него?

    PHP:
    <?php

    include_once "class_radcodes.php";

    class 
    rc_vidfeeder
    {
      var 
    $entries_per_page;
      var 
    $cache_enable;
      var 
    $cache_timeout;
      var 
    $main_keyword;
      var 
    $listing_keywords;

      var 
    $gdata;

      function 
    rc_vidfeeder()
      {
        
    $this->load_settings();
      }

      function 
    load_settings()
      {
        global 
    $setting;
      
        
    $this->entries_per_page $setting['setting_vidfeeder_entries_per_page'];
        
    $this->entries_in_tagcloud $setting['setting_vidfeeder_entries_in_tagcloud'];
        
    $this->cache_enable $setting['setting_vidfeeder_xml_cache_enable'];
        
    $this->cache_timeout $setting['setting_vidfeeder_xml_cache_timeout'];    
        
    $this->main_keyword $setting['setting_vidfeeder_main_keyword'];

        
    $this->listing_keywords array_map('trim'explode(',',$setting['setting_vidfeeder_listing_keywords']));   
      }

      function 
    clear_cache()
      {
        
    $dirname dirname(__FILE__);
        
    //rc_toolkit::debug($dirname);
      
        
    $dir "$dirname/../vidfeeder_cache";
        if (!
    $dh = @opendir($dir)) return;
        while (
    false !== ($obj readdir($dh))) {
            if(
    $obj=='.' || $obj=='..' || $obj=='index.php') continue;
            @
    unlink($dir.'/'.$obj);
        }

        
    closedir($dh);
      }

      function 
    get_start_index($page)
      {
        if (
    $page 1$page 1;
        
    $start_index = ($page-1) * $this->entries_per_page 1;
        return 
    $start_index;
      }

      function 
    get_videos($params=array(), $page 1)
      {
        global 
    $setting;
      
        
    $base_params = array();
        
    $base_params['v'] = 1;
        
    $base_params['orderby'] = $setting['setting_vidfeeder_orderby'];
        
    $base_params['racy'] = 'exclude';
        
    $base_params['alt'] = 'atom';
        
    $base_params['format'] = 5;
        
    $base_params['start-index'] = $this->get_start_index($page);
        
    $base_params['max-results'] = $this->entries_per_page;
      
        
    $params array_merge($base_params$params);
      
        
    $str_params = array();
        foreach (
    $params as $k=>$v) {
          if (
    $k == 'time') continue;
          
    $str_params[] = "$k=".urlencode($v);
        }

        
    $url "http://gdata.youtube.com/feeds/videos?" join("&"$str_params);
        
    //rc_toolkit::debug($url,"vidfeeder:get_videos");
      
        
    $data $this->cache_enable $this->get_xml_response_cache($url) : file_get_contents($url);

        
    $xml_parser = new rc_xml_parser();
        
    $this->gdata $xml_parser->get_xml_tree($data);       

        
    $videos = array();
      
        foreach (
    $this->gdata['FEED'][0]['ENTRY'] as $k=>$data) {
          
    $videos[] = $this->yt_fetch_video($data);
        }
      
        return 
    $videos;
      }


      function 
    get_videos_by_yt_username($username$page 1)
      {
        
    $params = array();
        
    $params['author'] = $username;

        return 
    $this->get_videos($params$page);
      }


      function 
    get_yt_username_by_user($user)
      {
        if (!isset(
    $user->usersetting_info['usersetting_vidfeeder_yt_username'])) {
          
    $user->user_settings();
        }
        return 
    $user->usersetting_info['usersetting_vidfeeder_yt_username'];
      }

      function 
    get_videos_by_keyword($keyword$page=1)
      {
          global 
    $setting;
        
        
    $params = array();
        if (
    $keyword) {
          
    $params['vq'] = $keyword;
        }
        if (
    $setting['setting_vidfeeder_category']) {
            
    $params['category'] = $setting['setting_vidfeeder_category'];
        }
        if (
    $setting['setting_vidfeeder_restriction']) {
          
    $params['restriction'] = $setting['setting_vidfeeder_restriction'];
        }
        if (
    $setting['setting_vidfeeder_time']) {
          
    $params['time'] = $setting['setting_vidfeeder_time'];
        }
        if (
    $setting['setting_vidfeeder_author']) {
          
    $params['author'] = $setting['setting_vidfeeder_author'];
        }
        
    //if ($setting['setting_vidfeeder_location']) {
        //  $params['location'] = $setting['setting_vidfeeder_location'];
        //}
        
    if ($setting['setting_vidfeeder_language']) {
          
    $params['lr'] = $setting['setting_vidfeeder_language'];
        }
        return 
    $this->get_videos($params,$page);
      }

      function 
    get_xml_response_cache($url)
      {
        
    $cachefile "./vidfeeder_cache/".md5($url).".txt";
        if (
    file_exists($cachefile) && ( (time()-filemtime($cachefile)) < $this->cache_timeout)) {
          
    $content file_get_contents($cachefile);
        }
        else {
          
    $content file_get_contents($url);
          
    rc_toolkit::write_to_file($cachefile,$content);
        }
        return 
    $content;
      }


      function 
    get_yt_user_info($username)
      {
        
    $url "http://gdata.youtube.com/feeds/api/users/$username";
        
    $tdata $this->load_data_url($url);
      
        
    $udata null;
        if (
    is_array($tdata['ENTRY'][0])) {
          
    $d =& $tdata['ENTRY'][0];
        
          
    $udata['published'] = rc_toolkit::parse_rfc3339($d['PUBLISHED'][0]['VALUE']);
          
    $udata['updated'] = rc_toolkit::parse_rfc3339($d['UPDATED'][0]['VALUE']);
          
    $udata['name'] = $d['YT:FIRSTNAME'][0]['VALUE'];
          
    $udata['username'] = $d['YT:USERNAME'][0]['VALUE'];
          
    $udata['gender'] = $d['YT:GENDER'][0]['VALUE'];
          
    $udata['location'] = $d['YT:LOCATION'][0]['VALUE'];
          
    $udata['occupation'] = $d['YT:OCCUPATION'][0]['VALUE'];
          
    $udata['thumbnail'] = $d['MEDIA:THUMBNAIL'][0]['ATTRIBUTES']['URL'];
        
          
    $udata['viewcount'] = $d['YT:STATISTICS'][0]['ATTRIBUTES']['VIEWCOUNT'] ? $d['YT:STATISTICS'][0]['ATTRIBUTES']['VIEWCOUNT'] : 0;
          
    $udata['videowatchcount'] = $d['YT:STATISTICS'][0]['ATTRIBUTES']['VIDEOWATCHCOUNT'] ? $d['YT:STATISTICS'][0]['ATTRIBUTES']['VIDEOWATCHCOUNT'] : 0;
          
    $udata['subscribercount'] = $d['YT:STATISTICS'][0]['ATTRIBUTES']['SUBSCRIBERCOUNT'] ? $d['YT:STATISTICS'][0]['ATTRIBUTES']['SUBSCRIBERCOUNT'] : 0;
          
    $udata['lastwebaccess'] = rc_toolkit::parse_rfc3339($d['YT:STATISTICS'][0]['ATTRIBUTES']['LASTWEBACCESS']);
        }
      
        return 
    $udata;
      }

      function 
    load_data_url($url)
      {
        
    $data $this->cache_enable $this->get_xml_response_cache($url) : file_get_contents($url);
        
    $xml_parser = new rc_xml_parser();
        
    $pdata $xml_parser->get_xml_tree($data);
        return 
    $pdata;
      }


      function 
    get_total_entries()
      {
        return (int) 
    $this->gdata['FEED'][0]['OPENSEARCH:TOTALRESULTS'][0]['VALUE'];
      }

      function 
    get_video($id)
      {
        
    $url "http://gdata.youtube.com/feeds/videos/$id";
        
    $this->gdata $this->load_data_url($url);
        
    $video $this->yt_fetch_video($this->gdata['ENTRY'][0]);
      
        return 
    $video;
      }

        function 
    yt_fetch_video($vid)
        {
            if( ! 
    $vid )
                return 
    false;

            
    $guid explode"/" $vid['ID'][0]['VALUE'] );
            
    $id $guidcount($guid) - ];
            
    $tags = array();
            foreach( 
    $vid['CATEGORY'] as $tag ) {
                if( 
    ereg"keywords" $tag['ATTRIBUTES']['SCHEME'] ) )
                    
    array_push$tags $tag['ATTRIBUTES']['TERM'] );
            }
          
            
    $views $r_avg $r_count 0;
          
            if( isset(
    $vid['GD:RATING']) ) {
                
    $r_avg $vid['GD:RATING'][0]['ATTRIBUTES']['AVERAGE'];
                
    $r_count $vid['GD:RATING'][0]['ATTRIBUTES']['NUMRATERS'];
            }
          
            if( isset(
    $vid['YT:STATISTICS']) )
                
    $views $vid['YT:STATISTICS'][0]['ATTRIBUTES']['VIEWCOUNT'];
          
            return array(
                
    "id" => $id,
                
    "author" => $vid['AUTHOR'][0]['NAME'][0]['VALUE'],
                
    "upload_time" => rc_toolkit::parse_rfc3339($vid['PUBLISHED'][0]['VALUE']),
                
    "tags" => $tags,
                
    "title" => $vid['TITLE'][0]['VALUE'],
                
    "content" => $vid['CONTENT'][0]['VALUE'],
                
    "description" => $vid['MEDIA:GROUP'][0]['MEDIA:DESCRIPTION'][0]['VALUE'],
                
    "duration" => $vid['MEDIA:GROUP'][0]['YT:DURATION'][0]['ATTRIBUTES']['SECONDS'],
                
    "view_count" => $views,
                
    "rating_avg" => $r_avg,
                
    "rating_count" => $r_count,
                
    "thumbnail_url" => $vid['MEDIA:GROUP'][0]['MEDIA:THUMBNAIL'][0]['ATTRIBUTES']['URL']
            );
        }

    }

    class 
    rc_vidfeeder_tag extends rc_tagcloud
    {
      var 
    $table 'se_vidfeedertags';

    }
     
    Последнее редактирование: 24 мар 2015
  6. codeator

    codeator Постоялец

    Регистр.:
    18 май 2013
    Сообщения:
    53
    Симпатии:
    14
    Я бы для начала вбил костыль в $this->cache_enable = $setting['setting_vidfeeder_xml_cache_enable'];
    поставил бы

    $this->cache_enable = false; и дальше проверял от кэша ли это зависит
     
  7. Dart66

    Dart66 Создатель

    Регистр.:
    29 июл 2008
    Сообщения:
    11
    Симпатии:
    0
    ситуация такая - бывает пропадает видео с самого ютуба
     
  8. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    369
    Симпатии:
    14
    Ребят, ситуация ухудшилась, теперь всё видео пропало, лишь дает ссылку на страницу с текстом о том что поддержка завершена.
    https://support.google.com/youtube/answer/6098135?hl=en
    Что делать? Какие изменения внести????
     
  9. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    youtube недавно прекратил поддержку части функций api v2 у Вас $url = "http://gdata.youtube.com/feeds/videos/$id"; такое больше не работает. Сам недавно переписывал все скрипты на api v3 у них готовые классы есть, нужно курить мануал https://developers.google.com/youtube/v3/ кстати даже тут буквально на днях интерфейс сменили.
     
  10. Sergian

    Sergian Писатель

    Регистр.:
    26 окт 2014
    Сообщения:
    5
    Симпатии:
    5
    Точно так. С прекращением поддержки старых (до 3 версии) YOUTUBE API - "слетела" куча сайтов.
    Некоторые уже не восстановятся.
    Например на prismotube наклепали за последние 2 года (как в рунет нуллед попал) кучу сайтов, а cms больше не поддерживается, api слетела - прощай сайты на prismotube.
    Самодельных скриптов с парсерами ютуб много загнулось.
    Короче как правильно говорит guru85: или курить ман и перепиливать скрипты, либо переходить на другую CMS с потерей индекса итп...
     
    latteo нравится это.