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

vave

Полезный
Регистрация
22 Июн 2007
Сообщения
466
Реакции
16
Есть у меня скриптик 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 = $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';
 
}
 
  • Заблокирован
  • #2
$url = "Для просмотра ссылки Войди или Зарегистрируйся" . join("&", $str_params);//rc_toolkit::debug($url,"vidfeeder:get_videos");

Для просмотра ссылки Войди или Зарегистрируйся - пройдите по этой ссылке, там у вас скрипт вещания с определенного канала. Проверьте что это за канал, ваш ли он и т.д.

У вас еще должен быть конфигурационный файл, я так понимаю. Потому как в этом скрипте у вас просто прописаны теги на вещание, а не данные.
А именно:
Для просмотра ссылки Войди или Зарегистрируйся$username
Для просмотра ссылки Войди или Зарегистрируйся$id

А вообще сильно смахивает на обычный парсер видео контента. Причем парсится видео с канала на ютубе и соответственно если его удалили на канале, то и у вас его тоже не будет. Может я и не прав, с Ютубом не очень знаком. И с парсерами тем более. )))
 
Просто в настройках скрипта, можно сделать что бы видео отображалось с канала) вообще это плагин старый для socialengine 3
 
  • Заблокирован
  • #4
Ну так я открыл скрипт и там прописан канал. Вы проверьте, это видео на этом канале есть вообще?
А что за CMS у вас?
 
SocialEngine.
Код с каналом можно удалить, он относится к настройкам в админке.
Вот сам сайт
Видео то появляются то пропадают, иногда надо раз 100 обновить страницу что видео появились.
Видео как правило пропадают сразу все, и раздел видео получается пустой, обновляешь минут 5, и на какое то время видео снова появляются.
Скопировал скрипт на локалку, всё работает, подозреваю проблема как то связана еще с посещаемостью, возможно у старого youtube api какие то ограничения..
 
  • Заблокирован
  • #6
У вас Социал Енгине или Вии Енгин? Я как то работал и с той и с другой. Необходимо ковырять, в направлении самого модуля. Видео я так понимаю добавляются через ссылки? Так вот надо бы глянуть, что отдает сервер, а что принимает.
 
Я думаю остальные файлы скрипта, особой роли не играют, может ошибаюсь... Но загружу еще пару файлов, 1 отвечает за выбор видео, а другой за просмотр видео.
Еще есть шаблоны, но с ними точно всё в порядке.

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

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

Вложения

  • video.rar
    1,4 KB · Просмотры: 4
Неужели это безнадежный случай?
 
  • Заблокирован
  • #9
Попробую помочь. Но не обещаю. Сам буду методом "тыка" разбираться.
Да и еще вопрос, у вас релиз какой?
И еще ссылочку на ваш сайт.
 
Попробую помочь. Но не обещаю. Сам буду методом "тыка" разбираться.
Да и еще вопрос, у вас релиз какой?
И еще ссылочку на ваш сайт.
вот ссылка


 
Назад
Сверху