source: pmb4.2/trunk/fuentes/pmb/admin/connecteurs/in/lastfm/lastfm.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 10.1 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: lastfm.class.php,v 1.4 2015-04-03 11:16:25 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9global $class_path,$base_path, $include_path;
10require_once($class_path."/connecteurs.class.php");
11require_once($class_path."/curl.class.php");
12require_once($class_path."/nusoap/nusoap.php");
13
14class lastfm extends connector {
15        //propriétés internes
16        var $api;
17        var $enrichpage;        //page d'enrichissement pour enrichissement paginable
18       
19    function lastfm($connector_path="") {
20        parent::connector($connector_path);
21    }
22   
23    function get_id() {
24        return "lastfm";
25    }
26   
27    //Est-ce un entrepot ?
28        function is_repository() {
29                return 2;
30        }
31   
32    function unserialize_source_params($source_id) {
33        $params=$this->get_source_params($source_id);
34                if ($params["PARAMETERS"]) {
35                        $vars=unserialize($params["PARAMETERS"]);
36                        $params["PARAMETERS"]=$vars;
37                }
38                return $params;
39    }
40   
41    function get_libelle($message) {
42        if (substr($message,0,4)=="msg:") return $this->msg[substr($message,4)]; else return $message;
43    }
44   
45    function source_get_property_form($source_id) {
46                global $charset;
47                global $pmb_url_base;
48                global $token;
49       
50        $params=$this->get_source_params($source_id);
51                if ($params["PARAMETERS"]) {
52                        //Affichage du formulaire avec $params["PARAMETERS"]
53                        $vars=unserialize($params["PARAMETERS"]);
54                        foreach ($vars as $key=>$val) {
55                                global $$key;
56                                $$key=$val;
57                        }       
58                }
59                if($source_id!=0){
60                        $url = $pmb_url_base."admin.php?categ=connecteurs&sub=in&act=add_source&id=15&source_id=".$source_id;
61                }else{
62                        $url = $this->msg['lastfm_no_source'];
63                }
64               
65                $form="
66                <div class='row'>&nbsp;</div>
67                <div class='row'>
68                        <div class='colonne3'>
69                                <label for='api_key'>".$this->msg["lastfm_api_key"]."</label>
70                        </div>
71                        <div class='colonne_suite'>
72                                <input type='text' class='saisie-50em' name='api_key' value='".$api_key."'/>
73                        </div>
74                </div>
75                <div class='row'>
76                        <div class='colonne3'>
77                                <label for='secret_key'>".$this->msg["lastfm_secret_key"]."</label>
78                        </div>
79                        <div class='colonne_suite'>
80                                <input type='text' class='saisie-50em' name='secret_key' value='".$secret_key."'/>
81                        </div>
82                </div>
83                <div class='row'>&nbsp;</div>
84                <div class='row'>
85                        <div class='colonne3'>
86                                <label for='callback_url'>".$this->msg["lastfm_callback_url"]."</label>
87                        </div>
88                        <div class='colonne_suite'>
89                                <span>".$url."</span>
90                        </div>
91                </div>
92                <div class='row'>
93                        <div class='colonne3'>
94                                <label for='token'>".$this->msg["lastfm_token"]."</label>
95                        </div>
96                        <div class='colonne_suite'>";
97                if($token != ""){
98                        $form.="
99                                <span>".$this->msg['lastfm_ws_allow_in_progress']."</span>
100                                <input type='hidden' name='token_saved' value='".$token."'/>";
101                }else if($token_saved!=""){
102                        $form.="
103                                <span>".$this->msg['lastfm_ws_allowed']."</span>
104                                <input type='hidden' name='token_saved' value='".$token_saved."'/>";
105                }else if($api_key != ""){
106                        $form.="
107                                <a href='http://www.last.fm/api/auth/?api_key=".$api_key."'>".$this->msg['lastfm_link_allow_ws']."</a>";
108                }else{
109                        $form.="
110                                <span>".$this->msg['lastfm_allow_need_api_key']."</span>";     
111                }
112                $form.="
113                        </div>
114                </div>
115                <div class='row'>&nbsp;</div>
116               
117                <div class='row'>&nbsp;</div>
118                ";
119                return $form;
120    }
121   
122    function make_serialized_source_properties($source_id) {
123        global $api_key,$secret_key,$token_saved;
124        $t=array();
125                $t["api_key"]=$api_key;
126                $t["secret_key"]=$secret_key;   
127                $t["token_saved"]=$token_saved;
128        $this->sources[$source_id]["PARAMETERS"]=serialize($t);
129        }
130       
131        //Récupération  des proriétés globales par défaut du connecteur (timeout, retry, repository, parameters)
132        function fetch_default_global_values() {
133                $this->timeout=5;
134                $this->repository=2;
135                $this->retry=3;
136                $this->ttl=1800;
137                $this->parameters="";
138        }
139       
140         //Formulaire des propriétés générales
141        function get_property_form() {
142                return "";
143        }
144   
145    function make_serialized_properties() {
146        global $accesskey, $secretkey;
147                //Mise en forme des paramètres à partir de variables globales (mettre le résultat dans $this->parameters)
148                $keys = array();
149                $this->parameters = serialize($keys);
150        }
151
152        function enrichment_is_allow(){
153                return true;
154        }
155       
156        function getEnrichmentHeader(){
157$header= array();
158                $header[]= "<!-- Script d'enrichissement LastFM-->";
159                $header[]= "<script type='text/javascript'>
160                function switch_lastfm_page(notice_id,type,page,action){
161                        var pagin= new http_request();
162                        var content = document.getElementById('div_'+type+notice_id);
163                        var patience= document.createElement('img');
164                        patience.setAttribute('src','images/patience.gif');
165                        patience.setAttribute('align','middle');
166                        patience.setAttribute('id','patience'+notice_id);
167                        content.innerHTML = '';
168                        document.getElementById('onglet_'+type+notice_id).appendChild(patience);
169                        page = page*1;
170                        switch (action){
171                                case 'next' :
172                                        page++;
173                                        break;
174                                case 'previous' :
175                                        page--;
176                                        break;
177                        }
178                        pagin.request('./ajax.php?module=ajax&categ=enrichment&action=enrichment&type='+type+'&id='+notice_id+'&enrichPage='+page,false,'',true,gotEnrichment);
179                }
180                </script>";
181                return $header;
182        }
183       
184        function getTypeOfEnrichment($source_id){
185                $type['type'] = array(
186                        "bio",
187                        array(
188                                "code" => "similar_artists",
189                                "label" => "Artistes Similaires"
190                        ),
191                        array(
192                                "code" => "pictures",
193                                "label" => "Photos"
194                        )
195                );             
196                $type['source_id'] = $source_id;
197                return $type;
198        }
199       
200        function getEnrichment($notice_id,$source_id,$type="",$params=array(),$page=1){
201                $enrichment= array();
202                $this->enrichPage = $page;
203                $this->noticeToEnrich = $notice_id;
204                $this->typeOfEnrichment = $type;
205                //on renvoi ce qui est demandé... si on demande rien, on renvoi tout..
206                switch ($type){
207                        case "bio" : 
208                                $enrichment['bio']['content'] = $this->get_artist_biography($source_id);
209                                break;
210                        case "events" : 
211                                $enrichment['events']['content'] = $this->get_artist_events($source_id);
212                                break; 
213                        case "similar_artists" : 
214                                $enrichment['similar_artists']['content'] = $this->get_similar_artists($source_id);
215                                break;
216                        case "pictures" : 
217                                $enrichment['pictures']['content'] = $this->get_pictures($source_id);
218                                break;
219                }               
220                $enrichment['source_label']=$this->msg['lastfm_enrichment_source'];
221                return $enrichment;
222        }
223       
224        function get_notice_infos(){
225                $infos = array();
226                //on va chercher le titre de la notice...
227                $query = "select tit1 from notices where notice_id = ".$this->noticeToEnrich;
228                $result = pmb_mysql_query($query);
229                if(pmb_mysql_num_rows($result)){
230                        $infos['title'] = pmb_mysql_result($result,0,0);
231                }
232                //on va chercher l'auteur principal...
233                $query = "select responsability_author from responsability where responsability_notice =".$this->noticeToEnrich." and responsability_type=0";
234                $result = pmb_mysql_query($query);
235                if(pmb_mysql_num_rows($result)){
236                        $author_id = pmb_mysql_result($result,0,0);
237                        $author = new auteur($author_id);
238                        $infos['author'] = $author->isbd_entry;
239                }
240                return $infos;         
241        }
242       
243       
244        function get_artist_biography($source_id){
245                $this->init_ws($source_id);
246                $bio = $this->api->get_artist_biography();
247        //      highlight_string(print_r($bio,true));
248                if ($bio['content'] != ""){
249                        return utf8_decode(nl2br($bio['content']));
250                }else{
251                        return $this->msg['lastfm_no_informations'];
252                }
253        }
254       
255        function get_similar_artists($source_id){
256                $this->init_ws($source_id);
257                $similar = $this->api->get_similar_artists();
258        //      highlight_string(print_r($similar,true));
259                $html = "
260                <table>";
261                for($i=0 ; $i<count($similar) ; $i++){
262                        if($i%3 == 0){
263                                $html.="
264                        <tr>";
265                        }
266                        $html.= "
267                                <td style='text-align:center;'>
268                                        <a href='".$similar[$i]['url']."' target='_blank'>
269                                                <img src='".$similar[$i]['image']['large']."'/><br/>
270                                                <span>".utf8_decode($similar[$i]['name'])."</span>
271                                        </a>
272                                </td>";
273                       
274                        if($i%3 == 2){
275                                $html.="
276                        </tr>";
277                        }
278                }
279                $html .= "
280                </table>";
281                return $html;
282        }
283       
284        function get_pictures($source_id){
285                global $charset;
286               
287                $this->init_ws($source_id);
288                $pictures = $this->api->get_pictures($this->enrichPage);
289                if($pictures['total']>0){
290                        $html = "
291                        <table>";
292                        for($i=0 ; $i<count($pictures['images']) ; $i++){
293                                if($i%4 == 0){
294                                        $html.="
295                                <tr>";
296                                }
297                                $html.= "
298                                        <td style='text-align:center;'>
299                                                <a href='".$pictures['images'][$i]['url']."' target='_blank' alt='".htmlentities($this->msg['lastfm_see_picture'],ENT_QUOTES,$charset)."' title='".htmlentities($this->msg['lastfm_see_picture'],ENT_QUOTES,$charset)."'>
300                                                        <img src='".$pictures['images'][$i]['sizes']['largesquare']['url']."'/>
301                                                </a>
302                                        </td>";
303                               
304                                if($i%4 == 3){
305                                        $html.="
306                                </tr>";
307                                }
308                        }
309                        $html .= "
310                        </table>";
311                        $html.=$this->get_pagin_form($pictures);
312                }else{
313                        $html = $this->msg['lastfm_no_informations'];
314                }
315                return $html;           
316        }
317       
318        function init_ws($source_id){
319                $params=$this->get_source_params($source_id);
320                if ($params["PARAMETERS"]) {
321                        //Affichage du formulaire avec $params["PARAMETERS"]
322                        $vars=unserialize($params["PARAMETERS"]);
323                        foreach ($vars as $key=>$val) {
324                                global $$key;
325                                $$key=$val;
326                        }       
327                }
328                $authVars['apiKey'] = $api_key;
329                $authVars['secret'] = $secret_key;
330                $authVars['token'] = $token_saved;
331               
332                $this->api = new lastfm_api($authVars);
333                $this->api->set_notice_infos($this->get_notice_infos());
334        }
335       
336        function get_pagin_form($infos){
337                $current = $infos['page'];
338                $ret = "";
339                if($current>0){
340                        $nb_page = ceil($infos['total']/20);
341                        if($current > 1) $ret .= "<img src='images/prev.gif' onclick='switch_lastfm_page(\"".$this->noticeToEnrich."\",\"".$this->typeOfEnrichment."\",\"".$current."\",\"previous\");'/>";
342                        else $ret .= "<img src='images/prev-grey.gif'/>";
343                        $ret .="&nbsp;".$current."/$nb_page&nbsp;";
344                        if($current < $nb_page) $ret .= "<img src='images/next.gif' onclick='switch_lastfm_page(\"".$this->noticeToEnrich."\",\"".$this->typeOfEnrichment."\",\"".$current."\",\"next\");' style='cursor:pointer;'/>";
345                        else $ret .= "<img src='images/next-grey.gif'/>";
346                        $ret = "<div class='row'><center>$ret</center></div>";
347                }
348                return $ret;
349        }       
350}
351?>
Note: See TracBrowser for help on using the repository browser.