Ankündigung

Einklappen
Keine Ankündigung bisher.

19000666 - last.fm Cover

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    19000666 - last.fm Cover

    Hallo!

    Ich hatte das Problem, dass ich mit o.g. LBS keine bzw sehr selten Cover zu sehen bekam. Fehler bei mir war, dass nach dem teilen der Strings, am Ende meist ein Leerzeichen kam. Ich hab das direkt im LBS geändert:

    aus
    Code:
        // Hole Album URI mit Titel
        $artist = urlencode($E[4]['value']);
        $track = urlencode($E[6]['value']);
    wurde bspw. somit
    Code:
        // Hole Album URI mit Titel
        $artist = urlencode(trim($E[4]['value']));
        $track = urlencode(trim($E[6]['value']));
    Falls jemand ähnliche Probleme hat oder der Ersteller des LBS mal eine Update fahren möchte ;-)

    Grüße
    David

    #2
    Hallo David,

    danke für den Hinweis, ich habe die Trim-Funktion ergänzt und eine neue Version 0.2 des Cover LBS 19000666 hochgeladen.
    Zuletzt geändert von panzaeron; 05.11.2018, 20:53.

    Kommentar


      #3
      Hallo,

      leider bekomme ich aktuell keine Artist Bilder mehr (nur so einen Stern), geht das nur mir so? Bei der Gelegenheit habe ich mir die API angesehen und festgestellt, dass da ja noch jede Menge andere Info mit kommen. Hätte jetzt mal die Text-Infos ergänzt und da sie keine Performance fressen meine Frage, ob du das in deinen Baustein mit aufnehmen möchtet.

      Winni

      Code:
      ###[DEF]###
      [name         = Last.fm Cover            ]
      [e#1 trigger = Trigger                  ]
      [e#2 option  = Debug         #init=0    ]
      [e#3 require = API-Key                  ]
      [e#4 trigger = Artist                     ]
      [e#5 trigger = Album                     ]
      [e#6 trigger = Title                    ]
      [e#7           = Default URI     #init=https://upload.wikimedia.org/wikipedia/commons/c/ca/1x1.png            ]
      [e#8         = Sprache         #init=DE    ]
      
      [a#1        = Error                      ]
      [a#2        = Artist small               ]
      [a#3        = Artist medium             ]    
      [a#4        = Artist max                  ]
      [a#5        = Artist MBID                ]
      [a#6        = Album small                  ]
      [a#7        = Album medium                  ]
      [a#8        = Album max                  ]    
      [a#9        = Album MBID                ]    
      [a#10        = Artist Summary            ]
      [a#11        = Artist Content            ]    
      [a#12        = Album Summary             ]
      [a#13        = Album Content                ]    
      [a#14        = Title Summary             ]
      [a#15        = Title Content                ]
      [a#16        = ermitteltes Album        ]    
      
      [v#1=0                   ] Baustein aktiv
      [v#2=0                   ] Vorherige Eingangswerte
      [v#3=0                   ] Suchbegriffe
      ###[/DEF]###
      
      ###[HELP]###
      Dieser LBS ermittelt mit der Last.fm API die URI von Album und Künstler Bildern  
      
      Für den Zugriff wird ein API-Key benötigt der kostenfrei bei Last.fm erhältlich ist:
      <a href="https://www.last.fm/api/account/create" target="_blank">https://www.last.fm/api/account/create</a>
      
      E1:  Triggert den Baustein
      E2:  Debug-Ausgabe aktivieren
      E3:  API-Key für die Last.fm API
      E4:  Name des Künstlers, für eine erfolgreiche suche wird dieser immer benötigt
      E5:  Name des Albums
      E6:  Name des Titels
      E7:  URI für ein Bild wenn der Abruf nicht erfolgreich ist (Default ist ein Transparentes 1x1 Bild)
      E8:     Sprache for Künstlerbeschreibung
        
      A1:  Bei einem Fehler wird der Ausgang auf 1 gesetzt
      
      A2:  URI für ein kleines Bild des Künstler
      A3:  URI für ein mittle großes Künstlerbild
      A4:  URI für ein großes Bild des Künstler
      A5:     MBID für Künstler
      A6:  URI für ein kleines Bild des Album Covers
      A7:  URI für ein mittelgroßes Bild des Album Covers
      A8:  URI für ein großes Bild des Album Covers
      A9:  MBID für das Album
      A10: Zusammenfassung Künstlerinfo
      A11: Künstlerinfo (max. 10kByte)
      A12: Zusammenfassung Album
      A13: Albuminfo (max. 10kByte)
      A14: Zusammenfassung Titelinfo
      A15: Titelinfoinfo (max. 10kByte)
      A16: Albumtitel (falls nicht angegeben)
      ###[/HELP]###
      
      
      ###[LBS]###
      <?
      function LB_LBSID($id) {
          if ($E = logic_getInputs($id)) {
              if (empty($E[3]['value'])) {
                  LB_LBSID_debug($id,"Fehler! API-Key an E3 fehlt!",0);
              } else {
                  logic_setState($id,0);                              // Den LBS nicht zyklisch aufrufen
                  if (!empty($E[4]['value']) && ($E[1]['refresh'] == 1 || $E[4]['refresh'] == 1 || $E[5]['refresh'] == 1 || $E[6]['refresh'] == 1)) {
                      LB_LBSID_debug($id," function LB_LBSID starting EXEC",7);
                      if (logic_getVar($id,1) != 1) {
                          logic_callExec(LBSID,$id);                  // EXEC-Script starten
                      }
                  }
              }
          }
      }
      
      function LB_LBSID_debug($id, $s, $l) {
          $E=logic_getInputs($id);
          $DEBUG=$E[5]['value'];
          $l<=$DEBUG && writeToCustomLog("Last.fm Cover Search",$l,"(ID$id): ".$s);
      }
      ?>
      ###[/LBS]###
      
      ###[EXEC]###
      <?
      require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
      sql_connect();
      set_time_limit(30); // Maximale Laufzeit
      
      // Baustein aktiv
      logic_setVar($id,1,1);
      
      // Um den Eintrag im Fehlerlog zu vermeiden, wenn last.fm api nicht erreichbar ist.
      // Die folgende Zeile auskommentieren falls ein Fehlereintrag erwünscht ist.
      // turn off the errors
      $error_handler = set_error_handler("myErrorHandler");
      error_reporting(0);
      
      $E = logic_getInputs($id);
      $V = explode('|', logic_getVar($id,2));
      
      //Bildgröße: "small" => 0, "medium" => 1, "large" => 2, "extralarge" => 3, "mega" => 4
      
      // HTML Entities dekodieren
      if (!isEmpty($E[4]['value'])) $E[4]['value'] = html_entity_decode($E[4]['value'], ENT_QUOTES | ENT_XML1, 'UTF-8');
      if (!isEmpty($E[5]['value'])) $E[5]['value'] = html_entity_decode($E[5]['value'], ENT_QUOTES | ENT_XML1, 'UTF-8');
      if (!isEmpty($E[6]['value'])) $E[6]['value'] = html_entity_decode($E[6]['value'], ENT_QUOTES | ENT_XML1, 'UTF-8');
      
      // Klammern ggf. entfernen
      if (!isEmpty($E[4]['value'])) $E[4]['value'] = preg_replace("/\(.*\)/U","", $E[4]['value']);
      if (!isEmpty($E[5]['value'])) $E[5]['value'] = preg_replace("/\(.*\)/U","", $E[5]['value']);
      if (!isEmpty($E[6]['value'])) $E[6]['value'] = preg_replace("/\(.*\)/U","", $E[6]['value']);
      
      // feat bzw ; entfernen
      if (!isEmpty($E[4]['value'])) $E[4]['value'] = preg_replace("/ feat.*/","", $E[4]['value']);
      if (!isEmpty($E[4]['value'])) $E[4]['value'] = preg_replace("/;.*/","", $E[4]['value']);
      
      logic_setVar($id,3,'Künstler: '.$E[4]['value'].', Titel: '.$E[6]['value'].', Album: '.$E[5]['value']);
      
      if ($E[4]['value'] != $V[0]) {
          // Hole Künstler URI
          $artist = urlencode(trim($E[4]['value']));
          $xml = "http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&lang={$E[8]['value']}&artist={$artist}&autocorrect=1&api_key=".$E[3]['value'];
          $xml = @file_get_contents($xml);
                          
          if(!$xml) {
              debug($id, "Künstlerbild nicht gefunden: ".$artist, 6);
              logic_setOutput($id, 2, $E[7]['value']);
              logic_setOutput($id, 3, $E[7]['value']);
              logic_setOutput($id, 4, $E[7]['value']);
          } else {
              $xml = new SimpleXMLElement($xml);
              $xml = $xml->artist;
              $artist_mbid = $xml->mbid;
              
              for ($i=4;$i>=0;$i--) {
                  if (isset($xml->image[$i])) $artist_small = $xml->image[$i];
              }
              for ($i=0;$i<=2;$i++) {
                  if (isset($xml->image[$i])) $artist_medium = $xml->image[$i];
              }
              $artist_max = $xml->image[count($xml->image)-1];
              // Holen Content und Summary
              $xml = $xml->bio;
              $artist_summary = $xml->summary;
              $artist_content = $xml->content;
              if (!isset($artist_summary)) $artist_summary = '';
              logic_setOutput($id, 10, $artist_summary);
              if (!isset($artist_content)) $artist_content = '';
              logic_setOutput($id, 11, $artist_content);
              if (isset($artist_mbid)) { logic_setOutput($id, 5, $artist_mbid); }
              if (isset($artist_small)) {
                  logic_setOutput($id, 2, $artist_small);
                  logic_setOutput($id, 3, $artist_medium);
                  logic_setOutput($id, 4, $artist_max);
              } else {
                  logic_setOutput($id, 2, $E[7]['value']);
                  logic_setOutput($id, 3, $E[7]['value']);
                  logic_setOutput($id, 4, $E[7]['value']);
              }
          }
      }
      
      if ($E[6]['value'] != $V[2]) {
          // Hole Album URI mit Titel
          $artist = urlencode(trim($E[4]['value']));
          $track = urlencode(trim($E[6]['value']));
          $xml    = "http://ws.audioscrobbler.com/2.0/?method=track.getinfo&lang={$E[8]['value']}&artist={$artist}&track={$track}&autocorrect=1&api_key=".$E[3]['value'];
          $xml = @file_get_contents($xml);
                          
          if(!$xml) {
              debug($id, "Albumbild mit Titelsuche nicht gefunden: ".$track, 6);
              logic_setOutput($id, 6, $E[7]['value']);
              logic_setOutput($id, 7, $E[7]['value']);
              logic_setOutput($id, 8, $E[7]['value']);
          } else {
              $xml = new SimpleXMLElement($xml);
              $xml = $xml->track;
              $savexml = $xml;
              $xml = $xml->album;
              $album_mbid = $xml->mbid;
              $album_title = $xml->title;
      
              for ($i=count($xml->image)-1;$i>=0;$i--) {
                  if (isset($xml->image[$i])) $album_small = $xml->image[$i];
              }
              
              $i_max = 2;
              if (count($xml->image)<=2) $i_max = count($xml->image);
              for ($i=0;$i<=$i_max;$i++) {
                  if (isset($xml->image[$i])) $album_medium = $xml->image[$i];
              }
              
              $album_max = $xml->image[count($xml->image)-1];
      
              $xml = $savexml->wiki;
              $title_summary = $xml->summary;
              $title_content = $xml->content;
              if (!isset($title_summary)) $title_summary = '';
              logic_setOutput($id, 14, $title_summary);
              if (!isset($title_content)) $title_content = '';
              logic_setOutput($id, 15, $title_content);
              
              if (isset($album_mbid)) { logic_setOutput($id, 9, $album_mbid); }
              if (isset($album_small)) {
                  logic_setOutput($id, 6, $album_small);
                  logic_setOutput($id, 7, $album_medium);
                  logic_setOutput($id, 8, $album_max);
              } else {
                  logic_setOutput($id, 6, $E[7]['value']);
                  logic_setOutput($id, 7, $E[7]['value']);
                  logic_setOutput($id, 8, $E[7]['value']);
              }
          }    
      }
      
      if (count($E[5]['value']) > 2) $album_title = $E[5]['value'];
      
      if ($album_title != $V[1]) {
          // Hole Album URI
          $artist = urlencode(trim($E[4]['value']));
          $album = urlencode(trim($album_title));
          $xml = "http://ws.audioscrobbler.com/2.0/?method=album.getinfo&lang={$E[8]['value']}&artist={$artist}&album={$album}&autocorrect=1&api_key=".$E[3]['value'];
          $xml = @file_get_contents($xml);
                          
          if(!$xml) {
              debug($id, "Albumbild mit Album nicht gefunden: ".$album, 6);
              logic_setOutput($id, 6, $E[7]['value']);
              logic_setOutput($id, 7, $E[7]['value']);
              logic_setOutput($id, 8, $E[7]['value']);
          } else {
              $xml = new SimpleXMLElement($xml);
              $xml = $xml->album;
              $album_mbid = $xml->mbid;
              
              for ($i=count($xml->album)-1;$i>=0;$i--) {
                  if (isset($xml->image[$i])) $album_small = $xml->image[$i];
              }
              $i_max = 2;
              if (count($xml->album)<=2) $i_max = count($xml->album);
              for ($i=0;$i<$i_max;$i++) {
                  if (isset($xml->image[$i])) $album_medium = $xml->image[$i];
              }
              $album_max = $xml->image[count($xml->image)-1];
      
      
              $xml = $xml->wiki;
              $album_summary = $xml->summary;
              $album_content = $xml->content;
              if (!isset($album_summary)) $album_summary = '';
              logic_setOutput($id, 12, $album_summary);
              if (!isset($album_content)) $album_content = '';
              logic_setOutput($id, 13, $album_content);
              
              
              if (isset($album_mbid)) { logic_setOutput($id, 9, $album_mbid); }
              if (isset($album_small)) {
                  logic_setOutput($id, 6, $album_small);
                  logic_setOutput($id, 7, $album_medium);
                  logic_setOutput($id, 8, $album_max);
              } else {
                  logic_setOutput($id, 6, $E[7]['value']);
                  logic_setOutput($id, 7, $E[7]['value']);
                  logic_setOutput($id, 8, $E[7]['value']);
              }
          }
      };
      
      logic_setOutput($id, 16, $album_title);
      logic_setVar($id,2,$E[4]['value'].'|'.$album_title.'|'.$E[6]['value']);
      
      function myErrorHandler($errno, $errstr, $errfile, $errline) {
          // debug($id, "File: $errfile | Error: $errno | Line: $errline | $errstr ");
      }
      
      function debug($id,$s,$l) {
          $E=logic_getInputs($id);
          $DEBUG=$E[2]['value'];
          $l<=$DEBUG && writeToCustomLog("Last.fm Cover (LBSLBSID)", $l, "(ID$id) : ".$s);
      }
      
      // Baustein nicht aktiv
      logic_setVar($id,1,0);
      
      sql_disconnect();   // Datenbankverbindung schließen
      ?>
      ###[/EXEC]###
      Zuletzt geändert von Winni; 24.05.2019, 22:37. Grund: Upgedatet mit Ausgabe Album-Titel (auch wenn am Eingang nicht angegeben)

      Kommentar


        #4
        Hallo Winni,

        ja, nehme ich mit auf, danke für die Erweiterung.

        Kommentar


          #5
          Habe den Baustein aktualisiert, danke Winni.

          Bei mir wird auch der Stern als Künstlerbild zurück gegeben, da ich dieses nicht nutze habe ich es noch gar nicht gemerkt...

          Kommentar


            #6
            Hmm, schade, ich habe das gerne mit genutzt.... Mal sehen ob sich das wieder gibt, ist ja bei jedem Künstler so.
            Der Upload scheint schief gegangen zu sein, die neuen Ein-/Ausgänge sind auf alle Fälle nicht vorhanden, oder dauert das immer?

            Kommentar


              #7
              Stimmt, ich habe zwar die Beschreibung aktualisiert und dann vergessen den geänderten Quelltext einzufügen... jetzt ist es online

              Kommentar

              Lädt...
              X