Ejemplo n.º 1
0
 /**
  * @return array
  */
 public function run()
 {
     if ($this->checkAccess) {
         call_user_func($this->checkAccess, $this->id);
     }
     /**
      * Получаем хелпер, который поможет получить информацию из Instagram
      *
      * @var \MetzWeb\Instagram\Instagram $instagramHelper
      */
     $instagramHelper = Yii::$app->instagram->getHelper();
     $errors = [];
     // Пробегаемся по всем доступным аккаунтам и получаем сводную информацию по пользователям
     foreach ($this->controller->users as $user) {
         // Устанавливаем access token пользователя для доступа к api Instagram
         $instagramHelper->setAccessToken($user['access_token']);
         /**
          * Будем получать информацию порциями, чтобы не превысить лимиты Instagram
          * и иметь возможность сохранять только необходимые данные для экономии памяти (здесь не реализовано, поэтому бонуса от экономии памяти нету)
          */
         $userFeed = $instagramHelper->getUserFeed(self::LIMIT);
         // Сохраняем в массив первую часть полученной информации
         $data = $userFeed->data;
         /**
          * Повторяем выборку данных, пока они есть
          */
         do {
             $userFeed = $instagramHelper->pagination($userFeed, self::LIMIT);
             // объединяем полученные данные
             $data = array_merge($data, (array) $userFeed->data);
         } while (!empty($userFeed));
         // Удаляем старые данные из БД
         MediaInfo::deleteAll(['owner_id' => $user['id']]);
         // Пробегаемся по массиву и сохраняем новые данные
         foreach ($data as $item) {
             $mediaInfo = new MediaInfo();
             $mediaInfo->date_update = date('Y-m-d H:i:s');
             $mediaInfo->media_id = $item->id;
             $mediaInfo->owner_id = $user['id'];
             $mediaInfo->photo_url = $item->link;
             $mediaInfo->photo_caption = isset($item->caption->text) ? $item->caption->text : '';
             $mediaInfo->count_comments = isset($item->comments->count) ? $item->comments->count : '';
             $mediaInfo->count_likes = isset($item->likes->count) ? $item->likes->count : '';
             if (!$mediaInfo->save()) {
                 $errors[] = $mediaInfo->errors;
             }
         }
     }
     return ['errors' => $errors];
 }
Ejemplo n.º 2
0
 /**
  * @return array
  */
 public function run()
 {
     if ($this->checkAccess) {
         call_user_func($this->checkAccess, $this->id);
     }
     $result = [];
     // Получаем данные о всех фото из БД
     $mediaInfo = MediaInfo::find()->where(['in', 'owner_id', array_keys($this->controller->users)])->limit($this->controller->limit)->offset($this->controller->offset)->asArray()->all();
     // Пробегаемся по массиву с медиафайлами и формируем результирующий массив
     foreach ($mediaInfo as $key => $item) {
         $result[$key] = ['photo_url' => $item['photo_url'], 'photo_caption' => $item['photo_caption'], 'count_likes' => $item['count_likes'], 'count_comments' => $item['count_comments']];
         // Если был передан параметр на группировку данных по дням - получаем их
         if (Yii::$app->request->get('groupByDay', 0) == 1) {
             // Количество лайков по дням
             $result[$key]['count_likes'] = LikesPerDay::find()->select('date , count_likes')->where(['media_id' => $item['media_id']])->all();
             // Количество комментариев по дням
             $result[$key]['count_comments'] = CommentsPerDay::find()->select('date , count_comments')->where(['media_id' => $item['media_id']])->all();
         }
     }
     return $result;
 }
Ejemplo n.º 3
0
 /**
  * @return array
  */
 public function run($id)
 {
     if ($this->checkAccess) {
         call_user_func($this->checkAccess, $this->id);
     }
     // Получаем данные о всех фото из БД
     $mediaInfo = MediaInfo::find()->where(['in', 'owner_id', array_keys($this->controller->users)])->andWhere(['media_id' => $id])->asArray()->one();
     // Если элемент не найден, возвращаем пустой результат
     if (empty($mediaInfo)) {
         return [];
     }
     // Формируем результирующий массив
     $result = ['photo_url' => $mediaInfo['photo_url'], 'photo_caption' => $mediaInfo['photo_caption'], 'count_likes' => $mediaInfo['count_likes'], 'count_comments' => $mediaInfo['count_comments']];
     // Если был передан параметр на группировку данных по дням - получаем их
     if (Yii::$app->request->get('groupByDay', 0) == 1) {
         // Количество лайков по дням
         $result['count_likes'] = LikesPerDay::find()->select('date , count_likes')->where(['media_id' => $mediaInfo['media_id']])->all();
         // Количество комментариев по дням
         $result['count_comments'] = CommentsPerDay::find()->select('date , count_comments')->where(['media_id' => $mediaInfo['media_id']])->all();
     }
     return $result;
 }