summaryrefslogtreecommitdiff
path: root/bridges/DiscogsBridge.php
blob: 9fe4f51f14515126bcc2154586ce254ea9f72975 (plain)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php

class DiscogsBridge extends BridgeAbstract {

	const MAINTAINER = 'teromene';
	const NAME = 'DiscogsBridge';
	const URI = 'https://www.discogs.com/';
	const DESCRIPTION = 'Returns releases from discogs';
	const PARAMETERS = array(
		'Artist Releases' => array(
			'artistid' => array(
				'name' => 'Artist ID',
				'type' => 'number',
			)
		),
		'Label Releases' => array(
			'labelid' => array(
				'name' => 'Label ID',
				'type' => 'number',
			)
		),
		'User Wantlist' => array(
			'username_wantlist' => array(
				'name' => 'Username',
				'type' => 'text',
			)
		),
		'User Folder' => array(
			'username_folder' => array(
				'name' => 'Username',
				'type' => 'text',
			),
			'folderid' => array(
				'name' => 'Folder ID',
				'type' => 'number',
			)
		)
	);

	public function collectData() {

		if(!empty($this->getInput('artistid')) || !empty($this->getInput('labelid'))) {

			if(!empty($this->getInput('artistid'))) {
				$data = getContents('https://api.discogs.com/artists/'
						. $this->getInput('artistid')
						. '/releases?sort=year&sort_order=desc')
						or returnServerError('Unable to query discogs !');
			} elseif(!empty($this->getInput('labelid'))) {
				$data = getContents('https://api.discogs.com/labels/'
						. $this->getInput('labelid')
						. '/releases?sort=year&sort_order=desc')
						or returnServerError('Unable to query discogs !');
			}

			$jsonData = json_decode($data, true);
			foreach($jsonData['releases'] as $release) {

				$item = array();
				$item['author'] = $release['artist'];
				$item['title'] = $release['title'];
				$item['id'] = $release['id'];
				$resId = array_key_exists('main_release', $release) ? $release['main_release'] : $release['id'];
				$item['uri'] = self::URI . $this->getInput('artistid') . '/release/' . $resId;
				$item['timestamp'] = DateTime::createFromFormat('Y', $release['year'])->getTimestamp();
				$item['content'] = $item['author'] . ' - ' . $item['title'];
				$this->items[] = $item;
			}

		} elseif(!empty($this->getInput('username_wantlist')) || !empty($this->getInput('username_folder'))) {

			if(!empty($this->getInput('username_wantlist'))) {
				$data = getContents('https://api.discogs.com/users/'
						. $this->getInput('username_wantlist')
						. '/wants?sort=added&sort_order=desc')
						or returnServerError('Unable to query discogs !');
				$jsonData = json_decode($data, true)['wants'];

			} elseif(!empty($this->getInput('username_folder'))) {
				$data = getContents('https://api.discogs.com/users/'
						. $this->getInput('username_folder')
						. '/collection/folders/'
						. $this->getInput('folderid')
						.'/releases?sort=added&sort_order=desc')
						or returnServerError('Unable to query discogs !');
				$jsonData = json_decode($data, true)['releases'];
			}
			foreach($jsonData as $element) {

				$infos = $element['basic_information'];
				$item = array();
				$item['title'] = $infos['title'];
				$item['author'] = $infos['artists'][0]['name'];
				$item['id'] = $infos['artists'][0]['id'];
				$item['uri'] = self::URI . $infos['artists'][0]['id'] . '/release/' . $infos['id'];
				$item['timestamp'] = strtotime($element['date_added']);
				$item['content'] = $item['author'] . ' - ' . $item['title'];
				$this->items[] = $item;

			}
		}

	}

	public function getURI() {
		return self::URI;
	}

	public function getName() {
		return static::NAME;
	}
}