-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathWikimediaCommons.php
More file actions
84 lines (71 loc) · 2.72 KB
/
Copy pathWikimediaCommons.php
File metadata and controls
84 lines (71 loc) · 2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
/**
* @copyright Copyright (c) 2019 Felix Nüsse <felix.nuesse@t-online.de>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Unsplash\Provider;
use OCA\Unsplash\ProviderHandler\Provider;
class WikimediaCommons extends Provider
{
/**
* TODO : Properly get current nextcloud image, currently only the theming one is used.
* @var string
*/
public string $DEFAULT_SEARCH = "landscape,dog,cat";
public bool $ALLOW_CUSTOMIZING = true;
public bool $IS_CACHED = false;
public string $DEFAULT_METADATA_URL="https://commons.wikimedia.org/wiki/Main_Page";
public function getWhitelistResourceUrls()
{
return ["https://upload.wikimedia.org"];
}
public function getRandomImageUrl($size)
{
return $this->getRandomImageUrlBySearchTerm($this->getRandomSearchTerm(), $size);
}
public function getRandomImageUrlBySearchTerm($search, $size)
{
if(empty($search)) {
$search = 'nature';
}
$url = 'https://commons.wikimedia.org/w/api.php';
$url .= '?action=query';
$url .= '&generator=categorymembers';
$url .= '&gcmtitle=Category:' . $search;
$url .= '&gcmlimit=100';
$url .= '&gcmtype=file';
$url .= '&prop=imageinfo';
$url .= '&iiprop=url';
$url .= '&format=json';
$client = $this->clientService->newClient();
$response = $client->get($url);
$body = $response->getBody();
$json = json_decode($body, true);
try {
$images = $json['query']['pages'][array_rand($json['query']['pages'])];
return $images['imageinfo'][0]['url'];
} catch (\Error $e) {
$this->logger->alert("Your searchterms likely did not yield results for: ".$this->getName());
}
return (new NextcloudImage($this->appName, $this->logger, $this->config, $this->appData, $this->clientService, "Nextcloud"))->getRandomImageUrl($size);
}
public function getCachedImageURL(): string
{
return $this->getRandomImageUrl("");
}
}