/** * @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]; }
/** * @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; }
/** * @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; }