pátek 28. září 2012

iPod Scrobbling – DIY

Pokud vlastníte naprosto nescrobblovatelný iPod a nechcete ho „opravit“ tím, že smažete celou knihovnu i se všemi statistikami přehrávání jak bývá často doporučováno, pak zbývá ještě zkusit ho scrobblovat vlastním skriptem. Zbytek příspěvku je tedy jen pro ty, co vědí co je iPod, scrobbling a jazyk python.

Získání statistik z iPodu

iPod má všechny statistiky v iTunesDB. Zkoušel jsem pro to hledat funkční parser, ale nenašel jsem. Nechce se mi ho programovat, stejně Apple každou chvíli změní formát. Vytáhl jsem tedy statistiky jinak. První krok je editace obsahu iPodu v iTunes. Důležité je vybrat jen sloupce Název, Interpret, Album, Přehrání, Datum přehrání a Čas. Stačí teď jen vybrat položky s nejméně jedním přehráním. (Jde to, pokud si je podle počtu přehrání seřadíte.) Obrázek přikládám. Pak je nutné zvolit „menu/úpravy/kopírovat“ a v nějakém editoru výsledek vložit do textového souboru. Netřeba snad zdůrazňovat, že je nutné dát si pozor na kódování češtiny. Výsledek by měl být v cp1250. Notepad nemá žádný problém.


Scrobbling

Knihovnu pro scobblování v pythonu napsal uživatel andy.theyers a je celá v souboru audioscrobbler.py. Můžete si napřed vyzkoušet, jak funguje: 

# -*- coding: cp1250 -*- 

from audioscrobbler import AudioScrobblerPost

track = {
  "artist_name": "Karel Kryl",
  "song_title": "Bratříčku zavírej vrátka",
  "length": 291,
  "date_played": "2012-09-27 16:20:00", 
  "album": "Bratříčku zavírej vrátka",
  "mbid": "",
}

post = AudioScrobblerPost(username = "username", password = "password")
post(**track)

Statistiky z iPodu jsou nyní uloženy. Problém je se nahrávkami, které mají víc jak jedno přehrání. U těchto nahrávek předpokládám jedno přehrání za týden. To je sice hrubá aproximace, ale nic lepšího nevymyslím. Důležité upozornění: předpokládám český formát dat, tj. den.měsíc.rok. Pozor: na správné scrobblování máte jen jeden pokus. Skript je proto nutné nejdříve řádně odladit. Příkaz na skrobblování je pro jistotu zakomentován.

# -*- coding: cp1250 -*- 

import re
from audioscrobbler import AudioScrobblerPost

def aWeekAgo(y, m, d):
  ms = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}
  if (y - (2012 - 40)) % 4 == 0:
    ms[2] = 29 
  d = d - 7
  if d < 1:
    m = m - 1
    if m < 1:
      m = 12
      y = y - 1
    d = ms[m] + d
  return (y, m, d)

fname = "forScrobbling"
f = open(fname)
post = AudioScrobblerPost(username = "username", password = "password")
for line in f:
  [title, interpret, album, N, datetime, time] = line.strip().split('\t')
  [d, m, y, h, min] = re.split(r"[ :\.]", datetime)
  [tmin, tsec] = time.split(":")
  N = int(N)
  d = int(d)
  m = int(m)
  y = int(y)
  h = int(h)
  min = int(min)
  length = 60 * int(tmin) + int(tsec)
  for i in range(N):
    date_played = "%d-%02d-%02d %d:%02d:%02d" % (y, m, d, h, min, 0)
    print
    print "       title =", title
    print "   interpret =", interpret
    print "       album =", album
    print " date_played =", date_played
    print "      length =", length
    #post(artist_name = interpret, song_title = title, length = length, date_played = date_played, album = album, mbid = "")
    (y, m, d) = aWeekAgo(y, m, d)
f.close()

Pokud skript proběhne v pořádku a jste s tím, co píše do konzole spokojeni, můžete odkomentovat řádku, na které se provádí scrobbling. Nakonec nesmíte zapomenout v iTunes vynulovat statistiky přehrání a raději smažte scrobblované statistiky. Celé je to, přiznávám, drbání se levou rukou za pravým uchem, ale až bude zase nějaký volný čas, zapracuji na nějakém systémovějším řešení.

Žádné komentáře: