﻿{"id":113,"date":"2009-03-20T22:59:20","date_gmt":"2009-03-20T21:59:20","guid":{"rendered":"http:\/\/www.flapane.com\/blog\/?p=113"},"modified":"2014-09-12T19:50:32","modified_gmt":"2014-09-12T18:50:32","slug":"lastfm-widget-in-php-mostrare-le-canzoni-ascoltate-di-recente-in-un-sito-web","status":"publish","type":"post","link":"https:\/\/www.flapane.com\/blog\/2009\/03\/lastfm-widget-in-php-mostrare-le-canzoni-ascoltate-di-recente-in-un-sito-web\/","title":{"rendered":"Last.fm widget in php : mostrare le canzoni ascoltate di recente in un sito web."},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\" alignleft image\" src=\"http:\/\/1.bp.blogspot.com\/_enXx-JOYG20\/Rycd6Dr3fZI\/AAAAAAAAAcI\/IpmjIZSgwPQ\/s400\/lastfm%2Blogo.png\" alt=\"Last.fm\" width=\"400\" height=\"216\" \/><\/p>\n<p style=\"text-align: justify;\">Prendendo spunto da una idea del sito mxmm.de e volendo cambiare il widget predefinito di last.fm in Flash per usare qualcosa di pi\u00f9 flessibile, ne ho realizzato uno ad hoc.<\/p>\n<p style=\"text-align: justify;\">E&#8217;possibile sfruttare l&#8217;output JSON delle ultime canzoni ascoltate, sfruttando le API di Last.fm, leggerlo, e sistemarlo come si vuole.<\/p>\n<p style=\"text-align: justify;\">Le uniche cose da impostare sono il proprio username e la propria API key, inoltre si pu\u00f2 cambiare il foglio CSS per adattarlo ai propri gusti.<\/p>\n<p style=\"text-align: justify;\">Grazie a questo codice, ho potuto inserire in <a title=\"flapane.com\" href=\"https:\/\/www.flapane.com\">homepage<\/a> una widget pi\u00f9 larga e meno alta, rispetto a quella in Flash di last.fm<\/p>\n<p style=\"text-align: justify;\">Inoltre, a differenza della widget ufficiale di last.fm, questa indica quante ore e minuti sono passati dall&#8217;ascolto di quella canzone (entro le 24 ore).<\/p>\n<p style=\"text-align: justify;\">Passando con la freccia del mouse su una canzone ed aspettando un paio di secondi, apparir\u00e0 l&#8217;orario e la data in cui \u00e8 stata suonata quella canzone (funziona sia con Internet Explorer che con Firefox)<\/p>\n<p><!--more--><\/p>\n<div id=\"attachment_739\" style=\"width: 410px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-739\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-739    image\" title=\"lastfm\" src=\"\/blog\/wp-content\/uploads\/2009\/03\/lastfm-widget.png\" alt=\"\" width=\"400\" height=\"102\" \/><p id=\"caption-attachment-739\" class=\"wp-caption-text\">Esempio di widget per mostrare le canzoni da last.fm<\/p><\/div>\n<p style=\"text-align: justify;\">Ecco il codice:<\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #ff0000;\">(update 10 Aprile 2010: Aggiunta la funzione &#8220;ADESSO&#8221;, se si sta ascoltando la canzone proprio in quel momento)<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #ff0000;\">(update Giugno 2012: Codice pulito ed ottimizzato, ed aggiunta la funzione che prevede che il sito di Last.fm sia down)<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #ff0000;\">(update Febbraio 2013: Passaggio dalle API v1 alle API v2 di Last.fm, con l&#8217;aggiunta di un file di cache)<\/span><\/p>\n<span class=\"no_translate\"><\/span><\/p>\n<pre class=\"brush:php\">&lt;head&gt;\r\n&lt;style&gt;\r\n\t#lastfm-title {\r\n\t\twidth: 500px;\r\n\t\tbackground-color: #78a5d3;\r\n\t\tcolor: #dce8f4;\r\n\t\tfont-size: 19px;\r\n\t\tfont-weight: bold;\r\n\t\tpadding-left: 5px;\r\n\t\t}\r\n\t.lastfm-homepage {\r\n\t\twidth: 500px;\r\n\t\ttext-align:left;\r\n\t\tbackground-color: #dee9ed;\r\n\t\tcolor: #000000;\r\n\t\tpadding-left: 5px;\r\n\t\t}\r\n\t.lastfm-homepage a {\r\n\t\ttext-decoration: none;\r\n\t\tcolor: #267dcd;\r\n\t\t}\r\n        .lastfm-homepage a:hover {\r\n\t\ttext-decoration: none;\r\n\t\tcolor: #00ffff;\r\n\t\t}\r\n&lt;\/style&gt;\r\n&lt;meta content=\"text\/html;charset=utf-8\" http-equiv=\"Content-Type\" \/&gt;\r\n&lt;\/head&gt;\r\n&lt;?\r\n\/* Last.fm PHP widget. It shows the last $songs played songs. You just need to insert your username, name of the cachefile, expiration time of the cachefile, and your API key.\r\nSource: https:\/\/www.flapane.com\/blog\/2009\/03\/lastfm-widget-in-php-mostrare-le-canzoni-ascoltate-di-recente-in-un-sito-web\/\r\n(c) Flapane.com - Sep-2014*\/\r\n$username = \"your username\";\u00a0\u00a0 \u00a0\/\/Last.fm Username\r\n$expiretime=2; \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \/\/ cache expire time in minutes\r\n$apikey=\"your api key\";\u00a0\u00a0 \u00a0\/\/your api key\r\n$cachename=\"lastfm.cache\"; \/\/name of the cachefile\r\n$songs=4;\u00a0\u00a0 \u00a0\/\/how many songs to show\r\n\r\n\/\/create the cachefile if it doesn't exist\r\nif (!file_exists($cachename)) {\r\n\u00a0\u00a0\u00a0\u00a0 $create = fopen($cachename, 'w');\r\n\u00a0\u00a0\u00a0 \u00a0 chmod (\"$cachename\", 0644); \/\/set chmod 644\r\n\u00a0\u00a0 \u00a0 fclose($create);\r\n}\r\n\r\n\/\/ Is the file older than $expiretime, or the file is new\/empty?\r\n$FileAge = time() - filectime($cachename);\u00a0\u00a0 \u00a0\/\/ Calculate file age in seconds\r\nif ($FileAge &gt; ($expiretime * 60) || 0 == filesize($cachename))\r\n{\r\n\u00a0\u00a0 \u00a0$url = \"http:\/\/ws.audioscrobbler.com\/2.0\/?method=user.getrecenttracks&amp;user=$username&amp;api_key=$apikey&amp;limit=$songs&amp;extended=0&amp;format=json\";\r\n\u00a0\u00a0 \u00a0$lastfm_json = file_get_contents($url);\r\n\u00a0\u00a0 \u00a0$handle = fopen($cachename, 'wb');\r\n\u00a0\u00a0 \u00a0fwrite($handle, $lastfm_json);\u00a0\u00a0 \u00a0\/\/refresh the cache file with new content\r\n}\r\n\r\n\/\/cachefile is fresh enough... outputting data\r\n$parsed_json = json_decode(file_get_contents($cachename), true);\r\n\r\nif(!empty($parsed_json)){\r\n\u00a0\u00a0 \u00a0for($i=0; $i&lt;$songs; $i++){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$artist[$i] = $parsed_json['recenttracks']['track'][$i]['artist']['#text'];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$title[$i] = $parsed_json['recenttracks']['track'][$i]['name'];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$url[$i] = $parsed_json['recenttracks']['track'][$i]['url'];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$timesong[$i] = $parsed_json['recenttracks']['track'][$i]['date']['uts'];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$playedon[$i] = $parsed_json['recenttracks']['track'][$i]['date']['#text'];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if(!empty($parsed_json['recenttracks']['track'][$i]['@attr'])){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$now_playing[$i] = $parsed_json['recenttracks']['track'][$i]['@attr']['nowplaying'];}\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$tempo = time() - $timesong[$i];\u00a0\u00a0 \u00a0\/\/seconds passed\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$minutes = (int)($tempo \/ 60);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$hours = (int)($minutes \/ 60);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$days = (int)($hours \/ 24);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (isset($now_playing) &amp;&amp; $now_playing[$i]=='true')\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo \"&lt;div class='lastfm-homepage'&gt;&lt;a title='Now playing' href=\".$url[$i].\" target='_blank'&gt;$artist[$i] - $title[$i]&lt;\/a&gt; Now &lt;img src=\\\"\/img\/lastfm_now.gif\\\" alt=\\\"lastfm listen icon\\\" \/&gt;&lt;\/div&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0else if ($days &gt;= 1)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo \"&lt;div class='lastfm-homepage'&gt;&lt;a title='$playedon[$i] GMT' href=\".$url[$i].\" target='_blank'&gt;$artist[$i] - $title[$i]&lt;\/a&gt; \" . $days . \" day(s) ago&lt;\/div&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0else if ($hours &gt;= 1)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo \"&lt;div class='lastfm-homepage'&gt;&lt;a title='$playedon[$i] GMT' href=\".$url[$i].\" target='_blank'&gt;$artist[$i] - $title[$i]&lt;\/a&gt; \" . $hours . \" hours ago&lt;\/div&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0else if ($minutes &gt; 1 &amp;&amp; $minutes &lt; 60)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo \"&lt;div class='lastfm-homepage'&gt;&lt;a title='$playedon[$i] GMT' href=\".$url[$i].\" target='_blank'&gt;$artist[$i] - $title[$i]&lt;\/a&gt; \" . $minutes . \" minutes ago&lt;\/div&gt;\";\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0}\r\n}\r\nelse echo \"Sorry, Last.fm is down&lt;br \/&gt;\";\r\n?&gt;<\/pre>\n<p><span class=\"no_translate\"><\/span>\n<p>Problemi o suggerimenti? Lasciate pure un commento qui sotto!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>E&#8217;possibile sfruttare l&#8217;output delle ultime canzoni ascoltate che crea automaticamente audioscrobbler, leggerlo, e sistemarlo come si vuole.<\/p>\n<p>L&#8217;unica cosa da impostare \u00e8 il proprio username, inoltre si pu\u00f2 cambiare il foglio CSS per adattarlo ai propri gusti&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7],"tags":[60,62,14,15,61],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.flapane.com\/blog\/wp-json\/wp\/v2\/posts\/113"}],"collection":[{"href":"https:\/\/www.flapane.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.flapane.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.flapane.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flapane.com\/blog\/wp-json\/wp\/v2\/comments?post=113"}],"version-history":[{"count":0,"href":"https:\/\/www.flapane.com\/blog\/wp-json\/wp\/v2\/posts\/113\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.flapane.com\/blog\/wp-json\/wp\/v2\/media?parent=113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flapane.com\/blog\/wp-json\/wp\/v2\/categories?post=113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flapane.com\/blog\/wp-json\/wp\/v2\/tags?post=113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}