From 7cfce96dd0485a3d8bea1cbf2573dfcfddcb45c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment?= Date: Wed, 24 Feb 2021 17:47:17 +0100 Subject: [PATCH] :sparkles: Add Imgur Collector --- composer.json | 3 +- src/Collector/ImgurCollector.php | 73 ++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/Collector/ImgurCollector.php diff --git a/composer.json b/composer.json index daab928..b0eac6e 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,8 @@ "require": { "fabpot/goutte": "^4.0", "ext-imagick": "*", - "samwilson/phpflickr": "^4.14" + "samwilson/phpflickr": "^4.14", + "ext-curl": "*" }, "autoload": { "psr-4": { diff --git a/src/Collector/ImgurCollector.php b/src/Collector/ImgurCollector.php new file mode 100644 index 0000000..cc0e394 --- /dev/null +++ b/src/Collector/ImgurCollector.php @@ -0,0 +1,73 @@ +getRandomImages(1); + } + + /** + * @param int $number + * + * @return int + * @throws \JsonException + */ + public function getRandomImages(int $number) + { + $word_to_search = $this->getConfig()->get('collector.keywords.keywords', false); + $url = sprintf('https://api.imgur.com/3/gallery/search?q=%s', $word_to_search); + $curl = curl_init(); + + curl_setopt_array($curl, array( + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_ENCODING => "", + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 0, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_CUSTOMREQUEST => "GET", + CURLOPT_HTTPHEADER => [ + sprintf('Authorization: Client-ID %s', $this->getConfig()->get('collector.imgur.client_id')) + ], + )); + + $response = curl_exec($curl); + + curl_close($curl); + $response = json_decode($response, true, 512, JSON_THROW_ON_ERROR); + $images = array_map(static function($image) { + return $image['images'][0]['link']; + }, $response['data']); + + $index_to_download = array_rand($images, $number); + if (!is_array($index_to_download)) { + $index_to_download = [$index_to_download]; + } + + foreach ($index_to_download as $image_index) { + $photo = $images[$image_index]; + file_put_contents($this->getPoolDirectory() . '/' . basename(parse_url($photo, PHP_URL_PATH)), file_get_contents($photo)); + } + + return $number; + } +}