You are not logged in.
I really hate the fact that Textpattern doesn’t have a decent last.fm plugin already out, it would be really awesome if we could get one that basically added some simple tags and allowed us to display a varying amount of data.
e.g.
<txp:abc_lastfm user=“NAME”>
<txp:abc_lastfm_recentalbums limit=“10” /></txp:abc_lastfm>
It would be cool to get the artwork from say Amazon, and NOT host on it our own domain/cache.
Thoughts?
~ Cameron
Offline
+1!
Offline
driz wrote:
I really hate the fact that Textpattern doesn’t have a decent last.fm plugin
With this much hate, you have a few options:
The smd plugin menagerie — for when you need one more gribble of power from TXP.
Offline
Here is an example plugin that WordPress uses:
<?php/* Plugin Name: Last.fm for Wordpress Version: 1.3.2 Plugin URI: http://rick.jinlabs.com/code/lastfm Description: Displays your recently listened tracks. Based on <a href="http://cavemonkey50.com/code/pownce/">Pownce for Wordpress</a> by <a href="http://cavemonkey50.com/">Cavemonkey50</a>. Author: Ricardo González Author URI: http://rick.jinlabs.com/ *//* Copyright 2007 Ricardo González Castro (rick[in]jinlabs.com)This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *///define('MAGPIE_CACHE_AGE', 120); define('MAGPIE_CACHE_ON', 0); //2.7 Cache Bug$lastfm_options['widget_fields']['title'] = array('label'=>'Title:', 'type'=>'text', 'default'=>''); $lastfm_options['widget_fields']['username'] = array('label'=>'Username:', 'type'=>'text', 'default'=>''); $lastfm_options['widget_fields']['num'] = array('label'=>'Number of links:', 'type'=>'text', 'default'=>''); $lastfm_options['widget_fields']['update'] = array('label'=>'Show timestamps:', 'type'=>'checkbox', 'default'=>false); $lastfm_options['widget_fields']['linked'] = array('label'=>'Linked tracks:', 'type'=>'checkbox', 'default'=>false); $lastfm_options['widget_fields']['encode_utf8'] = array('label'=>'UTF8 Encode:', 'type'=>'checkbox', 'default'=>false);$lastfm_options['prefix'] = 'lastfm';// Display Last.fm recently listened tracks.function lastfm_tracks($username = '', $num = 5, $list = true, $update = true, $linked = true, $encode_utf8 = false) { global $lastfm_options; include_once(ABSPATH . WPINC . '/rss.php');$songs = fetch_rss('http://ws.audioscrobbler.com/1.0/user/'.$username.'/recenttracks.rss');if ($num <=0) $num = 1; if ($num >10) $num = 10; if ($list) echo '<ul class="lastfm">'; if ($username == '') { if ($list) echo '<li>'; echo 'Username not configured'; if ($list) echo '</li>'; } else { if ( empty($songs->items) ) { if ($list) echo '<li>'; echo 'No recently listened tracks.'; if ($list) echo '</li>'; } else { foreach ( $songs->items as $song ) { $msg = htmlspecialchars($song['title']); if($encode_utf8) $msg = utf8_encode($msg); $link = $song['link']; if ($list) echo '<li class="lastfm-item">'; elseif ($num != 1) echo '<p class="lastfm-track">'; if ($linked) { echo '<a href="'.$link.'" class="lastfm-link">'.$msg.'</a>'; // Puts a link to the song. } else { echo $msg; // Only the song, no link. } if($update) { $time = strtotime($song['pubdate']);if ( ( abs( time() - $time) ) < 86400 ) $h_time = sprintf( __('%s ago'), human_time_diff( $time ) ); else $h_time = date(__('Y/m/d'), $time);echo sprintf( '%s' ,' <span class="lastfm-timestamp"><abbr title="' . date(__('Y/m/d H:i:s'), $time) . '">' . $h_time . '</abbr></span>' ); }if ($list) echo '</li>'; elseif ($num != 1) echo '</p>'; $i++; if ( $i >= $num ) break; } } } if ($list) echo '</ul>'; }// lastfm widget stuff function widget_lastfm_init() {if ( !function_exists('register_sidebar_widget') ) return; $check_options = get_option('widget_lastfm'); if ($check_options['number']=='') { $check_options['number'] = 1; update_option('widget_lastfm', $check_options); } function widget_lastfm($args, $number = 1) { global $lastfm_options; // $args is an array of strings that help widgets to conform to // the active theme: before_widget, before_title, after_widget, // and after_title are the array keys. Default tags: li and h2. extract($args);// Each widget can store its own options. We keep strings here. include_once(ABSPATH . WPINC . '/rss.php'); $options = get_option('widget_lastfm'); // fill options with default values if value is not set $item = $options[$number]; foreach($lastfm_options['widget_fields'] as $key => $field) { if (! isset($item[$key])) { $item[$key] = $field['default']; } } $songs = fetch_rss('http://ws.audioscrobbler.com/1.0/user/'.$username.'/recenttracks.rss');// These lines generate our output. echo $before_widget . $before_title . $item['title'] . $after_title; lastfm_tracks($item['username'], $item['num'], true, $item['update'], $item['linked'], $item['encode_utf8']); echo $after_widget; }// This is the function that outputs the form to let the users edit // the widget's title. It's an optional feature that users cry for. function widget_lastfm_control($number) {global $lastfm_options;// Get our options and see if we're handling a form submission. $options = get_option('widget_lastfm'); if ( isset($_POST['lastfm-submit']) ) {foreach($lastfm_options['widget_fields'] as $key => $field) { $options[$number][$key] = $field['default']; $field_name = sprintf('%s_%s_%s', $lastfm_options['prefix'], $key, $number);if ($field['type'] == 'text') { $options[$number][$key] = strip_tags(stripslashes($_POST[$field_name])); } elseif ($field['type'] == 'checkbox') { $options[$number][$key] = isset($_POST[$field_name]); } }update_option('widget_lastfm', $options); }foreach($lastfm_options['widget_fields'] as $key => $field) { $field_name = sprintf('%s_%s_%s', $lastfm_options['prefix'], $key, $number); $field_checked = ''; if ($field['type'] == 'text') { $field_value = htmlspecialchars($options[$number][$key], ENT_QUOTES); } elseif ($field['type'] == 'checkbox') { $field_value = 1; if (! empty($options[$number][$key])) { $field_checked = 'checked="checked"'; } } printf('<p style="text-align:right;" class="lastfm_field"><label for="%s">%s <input id="%s" name="%s" type="%s" value="%s" class="%s" %s /></label></p>', $field_name, __($field['label']), $field_name, $field_name, $field['type'], $field_value, $field['type'], $field_checked); } echo '<input type="hidden" id="lastfm-submit" name="lastfm-submit" value="1" />'; } function widget_lastfm_setup() { $options = $newoptions = get_option('widget_lastfm'); if ( isset($_POST['lastfm-number-submit']) ) { $number = (int) $_POST['lastfm-number']; $newoptions['number'] = $number; } if ( $options != $newoptions ) { update_option('widget_lastfm', $newoptions); widget_lastfm_register(); } } function widget_lastfm_page() { $options = $newoptions = get_option('widget_lastfm'); ?> <div class="wrap"> <form method="POST"> <h2><?php _e('last.fm Widgets'); ?></h2> <p style="line-height: 30px;"><?php _e('How many last.fm widgets would you like?'); ?> <select id="lastfm-number" name="lastfm-number" value="<?php echo $options['number']; ?>"> <?php for ( $i = 1; $i < 10; ++$i ) echo "<option value='$i' ".($options['number']==$i ? "selected='selected'" : '').">$i</option>"; ?> </select> <span class="submit"><input type="submit" name="lastfm-number-submit" id="lastfm-number-submit" value="<?php echo attribute_escape(__('Save')); ?>" /></span></p> </form> </div> <?php } function widget_lastfm_register() { $options = get_option('widget_lastfm'); $dims = array('width' => 300, 'height' => 300); $class = array('classname' => 'widget_lastfm');for ($i = 1; $i <= 9; $i++) { $name = sprintf(__('last.fm #%d'), $i); $id = "lastfm-$i"; // Never never never translate an id wp_register_sidebar_widget($id, $name, $i <= $options['number'] ? 'widget_lastfm' : /* unregister */ '', $class, $i); wp_register_widget_control($id, $name, $i <= $options['number'] ? 'widget_lastfm_control' : /* unregister */ '', $dims, $i); } add_action('sidebar_admin_setup', 'widget_lastfm_setup'); add_action('sidebar_admin_page', 'widget_lastfm_page'); }widget_lastfm_register(); }// Run our code later in case this loads prior to any required plugins. add_action('widgets_init', 'widget_lastfm_init');?>
and then the insert into your template is this:
<?php lastfm_tracks("username"); ?>
It should be noted that the above PHP script adds WP Widget functionality as well, so most of that wouldn’t be required for TXP site, and so the plugin in theory would be lighter. x
Last edited by driz (2009-01-29 16:16:45)
~ Cameron
Offline
Bloke wrote:
Put up some bounty and / or commission someone to write one for you
Yes, that’s the way forward if you want things get done quickly as recent evidence goes to show.
If you need it badly and can’t write your own plugin, your best bet is to round up a few more users interested and willing to chip in.
Offline
I can appreciate that people would like some reward for their effort, but I’m not really in the position of being able to pay for plugins!
I should imagine that quite a few people would like to see a professional last.fm plugin for TXP! WordPress has loads. Hopefully someone can code one up soon. x
~ Cameron
Offline
TheEric wrote:
So, what exactly are the requested features? Just display x-num most recent songs played for y-user ?
Basically YES! But it would be awesome to have some control over what data is shown etc. Most people don’t show the songs they have listened to (but some do) they show the last 5 albums regardless of what songs they have listened from each, be it be one song or the whole album.
As a basic concept, wrapping be in this form:
<txp:abc_lastfm></txp:abc_lastfm>
and then have some additional tags such as:
<txp:abc_lastfm_recentsongs limit=“10” link=“true” />
<txp:abc_lastfm_recentartists />
<txp:abc_lastfm_recentalbums />
~ Cameron
Offline
I’d like a last.fm plugin to do everything I want without asking too. It should be able to read my mind – judge what music I like, serve up plenty of compatible options for me to choose from – if I can be bothered to click- , show my latest things I’ve listened to, wetc, and of course completey free. Cheers! Oh, and please tell me how it fits in with txp. I use lst fm independently but would love to know how it all fits in with textpattern. Cheers!!! Hic.
Take over TXPQ – your community project or write or suggest articles
Offline
zero wrote:
I’d like a last.fm plugin to do everything I want without asking too. It should be able to read my mind – judge what music I like, serve up plenty of compatible options for me to choose from – if I can be bothered to click- , show my latest things I’ve listened to, wetc, and of course completey free. Cheers! Oh, and please tell me how it fits in with txp. I use lst fm independently but would love to know how it all fits in with textpattern. Cheers!!! Hic.
What’s the point in saying something like that! You drunk? :S
~ Cameron
Offline