Add Imgur Collector

This commit is contained in:
Clément 2021-02-24 17:47:17 +01:00
parent f92dc419e5
commit 7cfce96dd0
2 changed files with 75 additions and 1 deletions

View File

@ -11,7 +11,8 @@
"require": { "require": {
"fabpot/goutte": "^4.0", "fabpot/goutte": "^4.0",
"ext-imagick": "*", "ext-imagick": "*",
"samwilson/phpflickr": "^4.14" "samwilson/phpflickr": "^4.14",
"ext-curl": "*"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {

View File

@ -0,0 +1,73 @@
<?php
namespace Shikiryu\WebGobbler\Collector;
use Shikiryu\WebGobbler\Collector;
class ImgurCollector extends Collector
{
/**
* @return string
*/
public function getName()
{
return 'collector_imgur';
}
/**
* @return int
* @throws \JsonException
*/
public function getRandomImage()
{
return $this->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;
}
}