From 42a8cfef1e62c861b19f759ac2320de34028f607 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=AFc=20DEFRANCE?= <loic.defrance@gmail.com>
Date: Sun, 13 Mar 2016 14:29:33 +0100
Subject: [PATCH] Spotify support

---
 PlayBot/sites/spotify.pm | 45 ++++++++++++++++++++++++++++++++++++++++
 PlayBot/utils/db/chan.pm |  2 +-
 2 files changed, 46 insertions(+), 1 deletion(-)
 create mode 100644 PlayBot/sites/spotify.pm

diff --git a/PlayBot/sites/spotify.pm b/PlayBot/sites/spotify.pm
new file mode 100644
index 0000000..1c5fb9f
--- /dev/null
+++ b/PlayBot/sites/spotify.pm
@@ -0,0 +1,45 @@
+package PlayBot::sites::spotify;
+
+use strict;
+use warnings;
+
+use LWP::UserAgent;
+use JSON;
+use FindBin;
+
+my $conf;
+my $endpoint = "https://api.spotify.com/v1/tracks/";
+
+sub regex
+{
+    return qr#(?:^|[^!])https?://open.spotify.com/track/([a-zA-Z0-9_-]+)#;
+}
+
+sub get {
+    shift;
+	my $id = shift;
+	
+    my $ua = LWP::UserAgent->new(
+        timeout     => 30,
+        env_proxy   => 1,
+    );
+	my $response = $ua->get($endpoint
+        .$id);
+	die($response->status_line) unless ($response->is_success);
+
+	my $content = decode_json($response->decoded_content);
+
+#    die "video not found" if (not scalar @{ $content->{items} });
+    
+    my %infos;
+
+    $infos{'title'} = $content->{'name'};
+    $infos{'duration'} = $content->{'duration_ms'} / 1000;
+	$infos{'site'} = 'spotify';
+    $infos{'url'} = 'https://open.spotify/track/'.$id;
+    $infos{'author'} = $content->{'artists'}->[0]->{'name'};
+
+	return %infos;
+}
+
+1;
diff --git a/PlayBot/utils/db/chan.pm b/PlayBot/utils/db/chan.pm
index b37c777..7d3312f 100644
--- a/PlayBot/utils/db/chan.pm
+++ b/PlayBot/utils/db/chan.pm
@@ -32,7 +32,7 @@ around 'BUILDARGS' => sub
 
     if (not $row)
     {
-        $sites = ['dailymotion', 'mixcloud', 'soundcloud', 'youtube'];
+        $sites = ['dailymotion', 'mixcloud', 'soundcloud', 'youtube', 'spotify'];
 
         $sth = $dbh->prepare('
             insert into playbot_config (name, sites)
-- 
GitLab