From 986271128d3c8e9f07efa0a164db77a57e4c4392 Mon Sep 17 00:00:00 2001 From: JakubKermes Date: Mon, 13 May 2024 14:58:48 +0200 Subject: [PATCH 1/2] Add Docomo provider --- app/Importers/DocomoDataImporter.php | 61 +++++++++++++++++++++++++++ app/Jobs/DocomoDataImporterJob.php | 15 +++++++ app/Services/DataImporterService.php | 2 + database/seeders/ProviderSeeder.php | 2 + public/providers/docomo.png | Bin 0 -> 6645 bytes 5 files changed, 80 insertions(+) create mode 100644 app/Importers/DocomoDataImporter.php create mode 100644 app/Jobs/DocomoDataImporterJob.php create mode 100644 public/providers/docomo.png diff --git a/app/Importers/DocomoDataImporter.php b/app/Importers/DocomoDataImporter.php new file mode 100644 index 00000000..bd137217 --- /dev/null +++ b/app/Importers/DocomoDataImporter.php @@ -0,0 +1,61 @@ +client->get("https://docomo-cycle.jp/?lang=en"); + $html = $response->getBody()->getContents(); + } catch (GuzzleException) { + $this->createImportInfoDetails("400", self::getProviderName()); + + $this->stopExecution = true; + + return $this; + } + + $crawler = new Crawler($html); + $this->sections = $crawler->filter('div[class="show-all"]'); + + if (count($this->sections) === 0) { + $this->createImportInfoDetails("204", self::getProviderName()); + $this->stopExecution = true; + } + + return $this; + } + + public function transform(): void + { + if ($this->stopExecution) { + return; + } + $existingCityProviders = []; + + $cities = $this->sections->filter('span[class="composite"]'); + + $cityNames = []; + + foreach ($cities as $city) { + $cityNames[] = $city->textContent; + } + + foreach ($cityNames as $cityName) { + $this->load($cityName, self::COUNTRY_NAME, $lat = "", $long = "", $this->services); + } + } +} diff --git a/app/Jobs/DocomoDataImporterJob.php b/app/Jobs/DocomoDataImporterJob.php new file mode 100644 index 00000000..48723551 --- /dev/null +++ b/app/Jobs/DocomoDataImporterJob.php @@ -0,0 +1,15 @@ +setImportInfo($this->importInfoId)->extract()->transform(); + } +} diff --git a/app/Services/DataImporterService.php b/app/Services/DataImporterService.php index 504093b5..452eefa2 100644 --- a/app/Services/DataImporterService.php +++ b/app/Services/DataImporterService.php @@ -10,6 +10,7 @@ use App\Jobs\BirdDataImporterJob; use App\Jobs\BitMobilityDataImporterJob; use App\Jobs\BoltDataImporterJob; +use App\Jobs\DocomoDataImporterJob; use App\Jobs\DottDataImporterJob; use App\Jobs\HopDataImporterJob; use App\Jobs\HoppDataImporterJob; @@ -57,6 +58,7 @@ public function run(string $whoRunsIt = "admin"): void new HoppDataImporterJob($this->importInfoId), new LinkDataImporterJob($this->importInfoId), new NeuronDataImporterJob($this->importInfoId), + new DocomoDataImporterJob($this->importInfoId), new QuickDataImporterJob($this->importInfoId), new RydeDataImporterJob($this->importInfoId), new SpinDataImporterJob($this->importInfoId), diff --git a/database/seeders/ProviderSeeder.php b/database/seeders/ProviderSeeder.php index de08d7a5..f3af3668 100644 --- a/database/seeders/ProviderSeeder.php +++ b/database/seeders/ProviderSeeder.php @@ -10,6 +10,7 @@ use App\Importers\BirdDataImporter; use App\Importers\BitMobilityDataImporter; use App\Importers\BoltDataImporter; +use App\Importers\DocomoDataImporter; use App\Importers\DottDataImporter; use App\Importers\HopDataImporter; use App\Importers\HoppDataImporter; @@ -43,6 +44,7 @@ public function run(): void ["name" => BirdDataImporter::getProviderName(), "color" => "#26ccf0", "url" => "https://www.bird.co/", "android_url" => "https://play.google.com/store/apps/details?id=co.bird.android", "ios_url" => "https://apps.apple.com/us/app/bird-be-free-enjoy-the-ride/id1260842311"], ["name" => BitMobilityDataImporter::getProviderName(), "color" => "#8da6e3", "url" => "https://bitmobility.it/en/", "android_url" => "https://play.google.com/store/apps/details?id=it.bitmobility.bit", "ios_url" => "https://apps.apple.com/it/app/bit/id1464155063"], ["name" => BoltDataImporter::getProviderName(), "color" => "#24f0a0", "url" => "https://bolt.eu/pl-pl/scooters/", "android_url" => "https://play.google.com/store/apps/details?id=ee.mtakso.client&hl=pl&gl=US", "ios_url" => "https://apps.apple.com/pl/app/bolt-przejazdy-hulajnogi/id675033630?l=pl"], + ["name" => DocomoDataImporter::getProviderName(), "color" => "#CA0029", "url" => "https://docomo-cycle.jp/?lang=en", "android_url" => "https://play.google.com/store/apps/details?id=jp.docomo_cycle.bikeshare", "ios_url" => "https://apps.apple.com/jp/app/id1475196715"], ["name" => DottDataImporter::getProviderName(), "color" => "#f5c604", "url" => "https://ridedott.com/", "android_url" => "https://play.google.com/store/apps/details?id=com.ridedott.rider&pli=1", "ios_url" => "https://apps.apple.com/us/app/dott-unlock-your-city/id1440301673"], ["name" => HopDataImporter::getProviderName(), "color" => "#ea1821", "url" => "https://hop.bike/en/", "android_url" => "https://play.google.com/store/apps/details?id=com.hoplagit.rider&hl=pl&gl=US", "ios_url" => "https://apps.apple.com/pl/app/hop-enjoy-the-city/id1487640704?l=pl"], ["name" => HoppDataImporter::getProviderName(), "color" => "#1ce5be", "url" => "https://hopp.bike/", "android_url" => "https://play.google.com/store/apps/details?id=bike.hopp", "ios_url" => "https://apps.apple.com/us/app/hopp-scooters/id1471324642?ls=1"], diff --git a/public/providers/docomo.png b/public/providers/docomo.png new file mode 100644 index 0000000000000000000000000000000000000000..cf281e7e2164f7eeaf9671a3fa1ea64fa7fd3531 GIT binary patch literal 6645 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 literal 0 HcmV?d00001 From 08aba0995d693694b9259e64af80ee74aa15682c Mon Sep 17 00:00:00 2001 From: Aleksandra Kozubal <104600942+AleksandraKozubal@users.noreply.github.com> Date: Tue, 14 May 2024 08:13:30 +0200 Subject: [PATCH 2/2] change bg color for Docomo --- database/seeders/ProviderSeeder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/seeders/ProviderSeeder.php b/database/seeders/ProviderSeeder.php index f3af3668..284be087 100644 --- a/database/seeders/ProviderSeeder.php +++ b/database/seeders/ProviderSeeder.php @@ -44,7 +44,7 @@ public function run(): void ["name" => BirdDataImporter::getProviderName(), "color" => "#26ccf0", "url" => "https://www.bird.co/", "android_url" => "https://play.google.com/store/apps/details?id=co.bird.android", "ios_url" => "https://apps.apple.com/us/app/bird-be-free-enjoy-the-ride/id1260842311"], ["name" => BitMobilityDataImporter::getProviderName(), "color" => "#8da6e3", "url" => "https://bitmobility.it/en/", "android_url" => "https://play.google.com/store/apps/details?id=it.bitmobility.bit", "ios_url" => "https://apps.apple.com/it/app/bit/id1464155063"], ["name" => BoltDataImporter::getProviderName(), "color" => "#24f0a0", "url" => "https://bolt.eu/pl-pl/scooters/", "android_url" => "https://play.google.com/store/apps/details?id=ee.mtakso.client&hl=pl&gl=US", "ios_url" => "https://apps.apple.com/pl/app/bolt-przejazdy-hulajnogi/id675033630?l=pl"], - ["name" => DocomoDataImporter::getProviderName(), "color" => "#CA0029", "url" => "https://docomo-cycle.jp/?lang=en", "android_url" => "https://play.google.com/store/apps/details?id=jp.docomo_cycle.bikeshare", "ios_url" => "https://apps.apple.com/jp/app/id1475196715"], + ["name" => DocomoDataImporter::getProviderName(), "color" => "#faf9f6", "url" => "https://docomo-cycle.jp/?lang=en", "android_url" => "https://play.google.com/store/apps/details?id=jp.docomo_cycle.bikeshare", "ios_url" => "https://apps.apple.com/jp/app/id1475196715"], ["name" => DottDataImporter::getProviderName(), "color" => "#f5c604", "url" => "https://ridedott.com/", "android_url" => "https://play.google.com/store/apps/details?id=com.ridedott.rider&pli=1", "ios_url" => "https://apps.apple.com/us/app/dott-unlock-your-city/id1440301673"], ["name" => HopDataImporter::getProviderName(), "color" => "#ea1821", "url" => "https://hop.bike/en/", "android_url" => "https://play.google.com/store/apps/details?id=com.hoplagit.rider&hl=pl&gl=US", "ios_url" => "https://apps.apple.com/pl/app/hop-enjoy-the-city/id1487640704?l=pl"], ["name" => HoppDataImporter::getProviderName(), "color" => "#1ce5be", "url" => "https://hopp.bike/", "android_url" => "https://play.google.com/store/apps/details?id=bike.hopp", "ios_url" => "https://apps.apple.com/us/app/hopp-scooters/id1471324642?ls=1"],