# kch_lastfm_recently v0.5.1 # Add your recently played tracks from last.fm to your website. # Kevin Chabowski # http://kch42.de/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6NToiMC41LjEiO3M6NjoiYXV0aG9yIjtzOjE1OiJLZXZp biBDaGFib3dza2kiO3M6MTA6ImF1dGhvcl91cmkiO3M6MTY6Imh0dHA6Ly9rY2g0Mi5kZS8i O3M6MTE6ImRlc2NyaXB0aW9uIjtzOjYxOiJBZGQgeW91ciByZWNlbnRseSBwbGF5ZWQgdHJh Y2tzIGZyb20gbGFzdC5mbSB0byB5b3VyIHdlYnNpdGUuIjtzOjQ6InR5cGUiO2k6MDtzOjQ6 Im5hbWUiO3M6MTk6ImtjaF9sYXN0Zm1fcmVjZW50bHkiO3M6NDoiaGVscCI7czozNDc2OiIJ PGgxPmtjaF9sYXN0Zm1fcmVjZW50bHk8L2gxPgoKCTxwPlJldHVybnMgYSB1bnNvcnRlZCBs aXN0IG9mIHlvdXIgcmVjZW50bHkgbGlzdGVuZWQgc29uZ3MuPC9wPgoKCTxoMj5Vc2FnZTwv aDI+CgoJPHA+SW5zZXJ0IHRoaXMgdHhwIHRhZyB0byB5b3VyIHRlbXBsYXRlOjxiciAvPgo8 Y29kZT4mbHQ7dHhwOmtjaF9sYXN0Zm1fcmVjZW50bHkgLyZndDs8L2NvZGU+PC9wPgoKCTxw PkhlcmUgaXMgYSB0YWJsZSBvZiBwYXJhbWV0ZXJzOjwvcD4KCgk8dGFibGU+CgkJPHRyPgoJ CQk8dGg+UGFyYW1ldGVyPC90aD4KCQkJPHRoPk5lZWRlZDwvdGg+CgkJCTx0aD5EZWZhdWx0 PC90aD4KCQkJPHRoPkV4cGxhbmF0aW9uPC90aD4KCQk8L3RyPgoJCTx0cj4KCQkJPHRkPm5h bWU8L3RkPgoJCQk8dGQ+WWVzPC90ZD4KCQkJPHRkPjxjb2RlPiA8L2NvZGU+PC90ZD4KCQkJ PHRkPllvdXIgbGFzdC5mbSBhY2NvdW50IG5hbWU8L3RkPgoJCTwvdHI+CgkJPHRyPgoJCQk8 dGQ+Y291bnQ8L3RkPgoJCQk8dGQ+Tm88L3RkPgoJCQk8dGQ+MzwvdGQ+CgkJCTx0ZD5Ib3cg bWFueSBzb25ncyBzaG91bGQgYmUgbGlzdGVkPC90ZD4KCQk8L3RyPgoJCTx0cj4KCQkJPHRk PmNvdmVyPC90ZD4KCQkJPHRkPk5vPC90ZD4KCQkJPHRkPjE8L3RkPgoJCQk8dGQ+V2hldGhl ciBhbGJ1bSBjb3ZlcnMgc2hvdWxkIGJlIGRpc3BsYXllZCwgb3Igbm90PC90ZD4KCQk8L3Ry PgoJCTx0cj4KCQkJPHRkPnRyYWNrX2Zvcm1hdDwvdGQ+CgkJCTx0ZD5ObzwvdGQ+CgkJCTx0 ZD57YXJ9ICYjODIxMTsge3N9ICh7dH0pPC90ZD4KCQkJPHRkPkZvcm1hdCBvZiB0cmFjayBp bmZvcm1hdGlvbiAoU2VlIGJleW9uZCk8L3RkPgoJCTwvdHI+CgkJPHRyPgoJCQk8dGQ+ZGF0 ZV9mb3JtYXQ8L3RkPgoJCQk8dGQ+Tm88L3RkPgoJCQk8dGQ+JWQgJWggJVkgJUg6JU06JVM8 L3RkPgoJCQk8dGQ+VGltZS9EYXRlIGZvcm1hdCBhcyB1c2VkIGJ5IHN0cmZ0aW1lPHN1cCBj bGFzcz0iZm9vdG5vdGUiPjxhIGhyZWY9IiNmbjE2MTUzODc0NzU0YzU2OTZlMTMzODAzIj4x PC9hPjwvc3VwPjwvdGQ+CgkJPC90cj4KCQk8dHI+CgkJCTx0ZD5jYWNoaW5nPC90ZD4KCQkJ PHRkPk5vPC90ZD4KCQkJPHRkPjE8L3RkPgoJCQk8dGQ+U2hvdWxkIHdlIGVuYWJsZSBjYWNo aW5nPyAoU2VlIHNlY3Rpb24gY2FjaGluZyk8L3RkPgoJCTwvdHI+Cgk8L3RhYmxlPgoKCTxw PkFuZCBoZXJlIGlzIGEgbGlzdCBvZiA8c3Ryb25nPnRyYWNrX2Zvcm1hdDwvc3Ryb25nPiB0 b2tlbnMgKGNhc2Ugc2Vuc2l0aXZlKToKCTx1bD4KCQk8bGk+PGNvZGU+e2FyfTwvY29kZT4g JiM4MjExOyAqQXIqdGlzdDwvbGk+CgkJPGxpPjxjb2RlPntzfTwvY29kZT4gJiM4MjExOyAq UypvbmcgbmFtZTwvbGk+CgkJPGxpPjxjb2RlPnthbH08L2NvZGU+ICYjODIxMTsgKkFsKmJ1 bSBuYW1lICggd2lsbCB0dXJuIHRvICYjODIyMDsoPykmIzgyMjE7LCBpZiBBbGJ1bSBpcyB1 bmtub3duKTwvbGk+CgkJPGxpPjxjb2RlPnt0fTwvY29kZT4gJiM4MjExOyBUaGUgKlQqaW1l LCB5b3UmIzgyMTc7dmUgbGlzdGVuZWQgdG8gdGhlIHNvbmc8L2xpPgoJPC91bD48L3A+CgoJ PGgyPk91dHB1dDwvaDI+CgoJPHA+VGhlIG91dHB1dCB3aWxsIGJlIGEgdW5zb3J0ZWQgbGlz dCAoPGNvZGU+Jmx0O3VsJmd0OyAuLi4gJmx0Oy91bCZndDs8L2NvZGU+KSB3aXRoIHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyA8Y29kZT5rY2hfbGFzdGZtX3Jl Y2VudGx5PC9jb2RlPiAuPGJyIC8+ClRoZSBzaW5nbGUgbGlzdCBlbGVtZW50cyBoYXZlIHRo aXMgZm9ybWF0OjwvcD4KCjxwcmU+PGNvZGU+Jmx0O2xpJmd0OwogICZsdDtpbWcgc3JjPSZx dW90O2h0dHA6Ly9sYXN0Zm0tb3ItYW1hem9uLXNlcnZlci5mb28vcGF0aC90by9pbWFnZSZx dW90OyBhbHQ9JnF1b3Q7QWxidW0gY292ZXImcXVvdDsgc3R5bGU9JnF1b3Q7d2lkdGg6NjBw eDtoZWlnaHQ6NjBweDsmcXVvdDsgLyZndDsKICAmbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly9s YXN0LmZtL3BhdGgvdG8vc29uZy9pbmZvcm1hdGlvbnMmcXVvdDsmZ3Q7VGhlIHBhcnNlZCB0 cmFja19mb3JtYXQmbHQ7L2EmZ3Q7Jmx0Oy9saSZndDsmcXVvdDs7CiZsdDsvbGkmZ3Q7Cjwv Y29kZT48L3ByZT4KCgk8aDI+SGlkZGVuIGVycm9yczwvaDI+CgoJPHA+SWYgc29tZXRoaW5n IHdlbnQgd3JvbmcsIDxjb2RlPiZsdDt0eHA6a2NoX2xhc3RmbV9yZWNlbnRseSAvJmd0Ozwv Y29kZT4gd2lsbCBub3QgZGlzcGxheWluZyBhbnl0aGluZywgYnV0IGl0IHdpbGwgd3JpdGUg YW4gPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGNvbW1lbnQgd2l0aCBhbiBlcnJv cm1lc3NhZ2UuIFNvIGlmIHlvdSBjYW4gbm90IHNlZSBhbnl0aGluZywgZmlyc3QgY2hlY2sg dGhlIHJldHVybmVkIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBjb2RlLCBpZiB0 aGVyZSBpcyBhIGNvbW1lbnQgd2l0aCBhbiBlcnJvciBtZXNzYWdlLjwvcD4KCgk8aDI+Q2Fj aGluZzwvaDI+CgoJPHA+SWYgeW91IGhhdmUgZW5hYmxlZCBjYWNoaW5nLCBrY2hfbGFzdGZt X3JlY2VudGx5IHdpbGwgc2F2ZSB0aGUgcmVzdWx0cyB0byAmIzgyMjA7L215L3RleHRwYXR0 ZXJuL2luc3RhbGxhdGlvbi90ZXh0cGF0dGVybi9jYWNoZSYjODIyMTsuPGJyIC8+ClNvIGlm IHlvdSB3YW50IHRvIHVzZSBjYWNoaW5nLCB5b3UgaGF2ZSB0byBjcmVhdGUgYSBkaXJlY3Rv cnkgY2FsbGVkICYjODIyMDtjYWNoaW5nJiM4MjIxOyBpbnNpZGUgdGhlIHRleHRwYXR0ZXJu IGRpcmVjdG9yeSBhbmQgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFuPiBzZXJ2 ZXIgbXVzdCBoYXZlIHdyaXRlIHBlcm1pc3Npb24gdG8gaXQuPGJyIC8+ClJlc3VsdHMgYXJl IGNhY2hlZCBmb3Igb25lIG1pbnV0ZS4gSWYgeW91IGhhdmUgbXVsdGlwbGUgPGNvZGU+Jmx0 O3R4cDprY2hfbGFzdGZtX3JlY2VudGx5IC8mZ3Q7PC9jb2RlPiB0YWdzIHdpdGggZGlmZmVy ZW50IGNvbmZpZ3VyYXRpb25zLCB0aGlzIGlzIG5vdCBhIHByb2JsZW0sIGJlY2F1c2UgdGhl IGNhY2hlIGZpbGUgZ2V0cyBhIHVuaXF1ZSBpZGVudGlmaWVyIGJhc2VkIG9uIHRoZSBwYXJh bWV0ZXJzLjxiciAvPgpJZiB5b3UgaGF2ZSB0aGUgcG9zc2liaWxpdHkgdG8gY3JlYXRlIHRo ZSBjYWNoZSBkaXJlY3RvcnkgYW5kIHNldCB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMsIHlv dSByZWFsbHkgc2hvdWxkIHVzZSB0aGlzIGZlYXR1cmUsIGJlY2F1c2UgdGhlIGxhc3QuZm0g PHNwYW4gY2xhc3M9ImNhcHMiPkFQSTwvc3Bhbj4gY2FsbHMgY2FuIGdlbmVyYXRlIGEgbG90 IG9mIHRyYWZmaWMsIGlmIHlvdXIgd2Vic2l0ZSBoYXMgbXVjaCBoaXRzLjwvcD4KCgk8cCBp ZD0iZm4xNjE1Mzg3NDc1NGM1Njk2ZTEzMzgwMyIgY2xhc3M9ImZvb3Rub3RlIj48c3VwPjE8 L3N1cD4gRG9jdW1lbnRhdGlvbiBvZiA8YSBocmVmPSJodHRwOi8vcGhwLm5ldC9zdHJmdGlt ZSI+c3RyZnRpbWU8L2E+PC9wPiI7czo0OiJjb2RlIjtzOjMyOTE6IgovKiBGb3IgaW50ZXJu YWwgdXNlIG9ubHkuLi4gKi8KZnVuY3Rpb24ga2NoX0lOVEVSTkFMX2xhc3RmbV9hcGlfY2Fs bCgkZnVuY3Rpb24sICRwYXJhbXMpCnsKCS8qIFByZXBhcmUgdGhlIEFQSSBjYWxsICovCgkk YXBpX2NhbGxfdXJsID0gImh0dHA6Ly93cy5hdWRpb3Njcm9iYmxlci5jb20vMi4wLz9tZXRo b2Q9JGZ1bmN0aW9uIjsKCSRwYXJhbXNbJ2FwaV9rZXknXSA9ICI2OGEwMjQzYTllZWYyMWY5 Mjc2NjgwMGEwODRjNTY2YyI7Cglmb3JlYWNoKCRwYXJhbXMgYXMgJHBfa2V5ID0+ICRwX3Zh bHVlKQoJCSRhcGlfY2FsbF91cmwgLj0gIiYkcF9rZXk9Ii51cmxlbmNvZGUoJHBfdmFsdWUp OwoKCSRyYXdfcmVzcG9uc2UgPSBAZmlsZV9nZXRfY29udGVudHMoJGFwaV9jYWxsX3VybCk7 CglyZXR1cm4gJHJhd19yZXNwb25zZT09ZmFsc2UgPyAgZmFsc2UgOiBuZXcgU2ltcGxlWE1M RWxlbWVudCgkcmF3X3Jlc3BvbnNlKTsKfQoKZnVuY3Rpb24ga2NoX2xhc3RmbV9yZWNlbnRs eSgkYXR0cykKewoJJHBsdWdpbl9wYXJhbXMgPSBsQXR0cyhhcnJheSgKCQkibmFtZSIgPT4g IiIsCgkJImNvdW50IiA9PiAiMyIsCgkJImNvdmVyIiA9PiAiMSIsCgkJInRyYWNrX2Zvcm1h dCIgPT4gInthcn0gLSB7c30gKHt0fSkiLAoJCSJkYXRlX2Zvcm1hdCIgPT4gIiVkICVoICVZ ICVIOiVNOiVTIiwKCQkiY2FjaGluZyIgPT4gIjEiCgkpLCAkYXR0cyk7CgoJJGltZ19kZWZh dWx0ID0gImh0dHA6Ly9jZG4ubGFzdC5mbS9mbGF0bmVzcy9jYXRhbG9ndWUvbm9pbWFnZS8y L2RlZmF1bHRfYXJ0aXN0X21lZ2EucG5nIjsKCgkvKiBDaGVjayBhdHRyaWJ1dGVzICovCglp ZihlbXB0eSgkcGx1Z2luX3BhcmFtc1snbmFtZSddICkpCgkJcmV0dXJuICI8IS0tIGxhc3Rm bS1wbHVnaW46IEludmFsaWQgcGFyYW1zIC0tPiI7Cglmb3JlYWNoKGFycmF5KCdjb3VudCcs J2NvdmVyJywnY2FjaGluZycpIGFzICR0ZXN0bWUpCgkJaWYoIWlzX251bWVyaWMoJHBsdWdp bl9wYXJhbXNbJHRlc3RtZV0pKQoJCQlyZXR1cm4gIjwhLS0gbGFzdGZtLXBsdWdpbjogSW52 YWxpZCBwYXJhbXMgLS0+IjsKCgkvKiBnZXQgY2FjaGVkIGRhdGEgKGlmIGF2YWlsYWJsZSBh bmQgbm90IHRvbyBvbGQpICovCglpZigkcGx1Z2luX3BhcmFtc1snY2FjaGluZyddKQoJewoJ CSRjYWNoZV9maWxlbmFtZSA9IGdldGN3ZCgpIC4gJy90ZXh0cGF0dGVybi9jYWNoZS9rY2hf bGFzdGZtX3JlY2VudGx5XycgLiBtZDUoaW1wbG9kZSgnOicsJHBsdWdpbl9wYXJhbXMpKTsK CQlpZihmaWxlX2V4aXN0cygkY2FjaGVfZmlsZW5hbWUpIGFuZCAoZmlsZW10aW1lKCRjYWNo ZV9maWxlbmFtZSk+KHRpbWUoKS02MCkpKQoJCQlyZXR1cm4gZmlsZV9nZXRfY29udGVudHMo JGNhY2hlX2ZpbGVuYW1lKTsKCX0KCgkkb3V0cHV0ID0gJzx1bCBjbGFzcz0ia2NoX2xhc3Rm bV9yZWNlbnRseSI+JzsKCSRjb3VudCA9IDA7IC8qIFdlIGhhdmUgdG8gY291bnQgYWxsIGVu dHJpZXMsIGJlY2F1c2UgbGFzdC5mbSBzb21ldGltZXMgc2VuZCBtb3JlIHRyYWNrcyAqLwoK CSRsYXN0Zm1fcXVlcnlfcmVzdWx0ID0ga2NoX0lOVEVSTkFMX2xhc3RmbV9hcGlfY2FsbCgi dXNlci5nZXRSZWNlbnRUcmFja3MiLCBhcnJheSgKCQkidXNlciIJPT4gJHBsdWdpbl9wYXJh bXNbJ25hbWUnXSwKCQkibGltaXQiCT0+ICRwbHVnaW5fcGFyYW1zWydjb3VudCddKQoJKTsK CWlmKCRsYXN0Zm1fcXVlcnlfcmVzdWx0ID09IGZhbHNlKQoJCXJldHVybiAiPCEtLSBsYXN0 Zm0tcGx1Z2luOiBmYWlsZWQgdG8gY2FsbCBsYXN0LmZtLiBjb3JyZWN0IHVzZXJuYW1lPyAt LT4iOwoKCWZvcmVhY2goJGxhc3RmbV9xdWVyeV9yZXN1bHQtPnJlY2VudHRyYWNrcy0+dHJh Y2sgYXMgJHRyYWNrKQoJewoJCWlmKCRjb3VudCsrID09ICRwbHVnaW5fcGFyYW1zWydjb3Vu dCddKQoJCQlicmVhazsKCgkJJGRfYWxidW0gPSBlbXB0eSgkdHJhY2stPmFsYnVtKSA/ICco PyknIDogJHRyYWNrLT5hbGJ1bTsKCgkJLyogR2V0IGFsYnVtIGNvdmVyIG9yLCBpZiBub3Qg YXZhaWxhYmxlLCBhIHBpY3R1cmUgb2YgdGhlIGFydGlzdC4gKi8KCQlpZighZW1wdHkoJHRy YWNrLT5pbWFnZSkpCgkJCSRkX2ltYWdlID0gJHRyYWNrLT5pbWFnZVsxXTsKCQllbHNlCgkJ ewoJCQlpZighKCRhcnRpc3RfaW1hZ2VfcHJlID0ga2NoX0lOVEVSTkFMX2xhc3RmbV9hcGlf Y2FsbCgiYXJ0aXN0LmdldEluZm8iLCAgYXJyYXkoCgkJCQkiYXJ0aXN0IiA9PiAkdHJhY2st PmFydGlzdAoJCQkpKSkpCgkJCQkkZF9pbWFnZSA9ICRpbWdfZGVmYXVsdDsKCQkJZWxzZQoJ CQkJJGRfaW1hZ2UgPSAhZW1wdHkoJGFydGlzdF9pbWFnZV9wcmUtPmFydGlzdC0+aW1hZ2Up ID8gJGFydGlzdF9pbWFnZV9wcmUtPmFydGlzdC0+aW1hZ2VbMV0gOiAkaW1nX2RlZmF1bHQ7 CgkJfQoKCQkkZGF0ZXRleHQgPSAkdHJhY2stPmRhdGVbInV0cyJdID4gMCA/IEBzdHJmdGlt ZSgkcGx1Z2luX3BhcmFtc1snZGF0ZV9mb3JtYXQnXSwkdHJhY2stPmRhdGVbInV0cyJdKzAp IDogJyAnOwoKCQkvKiBXQVJOSU5HOiBUaGUgZm9sbG93aW5nIGNvbW1hbmQgaXMgKnZlcnkq IHVnbHkhICovCgkJJGluZm90ZXh0ID0gc3RyX3JlcGxhY2UoYXJyYXkoCgkJCSJ7YXJ9Iiwg IntzfSIsICJ7YWx9IiwgInt0fSIpLCBhcnJheSgKCQkJJHRyYWNrLT5hcnRpc3QsICR0cmFj ay0+bmFtZSwgJGRfYWxidW0sICRkYXRldGV4dCksCgkJCSRwbHVnaW5fcGFyYW1zWyd0cmFj a19mb3JtYXQnXSk7CgkJJHNvbmdfdXJsID0gJHRyYWNrLT51cmw7CgkJJG91dHB1dCAuPSAi PGxpPiI7CgkJaWYoJHBsdWdpbl9wYXJhbXNbJ2NvdmVyJ10pCgkJCSRvdXRwdXQgLj0gIjxp bWcgc3JjPVwiJGRfaW1hZ2VcIiBhbHQ9XCJBbGJ1bSBjb3ZlclwiIHN0eWxlPVwid2lkdGg6 NjBweDtoZWlnaHQ6NjBweDtcIiAvPiI7CgkJJG91dHB1dCAuPSAiPGEgaHJlZj1cIiRzb25n X3VybFwiPiRpbmZvdGV4dDwvYT48L2xpPiI7Cgl9Cgkkb3V0cHV0IC49ICc8L3VsPjxhIGhy ZWY9Imh0dHA6Ly93d3cubGFzdC5mbSIgY2xhc3M9ImtjaF9sYXN0Zm1fcmVjZW50bHlfbGZt X2NyZWRpdHMiPlBvd2VyZWQgYnkgTGFzdC5mbTwvYT4nOwoJLyogVGhlIFRPUyBvZiBsYXN0 LmZtIGZvcmNlcyB1cyB0byBjcmVkaXQgdGhlbS4uLiAqLwoKCWlmKCRwbHVnaW5fcGFyYW1z WydjYWNoaW5nJ10gYW5kICgkdHJhY2stPmRhdGVbInV0cyJdPjApKQoJewoJCSRjZmggPSBm b3BlbigkY2FjaGVfZmlsZW5hbWUsInciKTsKCQlmd3JpdGUoJGNmaCwgJG91dHB1dCk7CgkJ ZmNsb3NlKCRjZmgpOwoJfQoKCXJldHVybiAkb3V0cHV0Owp9CiI7czozOiJtZDUiO3M6MzI6 IjhiMzU3MGYyYzg1OWFhYzdjNDlkZGU5OGQ0NWM3ZDQwIjt9