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