| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 | <?php/** * Created by PhpStorm. * User: tandunzhao * Date: 2017/11/20 * Time: 下午5:26 */namespace App\Console\Commands;use App\Modules\Statistic\Services\SendStatsEmailService;use DB;use GuzzleHttp\Client;use Illuminate\Console\Command;use Log;class CheckSiteStatus extends Command{    /**     * 执行命令 检查站点信息     *     * The name and signature of the console command.     *     * @var string     */    protected $signature = 'check_site_status';    /**     * The console command description.     *     * @var string     */    protected $description = '检查掌中云站点信息';    public $table_name = 'novel_platform_sites';    /**     * Execute the console command.     *     * @return mixed     */    public function handle()    {        Log::info('CheckSiteStatus start command');        $this->loadSiteIndexInfo();        //$this->loadCompanyName();        Log::info('CheckSiteStatus end command');    }    function loadCompanyName()    {        $pageCount = 0;        $pageSize = 1000;        $client = new Client(['timeout' => 3.0,]);        $totalCount = DB::table($this->table_name)->max('site');        $totalPageCount = ceil($totalCount / $pageSize);        while ($pageCount < $totalPageCount) {            $beginIndex = $pageCount * $pageSize;            $data = DB::table($this->table_name)->offset($beginIndex)->limit($pageSize)->get();            if ($data) {                foreach ($data as $item) {                    $gzh_name = trim($item->gzh_name);                    $companyInfo = $this->getCompanyInfo($client, $gzh_name);                    $companyInfo['updated_at'] = date("Y-m-d H:i:s");                    DB::table($this->table_name)->where('id', $item->id)->update($companyInfo);                    sleep(1);                }            }            $pageCount++;        }    }    function loadSiteIndexInfo()    {        $trueSiteArray = [];        $client = new Client(['timeout' => 3.0,]);        $lastIndex = DB::table('novel_platform_sites')->max('site');        $index = $lastIndex + 1;        while ($index <= $lastIndex + 1000) {            Log::info('check_site_status index is: ' . $index);            $siteUrl = 'https://c' . $index . '.818tu.com/spa/config?tdsourcetag=s_pcqq_aiomsg';            Log::info('check_site_status siteUrl is: ' . $siteUrl);            try {                $response = $client->request('get', $siteUrl);                $resultCode = $response->getStatusCode();                //成功                if ($resultCode == 200 || $resultCode == 302) {                    $content = $response->getBody()->getContents();                    //Log::info('content is :' . $content);                    if ($content) {                        $findStr = "mp:";                        $findBegin = strpos($content, $findStr);                        if ($findBegin) {                            $findBegin = $findBegin + strlen($findStr);                            $findEnd = strpos($content, '},', $findBegin);                            if ($findEnd) {                                $content = substr($content, $findBegin, $findEnd - $findBegin + 1);                                Log::info('content is :' . $content);                                $content = json_decode($content);                                $gzh_name = trim($content->raw_id);                                $companyInfo = $this->getCompanyInfo($client, $gzh_name);                                $params = [                                    'site' => $index,                                    'gzh_name' => $gzh_name,                                    'platform_name' => '掌中云',                                    'appid' => $content->app_id,                                    'nickname' => $content->nickname,                                    'qrcode' => $companyInfo['qrcode'],                                    'company' => $companyInfo['company'],                                    'created_at' => date("Y-m-d H:i:s"),                                    'updated_at' => date("Y-m-d H:i:s"),                                    'fans_num_estimate' => $companyInfo['fans_num_estimate']                                ];                                $trueSiteArray[] = $params;                                DB::table('novel_platform_sites')->insert($params);                            }                        }                    } else {                        Log::info('content is :' . $content);                    }                } else {                    Log::info('CheckSiteStatus load error resultCode is:' . $resultCode);                }            } catch (\Exception $e) {                Log::info('CheckSiteStatus load error');                Log::info($e->getMessage());            }            $index++;        }        if ($trueSiteArray) {            Log::info('CheckSiteStatus need sendEmail');            $this->sendEmail($trueSiteArray);        } else {            Log::info('CheckSiteStatus not need sendEmail');        }    }    function getCompanyInfo($client, $gzh_name)    {        $qrcode = '';        $company = '';        $fans_num_estimate = '';        $time_stamp = time();        $sign_params = 'app_id=364c32166857f0131a0ac35396d6c0&kw=' . $gzh_name . '&page=1×tamp=' . $time_stamp;        $sign = md5($sign_params . 'sjadf92jf9vh@827*sjfo09n30');        $url = 'https://api.wxb.com/data/search?' . $sign_params . '&sign=' . $sign;        try {            $response = $client->request('get', $url);        } catch (\Exception $e) {            Log::info($e->getMessage());            return compact('qrcode', 'company', 'fans_num_estimate');        }        $resultCode = $response->getStatusCode();        if ($resultCode == 200 || $resultCode == 302) {            $content = $response->getBody()->getContents();            $content = json_decode($content);            $content = $content->data;            if (is_array($content) && count($content) > 0) {                $content = $content[0];                $qrcode = $content->qrcode;                $company = $content->company;                $fans_num_estimate = $content->fans_num_estimate;            }        }        return compact('qrcode', 'company', 'fans_num_estimate');    }    function sendEmail($trueSiteArray)    {        Log::info('CheckSiteStatus start sendEmail');        $to_user = array(            ['address' => 'zhangzg@iqiyoo.com', 'name' => '张总'],            ['address' => 'songdb@iqiyoo.com', 'name' => 'songdb'],            ['address' => 'zhaojp@yqsd.net', 'name' => '赵君平'],            ['address' => 'sijj@yqsd.net', 'name' => 'sijj'],            ['address' => 'qincp@iqiyoo.com', 'name' => '阿才'],        );        $content = "<table border='1' cellpadding='10' cellspacing='0'><tr><td align='center'>序号</td><td align='center'>站点id</td><td align='center'>公众号名称</td><td align='center'>主体公司名称</td></tr>";        $index = 0;        foreach ($trueSiteArray as $item) {            $index++;            $content .= "<tr><td align='center'>{$index}</td><td align='center'>{$item['site']}</td><td align='center'>{$item['nickname']}</td><td align='center'>{$item['company']}</td></tr>";        }        $content .= "</table>";        SendStatsEmailService::SendHtmlEmailWithAcce($to_user, ['subject' => date("Y-m-d", time()) . "掌中云昨天新增站点" . $index . "个", 'body' => $content]);    }}
 |