ParserTask.php 13.2 KB
<?php

class ParserTask extends \Phalcon\CLI\Task
{
    public $query = array();

    public function parsAction() {
        $model = new \rdsServices();
        $model->name = 'Whois';
        $model->date = date('Y-m-d H:i:s');
        $model->status = '0';
    }



    public function mainAction() {

       $competitors = \parserCompetitors::find();


        foreach($competitors as $competitor){

            $model_sections = \parserSections::query()
                ->where("id IN ('".str_replace(",","','",$competitor->sections_id)."')")
                ->execute();

            foreach($model_sections as $items) {
                foreach($items->parserItems as $item){

                    $model_competitors_items = \parserCompetitorsItems::checkSection($item->id, $competitor->id);

                    if($model_competitors_items && $model_competitors_items->status == 1 ) {

                        $parser_data_arr = $this->a_parser->parseExistLink([
                            'link' => $model_competitors_items->item_url,
                            'google_link' => $model_competitors_items->google_link
                            ],$competitor->h1_regexr, $competitor->price_regexr, $competitor->exist_regexr);
                        $parser_data_arr['link_status'] = $model_competitors_items->link_status;
                        if($model_competitors_items->link_status == 'ok'){

                            if($parser_data_arr['h1'] == 'Товар пропал') {
                                $parser_data_arr['link_status'] = 'change';
                            };

                            if(empty($parser_data_arr['price'])) {
                                $parser_data_arr['link_status'] = 'change';
                            };

                            if($model_competitors_items->exist != $parser_data_arr['exist']) {
                                $parser_data_arr['link_status'] = 'change';
                            };


                        }

                        $this->dataSave($parser_data_arr,$competitor->id,$item->id, $item->item_users_id);
                    } else {
                        try {
                            //$this->prepareQuery($competitor, $item);
                        } catch (Exception $e) {
                           die( 'Выброшено исключение: '.  $e->getMessage(). "\n");
                        }


                    }





                }
            }

            if(!empty($this->query)){
                $this->saveParserDada($competitor);
            }
        }



    }

    public function dataSave($parser_data,$competitor_id,$item_id, $item_user_id){


        $model_competitors_items = \parserCompetitorsItems::checkSection($item_id, $competitor_id);

            if($parser_data['link']) {

                if(!$model_competitors_items){


                    print_r("competitor_id = ". $competitor_id . "\n");
                    $model_competitors_items = new \parserCompetitorsItems();
                    $model_competitors_items->price = $parser_data['price'];
                    $model_competitors_items->h1 = $parser_data['h1'];
                    $model_competitors_items->item_url = $parser_data['link'];
                    $model_competitors_items->exist = $parser_data['exist'];
                    $model_competitors_items->competitor_id =  $competitor_id;
                    $model_competitors_items->item_id = $item_id;
                    $model_competitors_items->status = 1;
                    $model_competitors_items->google_link = $parser_data['google_link'];
                    $model_competitors_items->link_status = $parser_data['link_status'];
                    $model_competitors_items->item_user_id = $item_user_id;
                    $model_competitors_items->save();

                } else {


                    print_r("competitor_id = ". $competitor_id . "\n");
                    $model_competitors_items->price = $parser_data['price'];
                    $model_competitors_items->h1 = $parser_data['h1'];
                    $model_competitors_items->exist = $parser_data['exist'];
                    $model_competitors_items->item_url = $parser_data['link'];
                    $model_competitors_items->competitor_id =  $competitor_id;
                    $model_competitors_items->item_id = $item_id;
                    $model_competitors_items->status = 1;
                    $model_competitors_items->google_link = $parser_data['google_link'];
                    $model_competitors_items->link_status = $parser_data['link_status'];
                    $model_competitors_items->item_user_id = $item_user_id;
                    $model_competitors_items->save();

                }


            } else {

                if(!$model_competitors_items){


                    print_r("competitor_id = ". $competitor_id . "\n");
                    $model_competitors_items = new \parserCompetitorsItems();
                    $model_competitors_items->competitor_id =  $competitor_id;
                    $model_competitors_items->exist = $parser_data['exist'];
                    $model_competitors_items->item_id = $item_id;
                    $model_competitors_items->h1 = $parser_data['result'] ? 'Не найденно в списке' : 'Товар не найден' ;
                    $model_competitors_items->item_url = $parser_data['google_link'];
                    $model_competitors_items->status = 0;
                    $model_competitors_items->google_link = $parser_data['google_link'];
                    $model_competitors_items->link_status = $parser_data['link_status'];
                    $model_competitors_items->item_user_id = $item_user_id;
                    $model_competitors_items->save();

                } else {


                    print_r("competitor_id = ". $competitor_id . "\n");
                    $model_competitors_items->competitor_id =  $competitor_id;
                    $model_competitors_items->item_id = $item_id;
                    $model_competitors_items->exist = $parser_data['exist'];
                    $model_competitors_items->h1 = $parser_data['result'] ? 'Не найденно в списке' : 'Товар не найден' ;
                    $model_competitors_items->item_url = $parser_data['google_link'];
                    $model_competitors_items->status = 0;
                    $model_competitors_items->google_link = $parser_data['google_link'];
                    $model_competitors_items->link_status = $parser_data['link_status'];
                    $model_competitors_items->item_user_id = $item_user_id;
                    $model_competitors_items->save();

                }
            }

    }

    public function saveParserDada($competitor){
        $parser_data_arrs = $this->a_parser->parseNewLink($this->query, $competitor->h1_regexr, $competitor->price_regexr, $competitor->exist_regexr);
        $this->query = array();

        foreach($parser_data_arrs as $parser_data_arr){
            $this->dataSave($parser_data_arr,$parser_data_arr['competitor_id'],$parser_data_arr['item_id'], $parser_data_arr['item_id']);
        }
    }

    public function prepareQuery($competitor, $item){
        if(isset($this->query[0]) && ($this->query[0]['competitor_id'] == $competitor->id) ){
            $count = count($this->query);
            $i = $count ? $count : 0;
            $this->query[$i]['query'] = 'site:' . $competitor->url . ' ' . $item->item_name;
            $this->query[$i]['competitor_id'] = $competitor->id;
            $this->query[$i]['item_id'] = $item->id;

            if(count($this->query) ==200) {
                $this->saveParserDada($competitor);
            }
        } else {
            if(!empty($this->query)){
                $this->saveParserDada($competitor);
            }
            $this->query[0]['query'] = 'site:' . $competitor->url . ' ' . $item->item_name;
            $this->query[0]['competitor_id'] = $competitor->id;
            $this->query[0]['item_id'] = $item->id;
        }


    }


    function sectionsAction(){

            $project_id = '32';
            $route = STORAGE_PATH.'temp/csv/products_seo.csv';
            $sourceFileName = "http://extremstyle.ua/cron/products_seo.csv";
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $sourceFileName);
            curl_setopt($ch, CURLOPT_TIMEOUT, 300);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

            $st = curl_exec($ch);

            $fd = @fopen($route, "w");
            fwrite($fd, $st);
            @fclose($fd);

            curl_close($ch);

            //Check if the user has uploaded files
            //Print the real file names and their sizes

            $result = $this->ServiceExcel->getCSV($route);

            $ItemModel = new \parserItems();
            $SectionModel = new \parserSections();

            $ItemModel->updateStatus($project_id, $this->modelsManager);
            $SectionModel->updateStatus($project_id, $this->modelsManager);


            foreach($result as $row){

                $model_sections = \parserSections::checkSection($project_id, $row[0]);

                $checkCopy = \parserItems::checkCopy($project_id, ltrim(rtrim($row[3])), $row[2], $row[4]);
                if($checkCopy) {
                    if(!$model_sections){
                        $model_sections = new \parserSections();
                        $model_sections->project_id = $project_id;
                        $model_sections->section_name = mb_strtolower($row[1],"UTF-8");
                        $model_sections->section_user_id = $row[0];
                        $model_sections->delete_row = '0';
                        $model_sections->save();
                    } else {
                        $model_sections->project_id = $project_id;
                        $model_sections->section_name = mb_strtolower($row[1], "UTF-8");
                        $model_sections->section_user_id = $row[0];
                        $model_sections->delete_row = '0';
                        $model_sections->save();
                    }

                    $model_items = \parserItems::checkSection($project_id,$model_sections->id, $row[5]);

                    if(!$model_items){
                        $model_items = new \parserItems();
                        $model_items->item_name = mb_strtolower(ltrim(rtrim($row[3])),"UTF-8");
                        $model_items->item_users_id = $row[2];
                        $model_items->price = $row[4];
                        $model_items->status = 1;
                        $model_items->url = $row[5];
                        $model_items->section_id = $model_sections->id;
                        $model_items->project_id = $project_id;
                        $model_items->save();
                    } else {
                        $model_items->item_name = mb_strtolower(ltrim(rtrim($row[3])),"UTF-8");
                        $model_items->item_users_id = $row[2];
                        $model_items->price = $row[4];
                        $model_items->status = 1;
                        $model_items->url = $row[5];
                        $model_items->section_id = $model_sections->id;
                        $model_items->project_id = $project_id;
                        $model_items->save();
                    }
                }


            }
//            $ItemModel->DeleteNonActive($this->modelsManager);
//            $SectionModel->DeleteNonActive($this->modelsManager);
            echo "complete";
    }

    function requestAction(){
        $hostname = '{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}Inbox';
        $username = 'm@artweb.ua';
        $password = 'eks,ybcm12hfp';

        /* try to connect */
        $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());


        $emails = imap_search($inbox,'UNANSWERED FROM ArtWeb');

        /* if emails are returned, cycle through each... */
        if($emails) {

            /* begin output var */
            $output = '';

            /* put the newest emails on top */
            rsort($emails);

            /* for every email... */
            foreach($emails as $email_number) {

                /* get information specific to this email */
                $overview = imap_fetch_overview($inbox,$email_number,0);
                $message = imap_fetchbody($inbox,$email_number,2);

                /* output the email header information */
                $output.= '<div class="toggler '.($overview[0]->seen ? 'read' : 'unread').'">';
                $output.= '<span class="subject">'.$overview[0]->subject.'</span> ';
                $output.= '<span class="from">'.$overview[0]->from.'</span>';
                $output.= '<span class="date">on '.$overview[0]->date.'</span>';
                $output.= '</div>';

                /* output the email body */
                $output.= '<div class="body">'.$message.'</div>';
            }

            echo $output;
        }

        /* close the connection */
        imap_close($inbox);
    }

    function utmsetAction(){
        $text['text'] = file_get_contents(STORAGE_PATH."/file/index.html");
        $text['result'] = $this->UTMParser->parse(false,$text);

        $page = fopen(STORAGE_PATH."/file/counter.txt", 'a');
        $test = fwrite($page, $text['result']);
    }

}