Парсер канала ютуб

#1 14 мая 2015 в 22:52
Доброго времени суток… Выкладываю как есть скрипт.
Парсит канал ютуб и создает сиквел запрос добавления в вашу базу
информации о 30 роликах на первой странице роликов добавленных (кем-то) на ютуб

  1.  
  2.  
  3. $user_type='user'; // or 'channel';
  4. $user='OfficialPinkFloyd';
  5.  
  6. $sql="INSERT IGNORE INTO cms_youtobe (provider_id, duration, title)\nVALUES\n";
  7.  
  8. $content=file_get_contents('http://www.youtube.com/'.$user_type.'/'.$user.'/videos');
  9.  
  10. $content=preg_replace('/[\s]+/',' ',$content);
  11. $content=preg_replace('/"/','',$content);
  12. $content=preg_replace('/href=\/watch\?v=/',"\n",$content);
  13. $content=preg_replace('/<(span|img)[^>]*>/','',$content);
  14. $content=preg_replace('/<\/(span|img)>/','',$content);
  15. $content=preg_replace('/[\s]*class=[^>^\n]*>/','>',$content);
  16. $content=preg_replace('/>[\s]*/','>',$content);
  17. $content=preg_replace('/[\s]*</','<',$content);
  18. $content=preg_replace('/<button.*/','',$content);
  19. $content=preg_replace('/><\/a>/','\',\'',$content);
  20. $content=preg_replace('/<\/a>.*/','',$content);
  21. $lines = preg_split('/\n/', $content);
  22.  
  23. $count=0;
  24. foreach($lines as $line){
  25. if($count==0) {
  26. $count=1;
  27. } else if($count==1) {
  28. $sql.="('".$line."',";
  29. $count=2;
  30. } else if($count==2) {
  31. $line=preg_replace('/^[^>]*>/','',$line);
  32. $sql.="'".$line."'),\n";
  33. $count=1;
  34. }
  35. }
  36.  
  37. $sql=preg_replace('/,$/',';',$sql);
  38.  
  39.  
:)
#2 14 мая 2015 в 23:08
По той же теме.
до недавнего времени пользовался для вывода на странице видео с интересующего меня канала таким скриптом (ниже) но после изменения API перестало работать.
  1. <div>
  2. <div>
  3. <div id="prevVideo">&nbsp;</div>
  4. <div id="listVideo2">&nbsp;</div>
  5. <div id="nextVideo">&nbsp;</div>
  6. </div>
  7. <br clear="all" />
  8. <div id="error" style="border:1px #сccc solid; color:#f00">&nbsp;</div>
  9. </div>
  10. <script type="text/javascript">
  11.  
  12. $(document).ready ( function (){ //
  13. var user ='имя автора канала на ютубе';
  14. var lenPage=20;
  15. var startOn=false;
  16. var playerWidth="480";
  17. var playerHeight1="360";
  18. var playerHeight2="270";
  19. var startOn=false;
  20.  
  21. function animeDX(id, data, direct){
  22. $(id).hide();
  23. $(id).html( data);
  24. $(id).animate( {'opacity':'toggle'},500);
  25. loadL();
  26. if (!startOn) {
  27. $('#ytvN0').trigger('click');
  28. startOn=true;
  29. }
  30. return;
  31.  
  32. var w = $(id).width()+0;
  33. var h = $(id).height()+0;
  34. var top=0;
  35. var left=-w;
  36. if ( direct =="top"){ left=0; top=-h; }
  37. if ( direct =="bottom"){ left=0; top=h; }
  38. if ( direct =="left"){ left=w; top=0; }
  39. if ( direct == "right"){ left=-w; top=0; }
  40. var s='<div id="tmp5421" style="position:relative; top:'+ top +'px; left:'+ left +'px;">' + data + '</div>';
  41. $(id).html(s);
  42. $('#tmp5421').animate(
  43. {left:0,top:0},400,'swing',
  44. function(){
  45. $(id).html(data);
  46. loadL();
  47. if (!startOn) {
  48. $('#ytvN0').trigger('click');
  49. startOn=true;
  50. }
  51. });
  52. }
  53.  
  54.  
  55. function loadL(){
  56. $('.oneVideo').click (
  57. function (){
  58. var aspectRatio = $(this).data("ws");
  59. var width = playerHeight1;
  60. if (aspectRatio == "widescreen"){width = playerHeight2;}
  61.  
  62. var s= '<iframe width="'+playerWidth+'" height="'+ width +'"'+
  63. 'src="http://www.youtube.com/embed/'+
  64. $(this).data("href") +
  65. '?html5=1&theme=light&autoplay=1&wmode=transparent&rel=0&color=red&modestbranding=1&autohide=1"'+
  66. ' frameborder="0" allowfullscreen=""></iframe>';
  67. $('#player1').html(s);
  68. $('#vdescr').html('<h3>'+decodeURIComponent( $(this).data("title") )+ /*' ('+$(this).data("count")+*/'</h3><p>'+decodeURIComponent( $(this).data("description") )+'</p>');
  69. return (false);
  70. })
  71. }
  72.  
  73. function clickPage(){
  74. $('.clickPage').click (
  75. function (){
  76. readList($(this).data("page")+0, $(this).data("direct"));
  77. })
  78. }
  79.  
  80. function loadPages(page){
  81. var i = 0;
  82. var html=[];
  83. if (page > 1) {
  84. i=page-1;
  85. html.push('<a href="#" data-page="' + i + '" class="clickPage" + data-direct="bottom">');
  86. html.push('предыдущие</a>');
  87. }
  88. $('#prevVideo').html(html.join(''));
  89. html=[];
  90.  
  91. i = page + 1;
  92. var serach= 'http://gdata.youtube.com/feeds/api/users/'+user+'/uploads?time=today&max-results='+lenPage+'&v=2&alt=jsonc&orderby=published&start-index='+(1+ (i-1)*lenPage)+'&callback=?';
  93. $.ajax({
  94. url: serach,
  95. dataType:'json',
  96. cache: false,
  97. async: true,
  98. type: "get",
  99. success: function(content){
  100. var entries = content.data.items || [];
  101. if (entries.length > 0) {
  102. html.push('<a href="#" data-page="' + i + '" class="clickPage" + data-direct="top">');
  103. html.push('еще видео</a>');
  104. }
  105. $('#nextVideo').html(html.join(''));
  106. html=[];
  107. clickPage();
  108. },
  109. error: function (xhr, ajaxOptions, thrownError) {
  110. $('#error').html(xhr.status+ ' - '+ thrownError);
  111. }
  112. });
  113. }
  114.  
  115.  
  116.  
  117. function readList (page,direct) {
  118. var entries= [];
  119. var html=[];
  120. var serach= 'http://gdata.youtube.com/feeds/api/users/'+user+'/uploads?time=today&max-results='+lenPage+'&v=2&alt=jsonc&orderby=published&start-index='+(1+ (page-1)*lenPage)+'&callback=?';
  121. $.ajax({
  122. url: serach,
  123. dataType:'json',
  124. cache: false,
  125. async: true,
  126. type: "get",
  127. success: function(content){
  128. var entries = content.data.items || [];
  129. var html= [];
  130. var entry = "";
  131. var aspectRatio="";
  132. var viewCount=""
  133. // html.push('<p>Число записей '+entries.length+'</p>');
  134. var datime= [];
  135. for (var i = 0; i < entries.length; i++) {
  136. entry = entries[i];
  137. aspectRatio = entry.aspectRatio || '';
  138. viewCount = entry.viewCount || '';
  139. html.push('<div class="oneV">');
  140. html.push('<p>');
  141. html.push('<a class="oneVideo" id="ytvN'+i+'"');
  142. html.push(' href="#" data-count="'+ viewCount + '"');
  143. html.push(' data-href="'+ entry.id + '"');
  144. html.push(' data-ws="'+ aspectRatio + '"');
  145. html.push(' data-description="'+encodeURIComponent(entry.description)+'"');
  146. html.push(' data-title="'+encodeURIComponent(entry.title)+'"');
  147. html.push(' >');
  148. html.push('<img width="120" height="90" src ="'+entry.thumbnail.sqDefault+'"><br>');
  149. html.push(entry.title+'</a></p></div>');
  150. }
  151. html.push(' <br clear="all">');
  152. animeDX('#listVideo2',html.join(''),direct);
  153. loadL();
  154. loadPages(page);
#3 14 мая 2015 в 23:19
насколько я понял нет… рсс ленты попросту недоступны
потому я написал новый…
#4 14 мая 2015 в 23:27
Есть ссылочка на результат? ;)
#5 14 мая 2015 в 23:31
поместите в пхп )
ок сейчас сделаю
#6 14 мая 2015 в 23:34
vse-smotri.ru/pinkfloyd.php


  1.  
  2. <?php
  3.  
  4. $user_type='user'; // or 'channel';
  5. $user='OfficialPinkFloyd';
  6.  
  7. $sql="INSERT IGNORE INTO cms_youtobe (provider_id, duration, title)\nVALUES\n";
  8.  
  9. $content=file_get_contents('http://www.youtube.com/'.$user_type.'/'.$user.'/videos');
  10.  
  11. $content=preg_replace('/[\s]+/',' ',$content);
  12. $content=preg_replace('/"/','',$content);
  13. $content=preg_replace('/href=\/watch\?v=/',"\n",$content);
  14. $content=preg_replace('/<(span|img)[^>]*>/','',$content);
  15. $content=preg_replace('/<\/(span|img)>/','',$content);
  16. $content=preg_replace('/[\s]*class=[^>^\n]*>/','>',$content);
  17. $content=preg_replace('/>[\s]*/','>',$content);
  18. $content=preg_replace('/[\s]*</','<',$content);
  19. $content=preg_replace('/<button.*/','',$content);
  20. $content=preg_replace('/><\/a>/','\',\'',$content);
  21. $content=preg_replace('/<\/a>.*/','',$content);
  22. $lines = preg_split('/\n/', $content);
  23.  
  24. $count=0;
  25. foreach($lines as $line){
  26. if($count==0) {
  27. $count=1;
  28. } else if($count==1) {
  29. $sql.="('".$line."',";
  30. $count=2;
  31. } else if($count==2) {
  32. $line=preg_replace('/^[^>]*>/','',$line);
  33. $sql.="'".$line."'),\n";
  34. $count=1;
  35. }
  36. }
  37.  
  38. $sql=preg_replace('/,$/',';',$sql);
  39.  
  40. echo $sql;
  41.  
  42. ?>
  43.  
#7 14 мая 2015 в 23:35
Нил, теперь требуется как минимум API key в консоли разработчика Google. И его значение нужно подставлять в запрос, в вашем случае GET параметром, с названием "key".

Базовый url для запроса
www.googleapis.com/youtube/v3/
Поисковый url www.googleapis.com/youtube/v3/search

Т.е. начало поискового запроса к api будет www.googleapis.com/youtube/v3/search?key=ВАШ_КЛЮЧ
Тот же принцип с другими ресурсами api. Ответы гугл отдает в json формате.

Документация
#8 14 мая 2015 в 23:38
наверное нетрудно пойти и в глубь и стащить больше роликов v
#9 14 мая 2015 в 23:48

Нил, теперь требуется как минимум API key

Fuze
кстати я в последнее время не могу никак попасть на страницу редактирования прежде созданных ключей.
По ссылке code.google.com/apis/youtube/dashboard/ сейчас успешно создал под новым гугл аккаунтом новый ключ, но когда пытаюсь перейти по ней же под аккаунтом на который ранее создавал канал для сайта, просто белая страница и все. Хотел проверить настройки, но так и не смог попасть в режим редактирования прежнего ключа. Не в курсе, как быть?
#10 14 мая 2015 в 23:50


Нил, теперь требуется как минимум API key в консоли разработчика Google. И его значение нужно подставлять в запрос, в вашем случае GET параметром, с названием "key".

Fuze

ключ дас возможность просматривать рсс ленту канала?
вообще, есть теперь рсс ленты? я не нашел…
#11 14 мая 2015 в 23:55

кстати я в последнее время не могу никак попасть на страницу редактирования прежде созданных ключей. По ссылке code.google.com/apis/youtube/dashboard/ сейчас успешно создал под новым гугл аккаунтом новый ключ, но когда пытаюсь перейти по ней же под аккаунтом на который ранее создавал канал для сайта, просто белая страница и все. Хотел проверить настройки, но так и не смог попасть в режим редактирования прежнего ключа. Не в курсе, как быть?

Нил
Использовать API v2 не имеет смысла. Он либо уже отключен частично, либо скоро везде будет 404.
Да и теперь управление ключами в консоли разработчика.
А проблема, да, есть. Если вы у них откроете на этой "белой странице" консоль браузера (и еще раз с открытой консолью обновите страницу), то увидите ошибку, смысл которой в том, что гугл по аяксу пытается запросить что-то, что требует аутенфикации и подтверждения. Баг в общем у них. Выход — разавторизоваться и заново авторизоваться или же найти в консоли ссылку, по обращении к которой ошибка и перейти по ней в браузере, где будет окно авторизации. Авторизуетесь и все заработает.

ключ дас возможность просматривать рсс ленту канала?

SenseiShin

ключ даст возможность выполнять запросы к api, ссылку на документацию я дал выше.
#12 15 мая 2015 в 00:06


ключ дас возможность просматривать рсс ленту канала?

SenseiShin

ключ даст возможность выполнять запросы к api, ссылку на документацию я дал выше.

Fuze

Интересно! Спасибо!
#13 15 мая 2015 в 18:34
может кто-то подскажет как из скрипта сделать загрузку ролика по ссылке в видеокомпоненте?
передаем скрипту ссылку, ид пользователя, дескрипшн (чаще всего пустой), возможно другие параметры и чтобы он добавил ролик
в компонент и ленту
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.