使用 Laravel5.5 开发一个自动交割的项目,把使用到的开源扩展包及特性整理起来,以供后续使用。

一、安装IDE提示工具

Laravel IDE Helper 是一个极其好用的代码提示及补全工具,可以给编写代码带来极大的便利。

1、安装

# 如果只想在开发环境安装请加上 --dev

composer require barryvdh/laravel-ide-helper

安装 doctrine/dbal 「请装上它,在为模型注释字段的时候必须用到它」

# 如果只想在开发环境安装请加上 --dev

composer require "doctrine/dbal: ~2.3"

三个常用命令

php artisan ide-helper:generate - 为 Facades 生成注释

php artisan ide-helper:models - 为数据模型生成注释

php artisan ide-helper:meta - 生成 PhpStorm Meta file

二、Monolog日志包

日志的重要程度不言而喻, 不管是在开发过程中, 还是部署到生产环境后, 都是经常使用的.

随着 psr-3 的出现, 终于统一了 php 中日志的风格.但是, 好用的记录日志系统, 也很重要.

monolog 是我遇到的最好的日志系统.而且, laravel 中也是用的 monolog。

安装

composer require monolog/monolog

用法

use Monolog\Logger;

use Monolog\Handler\StreamHandler;

// create a log channel

$log = new Logger('name');

$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

// $logger->pushHandler(new StreamHandler(storage_path() . '/logs/spider.log'));

// add records to the log

$log->warning('Foo');

$log->error('Bar');

三、抓包工具

Guzzle 是一个十分强大的php的模拟HTTP client的第三方库,可以通过composer安装

Goutte 是一个用来解析HTML文档的第三方库,可以通过composer安装

安装

composer require fabpot/goutte

composer require guzzlehttp/guzzle

创建命令

php artisan make:command Spider

命令参数

// concurrency为并发数 keyWords为查询关键词

protected $signature = 'command:spider {concurrency} {keyWords*}';

实战

namespace App\Console\Commands;

use Goutte\Client as GoutteClient;

use GuzzleHttp\Client as GuzzleClient;

use GuzzleHttp\Pool;

use Illuminate\Console\Command;

use Monolog\Logger;

use Monolog\Handler\StreamHandler;

class Spider extends Command

{

private $totalPageCount;

private $counter = 1;

private $concurrency = 7; // 同时并发抓取

private $logger = null;

private $urls = [

'https://www.feixiaohao.com/currencies/bitcoin/', // BTC

'https://www.feixiaohao.com/currencies/decred/', // DCR

];

/**

* The name and signature of the console command.

*

* @var string

*/

protected $signature = 'test:spider-request'; //concurrency为并发数 keyWords为查询关键词

/**

* The console command description.

*

* @var string

*/

protected $description = 'php spider';

/**

* Create a new command instance.

*

* @return void

*/

public function __construct()

{

parent::__construct();

}

/**

* Execute the console command.

*

* @return mixed

*/

public function handle()

{

// 实例化一个日志实例, 参数是 channel name

$logger = new Logger('spider');

$logger->pushHandler(new StreamHandler(storage_path() . '/logs/spider.log'));

$this->totalPageCount = count($this->urls);

$guzzleClent = new GuzzleClient();

$client = new GoutteClient();

$client->setClient($guzzleClent);

$request = function ($total) use ($client){

foreach ($this->urls as $url){

yield function () use($client, $url){

return $client->request('GET',$url);

};

}

};

// @DOC http://docs.guzzlephp.org/en/stable/quickstart.html?highlight=pool

// /Users/kaiyiwang/Code/digcoin/vendor/symfony/dom-crawler/Crawler.php

$pool = new Pool($guzzleClent,$request($this->totalPageCount), [

'concurrency' => $this->concurrency,

'fulfilled' => function ($response, $index) use ($logger){

$res = $response->html();

// print_r($res);

$logger->info($res);

$this->info("请求第 $index 个请求,连接 " . $this->urls[$index]);

$this->countedAndCheckEnded();

},

'rejected' => function ($reason, $index){

$this->error("rejected" );

$this->error("rejected reason: " . $reason );

$this->countedAndCheckEnded();

},

]);

// 开始发送请求

$promise = $pool->promise();

$promise->wait();

}

public function countedAndCheckEnded()

{

if ($this->counter < $this->totalPageCount){

$this->counter++;

return;

}

$this->info("请求结束!");

}

// 运行命令:php artisan test:spider-request

}

> php artisan test:spider-request

四、定时任务

CRON是一个守护进程,它驻留在你的linux服务器中,大部分时间都没有唤醒,但是每一分钟它都会睁开双眼,看看是否运行任何给定的任务,你使用crontab文件与该守护进程通信,在大多数常见的设置文件可以位于/etc/crontab,crontab文件可能看起来像这样:

0 0 1 * * /home/full-backup

0 0 * * * /home/partial-backup

30 5 10 * * /home/check-subscriptions

1.添加系统定时任务

在laravel中添加定时任务很简单,首先在系统crontab 添加一个artisan的定时任务,每分钟执行一次。

> crontab -e

// /home/vagrant/Code/digcoin/ laravel项目在服务器的地址

* * * * * php /home/vagrant/Code/digcoin/artisan schedule:run >> /dev/null 2>&1

2.项目中添加定时命令

在 App\Console\Kernel 类的 schedule 方法中定义预定的命令:

protected function schedule(Schedule $schedule)

{

// $schedule->command('inspire')

// ->hourly();

// php artisan test:spider-request, 每十分钟调用一次

$schedule->command('test:spider-request')

->everyFifteenMinutes()->withoutOverlapping();

}

添加好了之后,我们可以直接使用这个命令测试定时任务是否可以执行:

> php /home/vagrant/Code/digcoin/artisan test:spider-request

OK,只需要简单的两步便可实现laravel的定时任务添加。

php 按照laravel5.5,Laravel5.5 综合使用相关推荐

  1. php set medias,laravel5.1 -- Integrate FileManager and CKeditor into laravel

    FileManager中文名叫文件管理器,也叫文件浏览器,它给我们提供了一个可视化的界面来管理文件和文件夹.利用FileManager,我们可以对文件进行浏览.增加.打印.修改(文件属性).重命名.搜 ...

  2. laravel5.4 关于数据填充的知识

    需求:大量excel表格数据 集中整理到一个规定数据表中,并且增加新字段做标记 步骤:把需要整理的excel表格提前存放到mysql数据库指定的表中 ,可以用图形化工具来执行! 核心:利用larave ...

  3. Laravel5.5的异常捕获和处理

    一般在web开发中,我们很少会接触到除了404页面其它的http通信错误页面,即使是做404页面,我们也只是单纯的修改框架自带了404模板,很少能够做到完全的控制.但Laravel5改变了这种现状,那 ...

  4. 小白巷分享 -- Laravel5的新特性之异常处理

    小白巷分享 -- Laravel5的新特性之异常处理 参考文章: (1)小白巷分享 -- Laravel5的新特性之异常处理 (2)https://www.cnblogs.com/jroy/p/443 ...

  5. laravel5.2基础多模块开发(pingpong/modules)

    2019独角兽企业重金招聘Python工程师标准>>> 1.下载laravel5.2 http://laravelacademy.org/resources-download 2.解 ...

  6. thinkphp5是不是php,我对ThinkPHP5和Laravel5的一些看法

    本来这个是想发在新版发布贴的评论里面的,发现开源中国的评论有字数限制,所以写在这里了. 技术社区里面经常有人提到ThinkPHP5和Laravel5的优缺点,或者抄袭之类的,其实每个框架都各有优缺点 ...

  7. Laravel-5.1验证码mews captcha

    Laravel-5.1 ---- 将mews captcha整合到项目中! 经过摸索,终于能在laravel 5.1中应用验证码了. 因为英语渣五水平,所以几乎没搜索到什么有用的,于是考虑在githu ...

  8. laravel5.7的redis配置,一直报错Class 'Predis\Client' not found

    laravel5.7的redis配置,一直报错Class 'Predis\Client' not found 首先我检查了配置,和composer 都没有错,用原生的redis也可以正常连接和读写. ...

  9. Laravel5.2之Filesystem-从Dropbox中下载文件到AWS S3

    2019独角兽企业重金招聘Python工程师标准>>> 说明:本文主要讲述了Laravel的文件系统Filesystem的小Demo,逻辑不复杂,主要就是把Dropbox上的一个文件 ...

最新文章

  1. Spring使用注解配置依赖注入
  2. sql左连接排序取第一个_详解kettle工具记录集连接功能及实验测试
  3. 21.单链表怎么就地逆序?
  4. 池化层在全连接层之间吗,了解最大池化层之后的全连接层的尺寸
  5. 震惊!垃圾分类居然能用Python搞定!
  6. 聊天宝解散,多闪、马桶MT还会远吗?
  7. 人造电子皮肤、软体机器人、单孔腔镜手术机器人......青年科学家们都在研究哪些“黑科技”?...
  8. 实战 TPCC-MySQL 基准测试
  9. tp3.2 生成二维码
  10. springCloud Alibaba 与 nacos
  11. 浅谈Netty中ServerBootstrap服务端源码(含bind全流程)
  12. 计算机科学的两本圣经_计算机科学中的两个难题
  13. flac格式的音乐怎么转换成mp3格式
  14. centos7中安装nginx步骤详解
  15. 教你怎样用Python进行语音识别!非常精准!
  16. C语言一维数组的最大值和最小值依次放入一个新的数组中,依次类推
  17. 【每日早报】2019/08/12
  18. ajax img src如何索引,使用jQuery的ajax方法作为blob检索图像
  19. PID控制中P、I、D参数的作用是什么?
  20. Python--自动切换壁纸

热门文章

  1. linux gcc编译下的文件读写操作
  2. 如何搭建一个完整的Vue3.0 + ts 的项目
  3. Vue + SpringBoot跨域
  4. Linux中点号,星号,加号,问号实战
  5. task2 EDA探索性数据分析
  6. springboot python 开发效率比较-2018年Java开发值得学习的10大技术
  7. medoo update mysql_Medoo Update的使用:修改更新数据
  8. Java自动切表_java_Mybatis自动创建表和更新表结构,最近有小伙伴问我mybatis有没有 - phpStudy...
  9. mysql 查询一个月的时间_mysql日期查询sql语句总结(查询一天,查询一周,查询一个月的数据)...
  10. sklearn保存svm分类模型_【菜菜的sklearn】07 支持向量机(上)