YouTube Data API 3 помогите разобраться

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

  1. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    369
    Симпатии:
    14
    Есть у меня скриптик 1, который работает через YouTube Data API, я в этом полный ноль, и до недавнего времени даже не понимал как у меня воспроизводятся видео на сайте, вообщем эти видео, всё чаще и чаще стали слетать с сайта, полностью все, иногда частично.

    Начал изучать файлы PHP, долго думал в чем же причина, и тут до меня дошло, что скрипт использует первую версию YouTube Data API, а она уже давно не поддерживается, более того, уже и вторая версия закончила в прошлом году свою официальную поддержку...

    Так вот в чем мой вопрос, какие в данный код, нужно внести изменения, что бы всё было по уму, в инструкции по установке на сайте youtube полная каша, если со второй версий всё более менее понятно, то с третьей темный лес... Причем нет даже толком никаких примеров.

    Вот код моего скрипта, очень надеюсь на вашу помощь!!!

    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';
     
    }
     
  2. Леонид1981

    Леонид1981 Писатель

    Заблокирован
    Регистр.:
    5 апр 2014
    Сообщения:
    8
    Симпатии:
    13
    $url = "http://gdata.youtube.com/feeds/videos?" . join("&", $str_params);//rc_toolkit::debug($url,"vidfeeder:get_videos");

    http://gdata.youtube.com/feeds/videos? - пройдите по этой ссылке, там у вас скрипт вещания с определенного канала. Проверьте что это за канал, ваш ли он и т.д.

    У вас еще должен быть конфигурационный файл, я так понимаю. Потому как в этом скрипте у вас просто прописаны теги на вещание, а не данные.
    А именно:
    http://gdata.youtube.com/feeds/api/users/$username
    http://gdata.youtube.com/feeds/videos/$id

    А вообще сильно смахивает на обычный парсер видео контента. Причем парсится видео с канала на ютубе и соответственно если его удалили на канале, то и у вас его тоже не будет. Может я и не прав, с Ютубом не очень знаком. И с парсерами тем более. )))
     
  3. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    369
    Симпатии:
    14
    Просто в настройках скрипта, можно сделать что бы видео отображалось с канала) вообще это плагин старый для socialengine 3
     
  4. Леонид1981

    Леонид1981 Писатель

    Заблокирован
    Регистр.:
    5 апр 2014
    Сообщения:
    8
    Симпатии:
    13
    Ну так я открыл скрипт и там прописан канал. Вы проверьте, это видео на этом канале есть вообще?
    А что за CMS у вас?
     
  5. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    369
    Симпатии:
    14
    SocialEngine.
    Код с каналом можно удалить, он относится к настройкам в админке.
    Вот сам сайт

    Видео то появляются то пропадают, иногда надо раз 100 обновить страницу что видео появились.
    Видео как правило пропадают сразу все, и раздел видео получается пустой, обновляешь минут 5, и на какое то время видео снова появляются.
    Скопировал скрипт на локалку, всё работает, подозреваю проблема как то связана еще с посещаемостью, возможно у старого youtube api какие то ограничения..
     
  6. Леонид1981

    Леонид1981 Писатель

    Заблокирован
    Регистр.:
    5 апр 2014
    Сообщения:
    8
    Симпатии:
    13
    У вас Социал Енгине или Вии Енгин? Я как то работал и с той и с другой. Необходимо ковырять, в направлении самого модуля. Видео я так понимаю добавляются через ссылки? Так вот надо бы глянуть, что отдает сервер, а что принимает.
     
  7. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    369
    Симпатии:
    14
    Я думаю остальные файлы скрипта, особой роли не играют, может ошибаюсь... Но загружу еще пару файлов, 1 отвечает за выбор видео, а другой за просмотр видео.
    Еще есть шаблоны, но с ними точно всё в порядке.

    Ссылки на видео я не добавляю.
    Смысл скрипта - он таскает все видео с Youtube, и сортирует по ключевым словам, которые я прописываю в админке.
    Видео начинает пропадать когда одновременно на сайте человек 20-30 сидит...
    Пропадают либо все видео, либо какой-то отдельный раздел, либо несколько.

    Решение данной проблемы, для меня очень важно!!!
     

    Вложения:

    • video.rar
      Размер файла:
      1,4 КБ
      Просмотров:
      4
  8. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    369
    Симпатии:
    14
    Неужели это безнадежный случай?
     
  9. Леонид1981

    Леонид1981 Писатель

    Заблокирован
    Регистр.:
    5 апр 2014
    Сообщения:
    8
    Симпатии:
    13
    Попробую помочь. Но не обещаю. Сам буду методом "тыка" разбираться.
    Да и еще вопрос, у вас релиз какой?
    И еще ссылочку на ваш сайт.
     
  10. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    369
    Симпатии:
    14
    вот ссылка