Automatisk henting av sangtekster i iTunes

Phishing i iTunesFor de av oss som har iPhone/iPod Touch er det fint å kunne se tekstene på sangene når de spilles. Problemet er at ingen sanger har tekster integrert i utgangspunktet og at du følgelig ikke får brukt funksjonen. Vi har tidligere dekket forskjellige widget-løsninger som gjør jobben for deg, men nå har en Mac1-bruker laget en ny og alternativ løsning som baserer seg på Ruby.

Mac1-brukeren evenv har utviklet en Ruby-løsning som fungerer i Mac OS X og med iTunes.

Jeg har lenge sett etter en måte å hente sangtekster til sangene i iTunes-biblioteket mitt, men har ikke funnet noen god løsning. De fleste programmene og widgetene henter bare ned sangtekster for sangen du spiller der og da. Ettersom jeg ønsker å fylle iPhonen med sangtekster fungerer ikke dette så bra.

Derfor lagde jeg et lite script som tar seg av automatisk innhenting. Scriptet er laget i Ruby og bruker gems for å snakke med iTunes og LyricWiki.

Scriptet kan hentes ned på mine sider.

Jeg må nevne at scriptet tok i underkant av en halvtime å kode, og er på 20 kodelinjer, noe som sier endel om hvor kraftige disse verktøyene er. Oppfordrer samtlige lesere til å kikke litt på Ruby og spesielt rb-appscript, som gjør det usedvanlig enkelt å kommunisere med OS X-programmer.

oddiZs bilde

oddiZ

Jeg bruker MPFreaker http://www.lairware.com/mpfreaker/
Den henter all musikk data.

gutilanens bilde

gutilanen

Har du noen gode linker til steder hvor man kan lære seg ruby/rb-applescript?

prelude6x6

Er ikke kjent med Ruby, men når jeg kjører "ruby lyrics.rb" så får jeg denne erroren:

lyrics.rb:1: syntax error, unexpected $undefined, expecting '}'
{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330
^

EDIT: nvm, hadde bare kopiert koden feil :)

Takk for fint script :D

gits

Hva mener du med kopiert feil? Får samme feilmelding!

Anders16s bilde

Anders16

noen som vil fortelle step by step kordan eg ska gjøra dette? skjønner ikke noe av dt:S :P

et

Jeg fikk også problemer, men det viste seg at det må være et ekstra linjeskift nederst i filen. Filen må videre kjøres med "ruby filnavn.rb" i terminalen.

Macbruker20

Jeg har også trøbbel, får følgende feilmelding:

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- appscript (LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:27:in `require'
from test.rb:2

KDNs bilde

KDN

Nice, takk.

1. Skriv "sudo gem install rb-appscript" i terminal
2. Kopier inn koden i et kode program(jeg brutke coda) og lagre det som dittnavnpåfilen.rb på skrivebordet/desktopen ditt/din.
3. Skriv "cd desktop" i terminal.
4. Merk av de sangene du vil ha texter på(jeg valgte alle) i iTunes.
5. Skriv "ruby dittnavnpåfilen.rb" i terminal. Vent på at den henter texter.

Done!

NB! Alt skal selvsakt skrives i terminal uten "".

evenv

@KDN: Takk for god step-by-step, jeg ser i ettertid at jeg kunne skrevet litt klarere hva man må gjøre for å få dette til å fungere.

@gutilanen: Rubys hjemmeside har mange gode linker til tutorials og liknende, men spesielt "Why's Poignant Guide to Ruby" har oppnådd tilnærmet legendestatus i programmeringsmiljøet, og anbefales vel så mye for underholdning som for å lære seg litt Ruby.

@Macbruker20: Husket du å gjøre steg 1 i KDNs liste?

bep

Et lignende script for Windows:

Merk: scriptet tar hele biblioteket ditt.

Redigert innlegg: La inn et filter på videoer...

EDIT 2: La inn UTF-8 som løser noen bokstav-problemer, men ikke alle... + Litt error-handling. Vi fortsetter ved XML feil.

EDIT 3: Setter teksten "NA" i de sangene scriptet ikke finner + litt mer robust. Jeg har kjørt igjennom hele samlinga mi nå.

EDIT 4: OK, nå kjører den uten stopp gjennom hele samlinga mi. Mer robust.


require 'win32ole'
require 'soap/wsdlDriver'

itunes = WIN32OLE.new('iTunes.Application')
WIN32OLE.codepage = WIN32OLE::CP_UTF8
driver = SOAP::WSDLDriverFactory.new("http://lyricwiki.org/server.php?wsdl").create_rpc_driver

library = itunes.LibraryPlaylist

for track in library.tracks
next if track.Kind == 3 or track.KindAsString.rindex("video")

begin
lyrics = track.lyrics
rescue WIN32OLERuntimeError => error
print "WIN32OLERuntimeError running script for artist #{track.artist}, title #{track.name} \nError: #{error.inspect}\n"
next
end

if lyrics == "Not found" or lyrics.empty?
artist = track.artist
title = track.name
begin
lyrics = driver.getSong(artist,title).lyrics

if lyrics == "Not found"
puts "Found nothing for #{artist}: #{title}"
track.lyrics = "NA"
else
track.lyrics = lyrics
puts "Updated #{artist}: #{title}"
end

rescue XSD::ValueSpaceError => error
print "XML Error running script for artist #{artist}, title #{title} \nError: #{error.inspect}\n"
rescue WIN32OLERuntimeError => OLE_error
print "WIN32OLERuntimeError running script for artist #{track.artist}, title #{track.name} \nError: #{OLE_error.inspect}\n"
end
end
end

puts "\n\nDone..."

Amnura

Jeg får trøbbel allerede ved punkt 1 i guiden. Noen som vet hva det kommer av?

--------------------------------------------

amnura:~ amnura$ sudo gem install rb-appscript
Bulk updating Gem source index for: http://gems.rubyforge.org
Building native extensions. This could take a while...
ERROR: Error installing rb-appscript:
ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb install rb-appscript
can't find header files for ruby.

Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/rb-appscript-0.5.1 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/rb-appscript-0.5.1/gem_make.out
amnura:~ amnura$

WZot

@Amnuare Ettersom jeg forstår feilmeldingen så må du sannsynligvis ha Xcode installert. Finner den på http://developer.apple.com/technology/xcode.html hvis du ikke har det allerede. Men nå er ikke jeg Ruby guru så er ikke 100% sikker.

GeirAasen

@Amnura:

jeg googla "ERROR: Failed to build gem native extension" og fant ut (som WZot har skrivi) at det er Xcode-pakka som mangler for å få dette til. Denne kan installeres fra "Optional installs" på leopard-skiva di. =)

fra http://www.macruby.org/trac/wiki/Troubleshooting:

can't find header files for ruby

If you get the can't find header files for ruby error message when trying to build an extension or a gem, it means that Ruby cannot locate its header files.

Header files are not delivered by default with Mac OS X, you need to install the Xcode Tools package after the installation. You can find it in the Optional Installs / Xcode Tools directory on the Leopard DVD.

Lukass bilde

Lukas

"For de av oss som har iPhone/iPod Touch er det fint å kunne se tekstene på sangene når de spilles."

Nå er jeg sikkert litt tett her, men hva er det som er fint med det?

svars bilde

svar

Bare feilmelding her:

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/uri/common.rb:436:in `split': bad URI(is not URI?): http://lyricwiki.org/server.php wsdl (URI::InvalidURIError)
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/uri/common.rb:485:in `parse'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/wsdl/xmlSchema/importer.rb:28:in `import'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/wsdl/importer.rb:18:in `import'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/soap/wsdlDriver.rb:124:in `import'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/soap/wsdlDriver.rb:28:in `initialize'
from lyrics.rb:6:in `new'
from lyrics.rb:6

espenhogbakk

Får samme feilmelding som "svar" og har fulgt guiden til punkt og prikke og har XCode og alt... Merkelig...

EDIT:

Ser ut som serveren er nede, og passer bra for jeg får en connection error... Noen som vet om den er permanent nede? Og er det noen sjangs for at det er dette scriptet som har tatt ned serveren?

Macbruker20

Da har jeg blitt kvitt første feilmeldingen, manglet Xcode, men nå er det en ny en som plager meg:

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:564:in `initialize': Connection refused - connect(2) (Errno::ECONNREFUSED)
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:564:in `open'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:564:in `connect'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:48:in `timeout'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:76:in `timeout'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:564:in `connect'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:557:in `do_start'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:546:in `start'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/soap/netHttpClient.rb:115:in `start'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/soap/netHttpClient.rb:104:in `get_content'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/wsdl/xmlSchema/importer.rb:64:in `fetch'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/wsdl/xmlSchema/importer.rb:30:in `import'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/wsdl/importer.rb:18:in `import'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/soap/wsdlDriver.rb:124:in `import'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/soap/wsdlDriver.rb:28:in `initialize'
from test.rb:6:in `new'
from test.rb:6

evenv

@amnura, WZot, armandg: Dette tenkte jeg ikke på, har hatt XCode siden jeg installerte Leopard så det falt meg ikke inn. Men ja, ut fra feilmeldingene ser det ut som det er der problemet ligger.

evenv

@espenc, svar: Jepp, ser ut som serveren til lyricwiki er nede. Ser at siden med scriptet har 287 hits siste to døgn, så selv om 287*avg(antall sanger i iTunes) blir endel oppslag vil jeg bli noe overrasket om det er det som er årsaken... Og permanent nede er den nok ikke - vi snakker om etter hva jeg vet den største og mest brukte lyricdatabasen på nettet.

svars bilde

svar

Ser jammen slik ut ja :(

evenv

Da er lyricwiki oppe igjen. Det ser ikke ut som vår trafikk hadde noe med å gjøre at siden gikk ned, men at en bug i serverkonfigurasjonen var grunnen.

evenv

@bep: Bra jobbet med scriptet for Windows. Ser det ikke var så mange som har gikk deg kred for det så langt, men det har nok noe å gjøre med publikummet... :)

espenhogbakk

Nå fungerte det ja :) Men noe jeg må aktivere for at sangtekstene skal vises på iPhonene? De vil ikke vises... Selv på sanger jeg vet er oppdaterte..

bep

@evenv: Takk. Jeg laga win-scriptet først og fremst for meg selv.

KDNs bilde

KDN

espenc: for å se sangtexten tap en gang på midt på skjermen når sangen spilles av. Fungerte fint her, med untakk av noen låter som er på norsk (Stormblåst albummet til Dimmu Borgir, etc.)

svars bilde

svar

Får fremdeles samme feil, er serveen nede igjen?

evenv

Jeg har lagt opp en ny versjon av scriptet som skal tåle litt mer feil (takket være tips fra bep og flere) og gi litt mer informasjon underveis.

SindreMs bilde

SindreM

Jeg brukte MPFreaker, som ble beskrevet i første kommentar, og det funka veldig bra. Nå har jeg sangtekster, albumbilder, årstall osv på nesten ALLE sangene i iTunes.

Trial-versionen lar deg bare ta 3 og 3 sanger hver gang du starter programmet. Jeg fant det cracket på en annen side, og det funket smertefritt. Kontakt meg hvis du vil ha siden :):)

KDNs bilde

KDN

God ide... la oss spre piratvare!

(og for de som ikke skjønner det... dette er ironi og jeg synes de som ikke legger ut $20 eller 100kr for et program de skal bruke er ganske gniene!)

gd

Helt enig med KDN. Hvis vi nå har en gluping som kan mekke i hop noe som funker, og som vi har nytte av, så er ikke $20 avskrekkende. Og hvis flere sender litt penger så kanskje det kommer mer vettug senere som vi også vil ha nytte av

SindreMs bilde

SindreM

Selvfølgelig. Hvis du derimot vil få prøvd programmet ordentlig først og/eller ikke f.eks har visa slik at det er enkelt å få betalt de $20, ser ikke jeg så mange andre utveier.

Men for all del, er programmet verdt pengene, betal for det.

And3rsG

"lyrics.rb:1: syntax error, unexpected $undefined, expecting '}'
{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf330"

Får opp denne meldingen når jeg starter scriptet. Har xcode og alt. Noen som vet grunnen?

Lostchilds bilde

Lostchild

I fare for å bare ha browset veldig hurtig igjennom og ikke lest godt nok. Vil dette scriptet hente tekster til samtilige av mine iTunes låter?

overtoner

@ And3rsG: Får samme feil selv.

lyrics.rb:1: syntax error, unexpected $undefined, expecting '}'
{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460
^

Ser noen hvor feilen ligger?

  • Skriv ut artikkel
  • Abonner med RSS

Alt om iPad, iPhone og iOS

Nettradio i iTunes

Nettradio i iTunes
130 norske radiokanaler.
Få de mest populære norske, svenske og danske radiokanalene inn i en egen spilleliste i iTunes.
Oppdatert 13. mai