-
-
Save hunner/833064 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
""" | |
Last.fm scrobbling for Pianobar, the command-line Pandora client. Requires Pianobar, Python, pyLast and Last.fm API credentials. | |
https://github.com/PromyLOPh/pianobar/ | |
http://code.google.com/p/pylast/ | |
http://www.last.fm/api/account | |
Installation: | |
1) Copy this script and pylast.py to the Pianobar config directory, ~/.config/pianobar/, and make sure this script is executable | |
2) Supply your own Last.fm credentials below | |
3) Update Pianobar's config file to use this script as its event_command | |
""" | |
import sys | |
import time | |
API_KEY = "################################" | |
API_SECRET = "################################" | |
USERNAME = "########" | |
PASSWORD = "########" | |
THRESHOLD = 50 # the percentage of the song that must have been played to scrobble | |
def main(): | |
event = sys.argv[1] | |
lines = sys.stdin.readlines() | |
fields = dict([line.strip().split("=", 1) for line in lines]) | |
# fields: title, artist, album, songDuration, songPlayed, rating, stationName, pRet, pRetStr, wRet, wRetStr | |
artist = fields["artist"] | |
album = fields["album"] | |
title = fields["title"] | |
song_duration = int(fields["songDuration"]) | |
song_played = int(fields["songPlayed"]) | |
import pylast | |
network = pylast.LastFMNetwork(api_key = API_KEY, api_secret = API_SECRET, username = USERNAME, password_hash = pylast.md5(PASSWORD)) | |
# events: songstart, songfinish, ??? | |
if event == "songfinish" and song_duration > 0 and 100.0 * song_played / song_duration > THRESHOLD: | |
song_started = int(time.time() - song_played / 1000.0) | |
network.scrobble(artist = artist, title = title, timestamp = song_started) | |
if event == "songstart": | |
network.update_now_playing(artist = artist, album = album, title = title, duration = song_duration) | |
if __name__ == "__main__": | |
main() |
Yeah, I couldn't figure that out; everything just looked right :(
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Now playing only works shortly after playing the song, and stops working/displaying on Last.FM after a few seconds. Any ideas what causes this to happen? Is there another event you could bind to? Is there an interval that at which now_playing needs to be re-sent to Last.FM?