131 lines
3.6 KiB
PHP
131 lines
3.6 KiB
PHP
<?php
|
|
/*
|
|
Plugin Name: Spotify Recent OAuth
|
|
Description: Plugin som visar den senast spelade låten från Spotify med OAuth-autentisering.
|
|
Version: 1.4.0
|
|
Author: Christian Ohlsson
|
|
*/
|
|
|
|
if (!defined('ABSPATH')) exit;
|
|
|
|
require_once plugin_dir_path(__FILE__) . 'admin/settings.php';
|
|
require_once plugin_dir_path(__FILE__) . 'admin/oauth-handler.php';
|
|
|
|
/*
|
|
* Register the Gutenberg block
|
|
*/
|
|
function sro_register_block() {
|
|
wp_register_script(
|
|
'sro-block-js',
|
|
plugins_url('blocks/block.js', __FILE__),
|
|
array('wp-blocks', 'wp-element', 'wp-editor'),
|
|
filemtime(plugin_dir_path(__FILE__).'blocks/block.js')
|
|
);
|
|
|
|
register_block_type('sro/recent-track', array(
|
|
'editor_script' => 'sro-block-js',
|
|
'render_callback' => 'sro_render_block'
|
|
));
|
|
}
|
|
add_action('init', 'sro_register_block');
|
|
|
|
function sro_enqueue_styles() {
|
|
wp_enqueue_style(
|
|
'sro-style',
|
|
plugins_url('css/style.css', __FILE__)
|
|
);
|
|
}
|
|
add_action('wp_enqueue_scripts', 'sro_enqueue_styles');
|
|
|
|
/*
|
|
* Fetch recent track via Spotify API
|
|
*/
|
|
function sro_fetch_recent_track() {
|
|
|
|
$access = get_option('sro_access_token');
|
|
$refresh = get_option('sro_refresh_token');
|
|
$client_id = get_option('sro_client_id');
|
|
$client_secret = get_option('sro_client_secret');
|
|
|
|
// Refresh token if expired (Spotify tokens last 3600 sec)
|
|
$expires = get_option('sro_token_expires');
|
|
if (time() > $expires && $refresh) {
|
|
$response = wp_remote_post("https://accounts.spotify.com/api/token", array(
|
|
'body' => array(
|
|
'grant_type' => 'refresh_token',
|
|
'refresh_token' => $refresh,
|
|
'client_id' => $client_id,
|
|
'client_secret' => $client_secret
|
|
)
|
|
));
|
|
|
|
if (!is_wp_error($response)) {
|
|
$data = json_decode(wp_remote_retrieve_body($response), true);
|
|
if (isset($data['access_token'])) {
|
|
$access = $data['access_token'];
|
|
update_option('sro_access_token', $access);
|
|
update_option('sro_token_expires', time() + 3500);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!$access) return false;
|
|
|
|
$resp = wp_remote_get(
|
|
"https://api.spotify.com/v1/me/player/recently-played?limit=1",
|
|
array('headers'=>array('Authorization'=>"Bearer $access"))
|
|
);
|
|
|
|
if (is_wp_error($resp)) return false;
|
|
|
|
$data = json_decode(wp_remote_retrieve_body($resp), true);
|
|
|
|
if (!isset($data['items'][0])) return false;
|
|
|
|
return $data['items'][0];
|
|
}
|
|
|
|
|
|
/*
|
|
* Render the Gutenberg block
|
|
*/
|
|
function sro_render_block() {
|
|
$item = sro_fetch_recent_track();
|
|
if (!$item) {
|
|
return "<p>Spotify not connected or no recent activity.</p>";
|
|
}
|
|
|
|
$track = $item['track']['name'];
|
|
$artist = $item['track']['artists'][0]['name'];
|
|
$img = $item['track']['album']['images'][0]['url'];
|
|
|
|
/* gammal version
|
|
$played = strtotime($item['played_at']);
|
|
$mins = floor((time() - $played) / 60);
|
|
*/
|
|
$played = strtotime($item['played_at']);
|
|
$diff = time() - $played;
|
|
|
|
// Räkna ut dagar, timmar, minuter
|
|
$days = floor($diff / 86400); // 86400 sek per dag
|
|
$hours = floor(($diff % 86400) / 3600);
|
|
$minutes = floor(($diff % 3600) / 60);
|
|
|
|
// Välj rätt utskrift
|
|
if ($days > 0) {
|
|
$time_ago = $days . " dagar sedan";
|
|
} elseif ($hours > 0) {
|
|
$time_ago = $hours . " timmar sedan";
|
|
} else {
|
|
$time_ago = $minutes . " minuter sedan";
|
|
}
|
|
|
|
return "
|
|
<div class='sro-block'>
|
|
<img src='$img' />
|
|
<div class='song'>$artist - $track</div>
|
|
<div class='last_played'>Spelades för $time_ago</div>
|
|
</div>
|
|
";
|
|
}
|