Example #1
0
File: VK.php Project: apuc/api
 public function save()
 {
     if (!$this->validate()) {
         return false;
     }
     $db = \Yii::$app->db;
     $transaction = $db->beginTransaction();
     try {
         $promotion = new Promotion();
         $promotion->user_id = \Yii::$app->user->getId();
         $promotion->url = $this->url;
         $promotion->page_id = VKApi::getGroupIdByUrl($this->url);
         $promotion->status = Promotion::NOT_MODERATED;
         $promotion->save();
         if ($this->hasLikeQuery()) {
             $likeTask = new Task();
             $likeTask->service_id = Service::LIKE_VK;
             $likeTask->promotion_id = $promotion->id;
             $likeTask->task = json_encode($this->getLikeQuery());
             $likeTask->save();
         }
         if ($this->hasRepostQuery()) {
             $likeTask = new Task();
             $likeTask->service_id = Service::REPOST_VK;
             $likeTask->promotion_id = $promotion->id;
             $likeTask->task = json_encode($this->getRepostQuery());
             $likeTask->save();
         }
         if ($this->hasCommentQuery()) {
             $likeTask = new Task();
             $likeTask->service_id = Service::COMMENT_VK;
             $likeTask->promotion_id = $promotion->id;
             $likeTask->task = json_encode($this->getCommentQuery());
             $likeTask->save();
         }
         $transaction->commit();
     } catch (Exception $e) {
         $transaction->rollBack();
         return false;
     }
     return true;
 }
Example #2
0
 public function actionGo()
 {
     $groups = Promotion::findAll(['status' => Promotion::MODERATED]);
     foreach ($groups as $group) {
         $wall = VKApi::getWallPosts($group->page_id);
         if ($wall) {
             $parsingPeriod = mktime(strftime('-1 hour', time()));
             foreach ($wall as $post) {
                 //если пост подходит по времени
                 if ($post['date'] > $parsingPeriod) {
                     //формирум урл поста https://vk.com/feed?w=wall-57424472_71791
                     $dbPost = new Post();
                     $dbPost->post_id = $post['id'];
                     $dbPost->promotion_id = $group->page_id;
                     $dbPost->save();
                     $postUrl = 'https://vk.com/feed?w=wall' . $group->page_id . '_' . $post['id'];
                     //получаем таски
                     $tasks = Task::findAll(['promotion_id' => $group->id]);
                     foreach ($tasks as $task) {
                         $taskArr = json_decode($task->task);
                         //дописываем в урл и цену лайков
                         $taskArr['task']['url'] = $postUrl;
                         $taskArr['task']['cost'] = $task->service->minimum_likes_per_task;
                         //получаем цену таска
                         $pricePerOne = $task->service->price_per_one_task;
                         $priceAll = $pricePerOne * $taskArr['task']['members_count'];
                         //списываем деньги с пользователя к которому он относится
                         $user = $group->user;
                         if ($user->money - $priceAll >= 0) {
                             $user->money -= $priceAll;
                             $user->save();
                             //если хватило то отсылаем таск
                             $this->setTask($taskArr);
                         }
                     }
                 }
             }
         }
         usleep(335000);
     }
 }
Example #3
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getTasks()
 {
     return $this->hasMany(Task::className(), ['promotion_id' => 'id']);
 }