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

vave

Полезный
Регистрация
22 Июн 2007
Сообщения
467
Реакции
16
Есть у меня сайт, в нем раздел видео, который постоянно перестает работать, выдает ошибку "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 == 0 & $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 == 0 & $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 == 0 & $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);
 
Сошил Энжин 3

Почему эта проблема возникает в связи с посещаемостью?
 
Последнее редактирование модератором:
может, удаляют просто кто-то из совладельцев канала/видео?
 
Заходишь в раздел видео, или какую-то определенную категорию, если на странице видео отсутствуют, обновляешь страничку и все видео появляются, иногда приходиться раз 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 = $guid[ count($guid) - 1 ];
        $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';

}
 
Последнее редактирование:
Я бы для начала вбил костыль в $this->cache_enable = $setting['setting_vidfeeder_xml_cache_enable'];
поставил бы

$this->cache_enable = false; и дальше проверял от кэша ли это зависит
 
ситуация такая - бывает пропадает видео с самого ютуба
 
Ребят, ситуация ухудшилась, теперь всё видео пропало, лишь дает ссылку на страницу с текстом о том что поддержка завершена.
Для просмотра ссылки Войди или Зарегистрируйся
Что делать? Какие изменения внести????
 
youtube недавно прекратил поддержку части функций api v2 у Вас $url = "Для просмотра ссылки Войди или Зарегистрируйся"; такое больше не работает. Сам недавно переписывал все скрипты на api v3 у них готовые классы есть, нужно курить мануал Для просмотра ссылки Войди или Зарегистрируйся кстати даже тут буквально на днях интерфейс сменили.
 
Точно так. С прекращением поддержки старых (до 3 версии) YOUTUBE API - "слетела" куча сайтов.
Некоторые уже не восстановятся.
Например на prismotube наклепали за последние 2 года (как в рунет нуллед попал) кучу сайтов, а cms больше не поддерживается, api слетела - прощай сайты на prismotube.
Самодельных скриптов с парсерами ютуб много загнулось.
Короче как правильно говорит guru85: или курить ман и перепиливать скрипты, либо переходить на другую CMS с потерей индекса итп...
 
Назад
Сверху