Advertisement
Guest User

Untitled

a guest
Sep 26th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.29 KB | None | 0 0
  1. <?php
  2. class Class_Parser_Youtube extends Class_Parser
  3. {
  4. protected $_name = 'youtube';
  5. protected $_homeUrl = 'https://youtube.com';
  6. public $apiKey;
  7.  
  8. public function __construct($version)
  9. {
  10. $this->_version = $version;
  11. }
  12.  
  13. public static function getVersions()
  14. {
  15. return array(
  16. 'AU' => 'Австралия',
  17. 'RU' => 'Россия',
  18. 'GB' => 'Англия',
  19. 'US' => 'США',
  20. 'CA' => 'Канада',
  21. 'BR' => ' Бразилия',
  22. 'VN' => 'Вьетнам',
  23. 'DE' => 'Германия',
  24. 'HK' => 'Гонконг',
  25. 'IN' => 'Индия',
  26. 'IQ' => 'Ирак',
  27. 'ES' => 'Испания',
  28. 'KZ' => 'Казахстан',
  29. 'MX' => 'Мексика',
  30. 'NL' => 'Нидерланды',
  31. 'PL' => 'Польша',
  32. 'RS' => 'Сербия',
  33. 'TR' => 'Турция',
  34. 'UA' => 'Украина',
  35. 'FR' => 'Франция',
  36. 'SE' => 'Швеция',
  37. 'KR' => 'Южная Корея',
  38. 'JP' => 'Япония',
  39. );
  40. }
  41.  
  42. /*
  43. * функция для получения полного названия страны по ее коду
  44. * return string
  45. */
  46. public function getCountryName($shortName) {
  47.  
  48. $countries = self::getVersions();
  49. return $countries[$shortName];
  50. }
  51.  
  52. /*
  53. * получаем информацию о канале
  54. * param $url полная ссылка на канал
  55. * return Class_Parser_Youtube_Channel
  56. */
  57. public function getChannelInfo($url) {
  58.  
  59. $channel = new Class_Parser_Youtube_Channel();
  60. $channel->url = $url;
  61. $parseUrl = $this->buildParseChannelInfo($url);
  62.  
  63. //получаем информацию о канале
  64. $data = json_decode($this->getContent($parseUrl));
  65.  
  66. $this->log('Получены данные о канале ' . $parseUrl);
  67.  
  68. if (isset($data->items[0]->snippet)) {
  69. $channelInfo = $data->items[0]->snippet;
  70. }
  71.  
  72. $channel->title = $channelInfo->title;
  73. $channel->description = $channelInfo->description;
  74.  
  75. if (isset($channelInfo->country)) {
  76. $channel->blockedCountryList[] = $channelInfo->country;
  77. }
  78.  
  79. $nextPageToken = '';
  80.  
  81. do {
  82.  
  83. $data = json_decode($this->getContent($this->buildParseChannelUrl($url, $nextPageToken)));
  84.  
  85. foreach ($data->items as $item) {
  86.  
  87. //если попался плейлист а не видео, пропускаем шаг
  88. if (!isset($item->id->videoId)) {
  89. continue;
  90. }
  91.  
  92. $videoUrl = $this->buildVideoUrl($item->id->videoId);
  93. $channel->videoList[] = $videoUrl;
  94. }
  95.  
  96. //получаем токен на следующую страницу, если токена нет, то закончился список видео
  97. if (isset($data->nextPageToken)) {
  98. $nextPageToken = $data->nextPageToken;
  99. } else {
  100. break;
  101. }
  102.  
  103. } while (!empty($data->items));
  104.  
  105. return $channel;
  106. }
  107.  
  108. /*
  109. * получаем информацию о видео
  110. * param $url полная ссылка на видео
  111. * return Class_Parser_Youtube_Video
  112. */
  113. public function getVideoInfo($url) {
  114.  
  115. $video = new Class_Parser_Youtube_Video();
  116. $video->url = $url;
  117. $parseUrl = $this->buildParseVideoUrl($url);
  118.  
  119. //получаем информацию о видео
  120. $data = json_decode($this->getContent($parseUrl));
  121.  
  122. $video->title = $data->items[0]->snippet->title;
  123. $video->description = $data->items[0]->snippet->description;
  124.  
  125. if (!empty($data->items[0]->contentDetails->regionRestriction->blocked)) {
  126. $video->blockedCountryList[] = $data->items[0]->contentDetails->regionRestriction->blocked;
  127. }
  128.  
  129. return $video;
  130. }
  131.  
  132. /*
  133. * получаем информацию о доступности канала
  134. *
  135. */
  136. public function checkChannelAvailability() {
  137.  
  138. }
  139.  
  140. /*
  141. * устанвливаем ключ для работы с youtube api
  142. */
  143. public function setApiKey($key) {
  144. $this->apiKey = $key;
  145. }
  146.  
  147. /*
  148. * функция для получения ссылки на получение данных о канале
  149. * return string
  150. */
  151. public function buildParseChannelUrl($url, $nextPageToken = null) {
  152. $channelId = str_replace('https://www.youtube.com/channel/', '', $url);
  153. $channelId = preg_replace('/\/.*/', '', $channelId);
  154. $url= "https://www.googleapis.com/youtube/v3/search?pageToken=" . $nextPageToken . "&order=date&part=snippet&channelId=" . $channelId . "&maxResults=50&key=" . $this->apiKey;
  155. return $url;
  156. }
  157.  
  158. /*
  159. * формируем ссылку на видео по его id
  160. * return string
  161. */
  162. public function buildVideoUrl($idVideo) {
  163. $url = "https://www.youtube.com/watch?v=" . $idVideo;
  164. return $url;
  165. }
  166.  
  167. /*
  168. * функция для получения ссылки на получение данных о видео
  169. * return string
  170. */
  171. public function buildParseVideoUrl($url) {
  172. $videoId = str_replace('https://www.youtube.com/watch?v=', '', $url);
  173. $url = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet&id=" . $videoId . "&key=" . $this->apiKey;
  174. return $url;
  175. }
  176.  
  177. /*
  178. * функция для формирование ссылки к api на получение информации о канале
  179. * return string
  180. */
  181. public function buildParseChannelInfo($url) {
  182. $channelId = str_replace('https://www.youtube.com/channel/', '', $url);
  183. $channelId = preg_replace('/\/.*/', '', $channelId);
  184. $url = "https://www.googleapis.com/youtube/v3/channels?part=snippet&id=" . $channelId . "&key=" . $this->apiKey;
  185. return $url;
  186. }
  187.  
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement