diff --git a/.env.example b/.env.example
index d445610..c53b221 100644
--- a/.env.example
+++ b/.env.example
@@ -30,3 +30,5 @@ MAIL_ENCRYPTION=null
PUSHER_APP_ID=
PUSHER_KEY=
PUSHER_SECRET=
+
+GOOGLE_KEY=
\ No newline at end of file
diff --git a/app/Providers/GoogleInsightsServiceProvider.php b/app/Providers/GoogleInsightsServiceProvider.php
new file mode 100644
index 0000000..83dba51
--- /dev/null
+++ b/app/Providers/GoogleInsightsServiceProvider.php
@@ -0,0 +1,31 @@
+app->singleton(InsightsCaller::class, function () {
+ return new InsightsCaller(config('services.google.key'), config('app.locale'));
+ });
+ }
+}
diff --git a/app/Services/Insights.php b/app/Services/Insights.php
new file mode 100644
index 0000000..f906f08
--- /dev/null
+++ b/app/Services/Insights.php
@@ -0,0 +1,115 @@
+insightsCaller = $insightsCaller;
+ }
+
+ /**
+ * Validate the URL against our checklist.
+ *
+ * @param string|null $url
+ * @param string $strategy
+ *
+ * @throws Exception
+ *
+ * @return \Generator
+ */
+ public function validate($url, $strategy = InsightsCaller::STRATEGY_MOBILE)
+ {
+ $uri = new Uri($url);
+
+ $response = $this->insightsCaller->getResponse((string) $uri, $strategy);
+ $result = $response->getMappedResult();
+
+ yield [
+ // If the rule impact is zero, it means that the website has passed the test.
+ 'passed' => (bool) $result->screenshot,
+ 'message' => $result->screenshot->getImageHtml(),
+ 'help' => null,
+ 'level' => Levels::NOTICE,
+ ];
+
+ if ($strategy == InsightsCaller::STRATEGY_MOBILE) {
+ yield [
+ // If the rule impact is zero, it means that the website has passed the test.
+ 'passed' => $result->getSpeedScore() >= 80,
+ 'message' => 'Your Google Page Insights Mobile Pagespeed score is: '.$result->getSpeedScore().'',
+ 'help' => null,
+ 'level' => $this->getLevel(100 - $result->getSpeedScore()),
+ ];
+
+ yield [
+ // If the rule impact is zero, it means that the website has passed the test.
+ 'passed' => $result->getUsabilityScore() >= 80,
+ 'message' => 'Your Google Page Insights Mobile Usability score is: '.$result->getUsabilityScore().'',
+ 'help' => null,
+ 'level' => $this->getLevel(100 - $result->getUsabilityScore()),
+ ];
+ } else {
+ yield [
+ // If the rule impact is zero, it means that the website has passed the test.
+ 'passed' => $result->getSpeedScore() >= 80,
+ 'message' => 'Your Google Page Insights Desktop Pagespeed score is: '.$result->getSpeedScore().'',
+ 'help' => null,
+ 'level' => $this->getLevel(100 - $result->getSpeedScore()),
+ ];
+ }
+
+ $results = collect($result->getFormattedResults()->getRuleResults())
+ ->sortByDesc(function (DefaultRuleResult $result) {
+ return $result->getRuleImpact();
+ });
+
+ /** @var DefaultRuleResult $ruleResult */
+ foreach ($results as $rule => $ruleResult) {
+ $help = [];
+ if ($urlBlocks = $ruleResult->getUrlBlocks()) {
+ foreach ($ruleResult->getDetails() as $detail) {
+ if ($detail) {
+ $help[] = $detail->toString();
+ }
+ }
+ }
+
+ yield [
+ // If the rule impact is zero, it means that the website has passed the test.
+ 'passed' => $ruleResult->getRuleImpact() == 0,
+ 'message' => $ruleResult->getSummary() ? $ruleResult->getSummary()->toString() : $rule,
+ 'help' => $help ? implode('
', $help) : null,
+ 'level' => $this->getLevel($ruleResult->getRuleImpact()),
+ ];
+ }
+ }
+
+ protected function getLevel($impact)
+ {
+ if ($impact < 3) {
+ return Levels::NOTICE;
+ } elseif ($impact < 20) {
+ return Levels::WARNING;
+ } elseif ($impact < 50) {
+ return Levels::ERROR;
+ } else {
+ return Levels::CRITICAL;
+ }
+ }
+}
diff --git a/composer.json b/composer.json
index b5f90f5..1d35455 100644
--- a/composer.json
+++ b/composer.json
@@ -12,7 +12,8 @@
"symfony/dom-crawler": "^3.1",
"t1gor/robots-txt-parser": "^0.2.3",
"erusev/parsedown": "^1.6",
- "laravel/tinker": "^1.0"
+ "laravel/tinker": "^1.0",
+ "dsentker/phpinsights": "0.2.x"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
diff --git a/composer.lock b/composer.lock
index a71d248..48fcef5 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "content-hash": "e0cb0127d710db79af564d28e94ae8df",
+ "hash": "082859116556eddbe8d07ef4b62a9d58",
+ "content-hash": "30a6b041d4441d90faeea4a2b5e65a16",
"packages": [
{
"name": "dnoegel/php-xdg-base-dir",
@@ -37,7 +38,7 @@
"MIT"
],
"description": "implementation of xdg base directory specification for php",
- "time": "2014-10-24T07:27:01+00:00"
+ "time": "2014-10-24 07:27:01"
},
{
"name": "doctrine/inflector",
@@ -104,7 +105,39 @@
"singularize",
"string"
],
- "time": "2015-11-06T14:35:42+00:00"
+ "time": "2015-11-06 14:35:42"
+ },
+ {
+ "name": "dsentker/phpinsights",
+ "version": "0.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dsentker/phpinsights.git",
+ "reference": "825929c6a5e2270250fb05f05870b823b1dda0d4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dsentker/phpinsights/zipball/825929c6a5e2270250fb05f05870b823b1dda0d4",
+ "reference": "825929c6a5e2270250fb05f05870b823b1dda0d4",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/guzzle": "^6.2",
+ "netresearch/jsonmapper": "^1.1",
+ "php": "^5.4 || ^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.7"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PhpInsights\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "description": "A php wrapper for Googles page speed insights",
+ "time": "2017-03-26 22:27:08"
},
{
"name": "erusev/parsedown",
@@ -146,7 +179,7 @@
"markdown",
"parser"
],
- "time": "2016-11-02T15:56:58+00:00"
+ "time": "2016-11-02 15:56:58"
},
{
"name": "guzzlehttp/guzzle",
@@ -208,7 +241,7 @@
"rest",
"web service"
],
- "time": "2016-10-08T15:01:37+00:00"
+ "time": "2016-10-08 15:01:37"
},
{
"name": "guzzlehttp/promises",
@@ -259,7 +292,7 @@
"keywords": [
"promise"
],
- "time": "2016-12-20T10:07:11+00:00"
+ "time": "2016-12-20 10:07:11"
},
{
"name": "guzzlehttp/psr7",
@@ -324,7 +357,7 @@
"uri",
"url"
],
- "time": "2017-02-21T01:20:32+00:00"
+ "time": "2017-02-21 01:20:32"
},
{
"name": "jakub-onderka/php-console-color",
@@ -367,7 +400,7 @@
"homepage": "http://www.acci.cz"
}
],
- "time": "2014-04-08T15:00:19+00:00"
+ "time": "2014-04-08 15:00:19"
},
{
"name": "jakub-onderka/php-console-highlighter",
@@ -411,7 +444,7 @@
"homepage": "http://www.acci.cz/"
}
],
- "time": "2015-04-20T18:58:01+00:00"
+ "time": "2015-04-20 18:58:01"
},
{
"name": "laravel/framework",
@@ -540,7 +573,7 @@
"framework",
"laravel"
],
- "time": "2017-02-15T14:31:32+00:00"
+ "time": "2017-02-15 14:31:32"
},
{
"name": "laravel/tinker",
@@ -598,7 +631,7 @@
"laravel",
"psysh"
],
- "time": "2016-12-30T18:13:17+00:00"
+ "time": "2016-12-30 18:13:17"
},
{
"name": "league/flysystem",
@@ -681,7 +714,7 @@
"sftp",
"storage"
],
- "time": "2017-02-09T11:33:58+00:00"
+ "time": "2017-02-09 11:33:58"
},
{
"name": "monolog/monolog",
@@ -759,7 +792,7 @@
"logging",
"psr-3"
],
- "time": "2016-11-26T00:15:39+00:00"
+ "time": "2016-11-26 00:15:39"
},
{
"name": "mtdowling/cron-expression",
@@ -803,7 +836,7 @@
"cron",
"schedule"
],
- "time": "2017-01-23T04:29:33+00:00"
+ "time": "2017-01-23 04:29:33"
},
{
"name": "nesbot/carbon",
@@ -856,7 +889,46 @@
"datetime",
"time"
],
- "time": "2017-01-16T07:55:07+00:00"
+ "time": "2017-01-16 07:55:07"
+ },
+ {
+ "name": "netresearch/jsonmapper",
+ "version": "v1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cweiske/jsonmapper.git",
+ "reference": "8d0b6d5b9f5940757b44bc0ee2f930aae6d4a6c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8d0b6d5b9f5940757b44bc0ee2f930aae6d4a6c7",
+ "reference": "8d0b6d5b9f5940757b44bc0ee2f930aae6d4a6c7",
+ "shasum": ""
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.2.*",
+ "squizlabs/php_codesniffer": "~1.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "JsonMapper": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "OSL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Christian Weiske",
+ "email": "cweiske@cweiske.de",
+ "homepage": "http://github.com/cweiske/jsonmapper/",
+ "role": "Developer"
+ }
+ ],
+ "description": "Map nested JSON structures onto PHP classes",
+ "time": "2017-01-27 21:01:41"
},
{
"name": "nikic/php-parser",
@@ -907,7 +979,7 @@
"parser",
"php"
],
- "time": "2017-02-10T20:20:03+00:00"
+ "time": "2017-02-10 20:20:03"
},
{
"name": "paragonie/random_compat",
@@ -955,7 +1027,7 @@
"pseudorandom",
"random"
],
- "time": "2016-11-07T23:38:38+00:00"
+ "time": "2016-11-07 23:38:38"
},
{
"name": "psr/http-message",
@@ -1005,7 +1077,7 @@
"request",
"response"
],
- "time": "2016-08-06T14:39:51+00:00"
+ "time": "2016-08-06 14:39:51"
},
{
"name": "psr/log",
@@ -1052,7 +1124,7 @@
"psr",
"psr-3"
],
- "time": "2016-10-10T12:19:37+00:00"
+ "time": "2016-10-10 12:19:37"
},
{
"name": "psy/psysh",
@@ -1125,7 +1197,7 @@
"interactive",
"shell"
],
- "time": "2017-01-15T17:54:13+00:00"
+ "time": "2017-01-15 17:54:13"
},
{
"name": "ramsey/uuid",
@@ -1207,7 +1279,7 @@
"identifier",
"uuid"
],
- "time": "2016-11-22T19:21:44+00:00"
+ "time": "2016-11-22 19:21:44"
},
{
"name": "swiftmailer/swiftmailer",
@@ -1261,7 +1333,7 @@
"mail",
"mailer"
],
- "time": "2017-02-13T07:52:53+00:00"
+ "time": "2017-02-13 07:52:53"
},
{
"name": "symfony/console",
@@ -1324,7 +1396,7 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2017-02-16T14:07:22+00:00"
+ "time": "2017-02-16 14:07:22"
},
{
"name": "symfony/css-selector",
@@ -1377,7 +1449,7 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
- "time": "2017-01-02T20:32:22+00:00"
+ "time": "2017-01-02 20:32:22"
},
{
"name": "symfony/debug",
@@ -1434,7 +1506,7 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2017-02-16T16:34:18+00:00"
+ "time": "2017-02-16 16:34:18"
},
{
"name": "symfony/dom-crawler",
@@ -1490,7 +1562,7 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
- "time": "2017-01-21T17:14:11+00:00"
+ "time": "2017-01-21 17:14:11"
},
{
"name": "symfony/event-dispatcher",
@@ -1550,7 +1622,7 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2017-01-02T20:32:22+00:00"
+ "time": "2017-01-02 20:32:22"
},
{
"name": "symfony/finder",
@@ -1599,7 +1671,7 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2017-01-02T20:32:22+00:00"
+ "time": "2017-01-02 20:32:22"
},
{
"name": "symfony/http-foundation",
@@ -1652,7 +1724,7 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
- "time": "2017-02-16T22:46:52+00:00"
+ "time": "2017-02-16 22:46:52"
},
{
"name": "symfony/http-kernel",
@@ -1734,7 +1806,7 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
- "time": "2017-02-16T23:59:56+00:00"
+ "time": "2017-02-16 23:59:56"
},
{
"name": "symfony/polyfill-mbstring",
@@ -1793,7 +1865,7 @@
"portable",
"shim"
],
- "time": "2016-11-14T01:06:16+00:00"
+ "time": "2016-11-14 01:06:16"
},
{
"name": "symfony/process",
@@ -1842,7 +1914,7 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
- "time": "2017-02-16T14:07:22+00:00"
+ "time": "2017-02-16 14:07:22"
},
{
"name": "symfony/routing",
@@ -1917,7 +1989,7 @@
"uri",
"url"
],
- "time": "2017-01-28T02:37:08+00:00"
+ "time": "2017-01-28 02:37:08"
},
{
"name": "symfony/translation",
@@ -1981,7 +2053,7 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
- "time": "2017-02-16T22:46:52+00:00"
+ "time": "2017-02-16 22:46:52"
},
{
"name": "symfony/var-dumper",
@@ -2044,7 +2116,7 @@
"debug",
"dump"
],
- "time": "2017-02-16T22:46:52+00:00"
+ "time": "2017-02-16 22:46:52"
},
{
"name": "t1gor/robots-txt-parser",
@@ -2100,7 +2172,7 @@
"robots.txt",
"yandex"
],
- "time": "2016-08-10T19:04:18+00:00"
+ "time": "2016-08-10 19:04:18"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -2147,7 +2219,7 @@
],
"description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
- "time": "2016-09-20T12:50:39+00:00"
+ "time": "2016-09-20 12:50:39"
},
{
"name": "vlucas/phpdotenv",
@@ -2197,7 +2269,7 @@
"env",
"environment"
],
- "time": "2016-09-01T10:05:43+00:00"
+ "time": "2016-09-01 10:05:43"
}
],
"packages-dev": [
@@ -2265,7 +2337,7 @@
"phpstorm",
"sublime"
],
- "time": "2017-02-22T12:27:33+00:00"
+ "time": "2017-02-22 12:27:33"
},
{
"name": "barryvdh/reflection-docblock",
@@ -2314,7 +2386,7 @@
"email": "mike.vanriel@naenius.com"
}
],
- "time": "2016-06-13T19:28:20+00:00"
+ "time": "2016-06-13 19:28:20"
},
{
"name": "doctrine/instantiator",
@@ -2368,7 +2440,7 @@
"constructor",
"instantiate"
],
- "time": "2015-06-14T21:17:01+00:00"
+ "time": "2015-06-14 21:17:01"
},
{
"name": "fzaninotto/faker",
@@ -2416,7 +2488,7 @@
"faker",
"fixtures"
],
- "time": "2016-04-29T12:21:54+00:00"
+ "time": "2016-04-29 12:21:54"
},
{
"name": "hamcrest/hamcrest-php",
@@ -2461,7 +2533,7 @@
"keywords": [
"test"
],
- "time": "2015-05-11T14:41:42+00:00"
+ "time": "2015-05-11 14:41:42"
},
{
"name": "laravel/browser-kit-testing",
@@ -2508,7 +2580,7 @@
"laravel",
"testing"
],
- "time": "2017-02-08T22:32:37+00:00"
+ "time": "2017-02-08 22:32:37"
},
{
"name": "mockery/mockery",
@@ -2573,7 +2645,7 @@
"test double",
"testing"
],
- "time": "2017-02-09T13:29:38+00:00"
+ "time": "2017-02-09 13:29:38"
},
{
"name": "myclabs/deep-copy",
@@ -2615,7 +2687,7 @@
"object",
"object graph"
],
- "time": "2017-01-26T22:05:40+00:00"
+ "time": "2017-01-26 22:05:40"
},
{
"name": "phpdocumentor/reflection-common",
@@ -2669,7 +2741,7 @@
"reflection",
"static analysis"
],
- "time": "2015-12-27T11:43:31+00:00"
+ "time": "2015-12-27 11:43:31"
},
{
"name": "phpdocumentor/reflection-docblock",
@@ -2714,7 +2786,7 @@
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "time": "2016-09-30T07:12:33+00:00"
+ "time": "2016-09-30 07:12:33"
},
{
"name": "phpdocumentor/type-resolver",
@@ -2761,7 +2833,7 @@
"email": "me@mikevanriel.com"
}
],
- "time": "2016-11-25T06:54:22+00:00"
+ "time": "2016-11-25 06:54:22"
},
{
"name": "phpspec/prophecy",
@@ -2824,7 +2896,7 @@
"spy",
"stub"
],
- "time": "2016-11-21T14:58:47+00:00"
+ "time": "2016-11-21 14:58:47"
},
{
"name": "phpunit/php-code-coverage",
@@ -2887,7 +2959,7 @@
"testing",
"xunit"
],
- "time": "2017-01-20T15:06:43+00:00"
+ "time": "2017-01-20 15:06:43"
},
{
"name": "phpunit/php-file-iterator",
@@ -2934,7 +3006,7 @@
"filesystem",
"iterator"
],
- "time": "2016-10-03T07:40:28+00:00"
+ "time": "2016-10-03 07:40:28"
},
{
"name": "phpunit/php-text-template",
@@ -2975,7 +3047,7 @@
"keywords": [
"template"
],
- "time": "2015-06-21T13:50:34+00:00"
+ "time": "2015-06-21 13:50:34"
},
{
"name": "phpunit/php-timer",
@@ -3019,7 +3091,7 @@
"keywords": [
"timer"
],
- "time": "2016-05-12T18:03:57+00:00"
+ "time": "2016-05-12 18:03:57"
},
{
"name": "phpunit/php-token-stream",
@@ -3068,7 +3140,7 @@
"keywords": [
"tokenizer"
],
- "time": "2016-11-15T14:06:22+00:00"
+ "time": "2016-11-15 14:06:22"
},
{
"name": "phpunit/phpunit",
@@ -3150,7 +3222,7 @@
"testing",
"xunit"
],
- "time": "2017-02-19T07:22:16+00:00"
+ "time": "2017-02-19 07:22:16"
},
{
"name": "phpunit/phpunit-mock-objects",
@@ -3209,7 +3281,7 @@
"mock",
"xunit"
],
- "time": "2016-12-08T20:27:08+00:00"
+ "time": "2016-12-08 20:27:08"
},
{
"name": "sebastian/code-unit-reverse-lookup",
@@ -3254,7 +3326,7 @@
],
"description": "Looks up which function or method a line of code belongs to",
"homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
- "time": "2016-02-13T06:45:14+00:00"
+ "time": "2016-02-13 06:45:14"
},
{
"name": "sebastian/comparator",
@@ -3318,7 +3390,7 @@
"compare",
"equality"
],
- "time": "2017-01-29T09:50:25+00:00"
+ "time": "2017-01-29 09:50:25"
},
{
"name": "sebastian/diff",
@@ -3370,7 +3442,7 @@
"keywords": [
"diff"
],
- "time": "2015-12-08T07:14:41+00:00"
+ "time": "2015-12-08 07:14:41"
},
{
"name": "sebastian/environment",
@@ -3420,7 +3492,7 @@
"environment",
"hhvm"
],
- "time": "2016-11-26T07:53:53+00:00"
+ "time": "2016-11-26 07:53:53"
},
{
"name": "sebastian/exporter",
@@ -3487,7 +3559,7 @@
"export",
"exporter"
],
- "time": "2016-11-19T08:54:04+00:00"
+ "time": "2016-11-19 08:54:04"
},
{
"name": "sebastian/global-state",
@@ -3538,7 +3610,7 @@
"keywords": [
"global state"
],
- "time": "2015-10-12T03:26:01+00:00"
+ "time": "2015-10-12 03:26:01"
},
{
"name": "sebastian/object-enumerator",
@@ -3584,7 +3656,7 @@
],
"description": "Traverses array structures and object graphs to enumerate all referenced objects",
"homepage": "https://github.com/sebastianbergmann/object-enumerator/",
- "time": "2017-02-18T15:18:39+00:00"
+ "time": "2017-02-18 15:18:39"
},
{
"name": "sebastian/recursion-context",
@@ -3637,7 +3709,7 @@
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "time": "2016-11-19T07:33:16+00:00"
+ "time": "2016-11-19 07:33:16"
},
{
"name": "sebastian/resource-operations",
@@ -3679,7 +3751,7 @@
],
"description": "Provides a list of PHP built-in functions that operate on resources",
"homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "time": "2015-07-28T20:34:47+00:00"
+ "time": "2015-07-28 20:34:47"
},
{
"name": "sebastian/version",
@@ -3722,7 +3794,7 @@
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
- "time": "2016-10-03T07:35:21+00:00"
+ "time": "2016-10-03 07:35:21"
},
{
"name": "symfony/class-loader",
@@ -3778,7 +3850,7 @@
],
"description": "Symfony ClassLoader Component",
"homepage": "https://symfony.com",
- "time": "2017-01-21T17:06:35+00:00"
+ "time": "2017-01-21 17:06:35"
},
{
"name": "symfony/yaml",
@@ -3833,7 +3905,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2017-02-16T22:46:52+00:00"
+ "time": "2017-02-16 22:46:52"
},
{
"name": "webmozart/assert",
@@ -3883,7 +3955,7 @@
"check",
"validate"
],
- "time": "2016-11-23T20:04:58+00:00"
+ "time": "2016-11-23 20:04:58"
}
],
"aliases": [],
diff --git a/config/app.php b/config/app.php
index 0789450..66807ba 100644
--- a/config/app.php
+++ b/config/app.php
@@ -185,6 +185,7 @@
App\Providers\UrlFetcherServiceProvider::class,
App\Providers\RobotsFileServiceProvider::class,
App\Providers\MarkdownServiceProvider::class,
+ App\Providers\GoogleInsightsServiceProvider::class,
],
diff --git a/config/services.php b/config/services.php
index 6bb0952..3a8192e 100644
--- a/config/services.php
+++ b/config/services.php
@@ -14,6 +14,10 @@
|
*/
+ 'google' => [
+ 'key' => env('GOOGLE_KEY'),
+ ],
+
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
diff --git a/routes/api.php b/routes/api.php
index beca092..0f59cc8 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -2,9 +2,26 @@
use App\Http\Requests\CheckRequest;
use App\Services\Checker;
+use App\Services\Insights;
+use PhpInsights\InsightsCaller;
-Route::get('check', function (CheckRequest $request, Checker $checker) {
+Route::get('check', function (CheckRequest $request, Checker $checker, Insights $insights) {
$results = $checker->validate($request->url);
- return response()->json(iterator_to_array($results));
+ $results = iterator_to_array($results);
+
+ if (config('services.google.key')) {
+ $insightResults = $insights->validate($request->url, InsightsCaller::STRATEGY_MOBILE);
+
+ $results = array_merge($results, iterator_to_array($insightResults));
+
+ $insightResults = $insights->validate($request->url, InsightsCaller::STRATEGY_DESKTOP);
+
+ $results = array_merge($results, iterator_to_array($insightResults));
+
+ // Remove duplicate entries
+ $results = array_map('unserialize', array_unique(array_map('serialize', $results)));
+ }
+
+ return response()->json($results);
})->name('check');