/**
  * Execute the job.
  *
  * @return void
  */
 public function handle()
 {
     $instagram = new Instagram(array('apiKey' => config('instagram.id'), 'apiSecret' => config('instagram.secret'), 'apiCallback' => 'http://instagram.app'));
     $account = InstagramAccount::find($this->id);
     $account->status = InstagramAccount::GRABBER_NOT_COMPLETED;
     $account->save();
     $accountMedia = array_combine($account->instagramMedia->lists('instagram_object_id')->toArray(), $account->instagramMedia->all());
     $user = $instagram->getUser($account['instagram_object_id']);
     if ($user->meta->code == 200) {
         $mediaCount = $user->data->counts->media;
         if ($mediaCount != 0) {
             $media = $instagram->getUserMedia($account['instagram_object_id'], 32);
             while (!is_null($media)) {
                 foreach ($media->data as $data) {
                     if ($data->type == 'video') {
                         continue;
                     }
                     if ($this->mode == 'WITH_ADVANCED' && isset($accountMedia[$data->id])) {
                         $accountMedia[$data->id]->instagramMediaLike()->save(new InstagramMediaLike(['count' => $data->likes->count - $accountMedia[$data->id]->likes_count]));
                         $comments = $instagram->getMediaComments($data->id);
                         if (!empty($comments->data)) {
                             foreach ($comments->data as $comment) {
                                 $accountMedia[$data->id]->instagramMediaComment()->updateOrCreate(['instagram_object_id' => $comment->id], ['instagram_object_id' => $comment->id, 'created_at' => Carbon::createFromTimestamp($comment->created_time)]);
                             }
                         }
                     }
                     if (isset($accountMedia[$data->id])) {
                         // update
                         $accountMedia[$data->id]->photo_caption = is_object($data->caption) ? $data->caption->text : null;
                         $accountMedia[$data->id]->likes_count = $data->likes->count;
                         $accountMedia[$data->id]->comments_count = $data->comments->count;
                     } else {
                         // insert
                         $accountMedia[] = new InstagramMedia(['instagram_object_id' => $data->id, 'photo_url' => $data->link, 'photo_caption' => is_object($data->caption) ? $data->caption->text : null, 'likes_count' => $data->likes->count, 'comments_count' => $data->comments->count]);
                     }
                 }
                 $media = $instagram->pagination($media, 32);
             }
         } else {
             $account->status = InstagramAccount::GRABBER_COMPLETED;
             $account->save();
         }
     }
     DB::transaction(function () use($account, $accountMedia) {
         $account->InstagramMedia()->saveMany($accountMedia);
         $account->status = InstagramAccount::GRABBER_COMPLETED;
         $account->save();
     });
 }