Пример #1
0
 public static function backup($user, $taskId = 0, $syncTaskId = 0, $ignoreUpdate = false)
 {
     // Stats
     $stats = array('playlists' => 0, 'videos' => 0, 'subscriptions' => 0);
     // Channels
     $channels = \Rest::get(static::$endpoints['channels'], array('part' => static::$part['channels']['minimal'], 'maxResults' => static::$limit, 'mine' => 'true'), $user);
     $dbChannels = array();
     $playlists = array();
     if ($channels) {
         if ($channels['pageInfo']['totalResults'] < static::$limit) {
             foreach ($channels['items'] as $channel) {
                 // Save channel
                 $formatedData = array('user_id' => $user['username']['id'], 'task_id' => $taskId, 'sync_task_id' => $syncTaskId, 'etag' => $channel['etag'], 'kind' => static::$kind['playlist'], 'channel_id' => $channel['id'], 'title' => $channel['snippet']['title'], 'description' => $channel['snippet']['description'], 'created_at' => date(DATE_TIME, strtotime($channel['snippet']['publishedAt'])), 'picture' => $channel['snippet']['thumbnails']['default']['url'], 'status' => ChannelsModel::STATUS_ACTIVE);
                 $dbChannels[] = ChannelsModel::create($formatedData)->save();
                 if ($channel['contentDetails']) {
                     if ($channel['contentDetails']['relatedPlaylists']) {
                         foreach ($channel['contentDetails']['relatedPlaylists'] as $playlistId) {
                             $playlists[] = $playlistId;
                         }
                     }
                 }
             }
         }
     }
     // Get channel playlists
     $channelPlaylists = \Rest::get(static::$endpoints['playlists'], array('part' => static::$part['playlists']['all'], 'channelId' => $channel['id'], 'maxResults' => static::$limit), $user);
     if (isset($channelPlaylists['result']['error'])) {
         d($channelPlaylists);
     }
     // Get channel related playlists
     $playlists = \Rest::get(static::$endpoints['playlists'], array('part' => static::$part['playlists']['all'], 'id' => implode(',', $playlists), 'maxResults' => static::$limit), $user);
     if (isset($playlists['result']['error'])) {
         d($playlists);
     }
     $playlists['pageInfo']['totalResults'] += $channelPlaylists['pageInfo']['totalResults'];
     $playlists['items'] = array_merge($channelPlaylists['items'], $playlists['items']);
     $videos = array();
     $dbPlaylists = array();
     if ($playlists) {
         if ($playlists['pageInfo']['totalResults'] < static::$limit) {
             foreach ($playlists['items'] as $playlist) {
                 if (!in_array($playlist['snippet']['title'], static::$excludedPlaylists)) {
                     $formatedData = array('user_id' => $user['username']['id'], 'task_id' => $taskId, 'sync_task_id' => $syncTaskId, 'channel_id' => $dbChannels[0]->id, 'youtube_channel_id' => $channel['id'], 'youtube_playlist_id' => $playlist['id'], 'etag' => $playlist['etag'], 'kind' => static::$kind['playlist'], 'title' => $playlist['snippet']['title'], 'description' => $playlist['snippet']['description'], 'videos_count' => $playlist['contentDetails']['itemCount'], 'videos_player' => base64_encode($playlist['player']['embedHtml']), 'created_at' => date(DATE_TIME, strtotime($playlist['snippet']['publishedAt'])), 'picture' => $playlist['snippet']['thumbnails']['default']['url'], 'privacy' => $playlist['status']['privacyStatus'], 'status' => PlaylistsModel::STATUS_ACTIVE);
                     $newplayList = PlaylistsModel::create($formatedData)->save();
                     $dbPlaylists[] = $newplayList;
                 }
             }
         }
         foreach ($dbPlaylists as $playlist) {
             $stats['playlists']++;
             do {
                 $payload = array('part' => static::$part['playlistItems']['minimal'], 'playlistId' => $playlist->youtube_playlist_id, 'maxResults' => static::$limit);
                 if (isset($vids['nextPageToken'])) {
                     $payload['pageToken'] = $vids['nextPageToken'];
                 }
                 $vids = array();
                 $vids = \Rest::get(static::$endpoints['playlistItems'], $payload, $user);
                 if (isset($vids['result']['error'])) {
                     d($vids);
                 }
                 if ($vids['items']) {
                     foreach ($vids['items'] as $vid) {
                         $formatedData = array('user_id' => $user['username']['id'], 'task_id' => $taskId, 'sync_task_id' => $syncTaskId, 'channel_id' => $playlist->channel_id, 'playlist_id' => $playlist->id, 'youtube_channel_id' => $playlist->youtube_channel_id, 'youtube_playlist_id' => $playlist->youtube_playlist_id, 'youtube_video_id' => $vid['id'], 'etag' => $vid['etag'], 'kind' => static::$kind['video'], 'title' => $vid['snippet']['title'], 'created_at' => date(DATE_TIME, strtotime($vid['snippet']['publishedAt'])), 'picture' => isset($vid['snippet']['thumbnails']) ? $vid['snippet']['thumbnails']['default']['url'] : '', 'position' => $vid['snippet']['position'], 'video_link' => $vid['contentDetails']['videoId'], 'privacy' => $vid['status']['privacyStatus'], 'status' => VideosModel::STATUS_ACTIVE);
                         $newVideos[] = $formatedData;
                         $stats['videos']++;
                     }
                 }
             } while (isset($vids['nextPageToken']) && $vids['nextPageToken']);
         }
         if ($newVideos) {
             VideosModel::insertBatch($newVideos);
         }
     }
     $newSubscriptions = array();
     do {
         $payload = array('part' => static::$part['subscriptions']['minimal'], 'mine' => 'true', 'maxResults' => static::$limit);
         if (isset($subscriptions['nextPageToken'])) {
             $payload['pageToken'] = $subscriptions['nextPageToken'];
         }
         $subscriptions = \Rest::get(static::$endpoints['subscriptions'], $payload, $user);
         if (isset($subscriptions['result']['error'])) {
             d($subscriptions);
         }
         if ($subscriptions['items']) {
             foreach ($subscriptions['items'] as $sub) {
                 $formatedData = array('user_id' => $user['username']['id'], 'task_id' => $taskId, 'sync_task_id' => $syncTaskId, 'youtube_channel_id' => $sub['id'], 'etag' => $sub['etag'], 'kind' => static::$kind['subscription'], 'title' => $sub['snippet']['title'], 'description' => $sub['snippet']['description'], 'created_at' => date(DATE_TIME, strtotime($sub['snippet']['publishedAt'])), 'picture' => isset($sub['snippet']['thumbnails']) ? $sub['snippet']['thumbnails']['default']['url'] : '', 'channel_link' => $sub['snippet']['resourceId']['channelId'], 'status' => SubscriptionsModel::STATUS_ACTIVE);
                 $newSubscriptions[] = $formatedData;
                 $stats['subscriptions']++;
             }
         }
     } while (isset($subscriptions['nextPageToken']) && $subscriptions['nextPageToken']);
     if ($newSubscriptions) {
         SubscriptionsModel::insertBatch($newSubscriptions);
     }
     return $stats;
 }