XML - statystyki - winamp??

0

Witajcie kompletnie nie wiem czy i jak da sie to zrobic, ale jestem w potrzebie.
Potrzebuje generowac z winampa statyski, ktore zawieralyby nastepujace elementy:

Artist - Album - Title - Length - Play count

Cos podobnego znajduje sie w Recent Items w Winamp Library. Jest plugin (Winamp Database Import/Export), ale on exportuje calosc i to do pliku xml z ktorym niestety nie wiem co zrobic.

Jesli ktos jest w stanie cos wymyslic bede bardzo wdzieczny, wyciagniecie potrzebnych danych z tego pliczku, nie jest chyba wielka filozofia, no ale niestety potrzeba wiedzy, ktorej mi brakuje. Prosze o pomoc.

Fragment tego pliku dla dwoch zagranych utworow wyglada tak:

  • <dict>

<key>Track ID</key>
<integer>109</integer>
<key>Name</key>
<string>Englishman in New York</string>
<key>Artist</key>
<string>Sting</string>
<key>Album</key>
<string>Fields of Gold (The best of 1984-1994)</string>
<key>Genre</key>
<string>Pop</string>
<key>Comments</key>
<string>0160</string>
<key>Kind</key>
<string>MPEG audio file</string>
<key>Size</key>
<integer>4177</integer>
<key>Total Time</key>
<integer>267000</integer>
<key>Track Number</key>
<integer>5</integer>
<key>Year</key>
<integer>1994</integer>
<key>Date Modified</key>
<date>Mon Feb 07 2042 2005</date>
<key>Bitrate</key>
<integer>128</integer>
<key>Play Count</key>
<integer>0</integer>
<key>Location</key>
<string>file://localhost/C:/Documents%20and%20Settings/Leszek/Desktop/mp3/0160%20-%20Sting%20-%20Fields%20of%20Gold%20(The%20Best%20Of%201984-1994)/05%20-%20Englishman%20in%20New%20York.mp3/</string>
<key>File Folder Count</key>
<integer>-1</integer>
<key>Library Folder Count</key>
<integer>-1</integer>
</dict>
<key>110</key>

  • <dict>

<key>Track ID</key>
<integer>110</integer>
<key>Name</key>
<string>All this time</string>
<key>Artist</key>
<string>Sting</string>
<key>Album</key>
<string>Fields of Gold (The best of 1984-1994)</string>
<key>Genre</key>
<string>Pop</string>
<key>Comments</key>
<string>0160</string>
<key>Kind</key>
<string>MPEG audio file</string>
<key>Size</key>
<integer>4618</integer>
<key>Total Time</key>
<integer>295000</integer>
<key>Track Number</key>
<integer>4</integer>
<key>Year</key>
<integer>1994</integer>
<key>Date Modified</key>
<date>Mon Feb 07 2042 2005</date>
<key>Play Date</key>
<integer>1131528767</integer>
<key>Play Date UTC</key>
<date>Wed Nov 09 1047 2005</date>
<key>Bitrate</key>
<integer>128</integer>
<key>Play Count</key>
<integer>2</integer>
<key>Location</key>
<string>file://localhost/C:/Documents%20and%20Settings/Leszek/Desktop/mp3/0160%20-%20Sting%20-%20Fields%20of%20Gold%20(The%20Best%20Of%201984-1994)/04%20-%20All%20this%20time.mp3/</string>
<key>File Folder Count</key>
<integer>-1</integer>
<key>Library Folder Count</key>
<integer>-1</integer>
</dict>
<key>111</key>

  • <dict>
0

Podstawowa sprawa - użyj jakiegoś parsera XML. Pisanie własnego bez jakichś wyrafinowanych potrzeb może być całkiem zbędna. Tutaj ze względu na strukturę danych niestety XMLINI nie przejdzie, ale zwykły TXMLDocument powinien wystarczyć.
//Dopisane:
Uops :P Nie zauważyłem, że to w dziale JS/PHP/XML :P. W takim razie napisz, w czym to chcesz przetwarzać - PHP? JS? Może coś innego, bo w końcu dział ten jest też poświęcony samemu XML'owi...

0

Jeżeli to jest php to napisz sobie parser na podstawie tego:

http://webcity.pl/webcity/artykuly.php/t/34

Dosyc toporne ale działa :)

0

Dzieki, dzieki wielkie, ze ktos zdecydowal sie odezwac do laika.
Punkt pierwszy, plik xml ktory wyciagam z winampa bedzie zawieral informacje o jakis 10000 utworach jeszcze takiej ilosci nie testowalem, ale zakaladam ze sobie poradzi.
Punkt drugi, wybaczcie ale jak juz pisalem na xml'u nie znam sie wcale, wiec pisanie parser'ow to dla mnie abstrakcja.
Punkt drugi, potrzebuje te dane miec w jakims znosnym dla mnie formacie xls albo html.

I na koniec trafilem na jakis program do konwertowania xml do html i kupy innych formatow http://www.processtext.com/abcxml.html ale nic mi kurna akurat z tym plikem nie wyszlo. Program ma opcje use stylesheet (xsl) nie wiem czy to potrzebne, ale pewne jest, ze takiego pliku ten plugin nie produkuje ani go nie ma.

Moje pytanie tylko co to znaczy conwertowanie do html czy zrobi on to np. w takiej formie ukladajac kazdy utwor jako jeden rekord w jedna linijke jesli tak, to super:

Track ID 109 Name Englishman in New York Artist Sting Album Fields of Gold (The best of 1984-1994)

...tylko jak to zrobic...

rzuccie jakis pomysl moze tym razem na konwertowanie, albo jakies narzedzie zeby wyciagnelo to, co potrzebuje.

A tak wyglada poczatek tego pliku, nie wiem czy to istotne, prosze o pomoc, bardzo prosze.

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <!DOCTYPE plist (View Source for full doctype...)>
  • <plist version="1.0">
  • <dict> <key>Major Version</key> <integer>1</integer> <key>Minor Version</key> <integer>1</integer> <key>Application Version</key> <string>4.1.1</string> <key>Tracks</key>
  • <dict> <key>0</key>
0

Można użyć xsl do wygenerowania html (a jak się uprzesz to i pdf czy jakikolwiek inny).
Szkoda, że taki brzydki ten plik xml jest.
Z tego co mogę tutaj wywnioskować, to element dict zawiera wpisy o pojedynczych ścieżkach a wewnątrz są pary klucz wartość, co niestety nie jest wygodne do wyciągania, ale nie znaczy, że się nie da.

Można napisać pliczek xsl, ale trzeba chwilkę posiedzieć, pomyśleć i potestować.

Ja natomiast mam inną propozycję. Kiedy jeszcze używałem winampa (wersja 2.x) po wczytaniu playlisty można było gdzieś w tamtym okienku zrobić zapis do html. Myślę, że to powinno wystarczyć, jeżeli ma być tylko prezentowanie danych. Jeżeli chcesz xsl, to już ten numer nie przejdzie i najlepiej użyć xsl i wygenerować chociażby w formacie csv.

[dopisane]
Troszkę się pobawiłem. Zakładając, że kolejność wpisów się nie zmienia (a generuje to automat, więc nie powinna) można sobie wygenerować pliczek w formacie csv za pomocą sed-a:
sed -f sed1.txt winamp.txt | sed -f sed2.txt > wynik.txt
sed1.txt

#zostawiamy te artyste
/Artist/bsave
#zostawiamy album
/Album/bsave
#zostawiamy tytul
/Name/bsave
#zostawiamy dlugosc
/Total Time/bsave
#zostawiamy liczbe odtworzen
/Play Count/bsave
#kasujemy wszystko pozostale
D
:save
#s:<[^>]*>::g
#kasujemy key
s:.*$::g
N
#kasujemy znak konca linii
s:\n::g
#usuwamy tagi
s:<[^>]*>::g
#zmienamy znak konca linii na srednik
s:$:;:g
#kasujemy puste linijki
/^$/d

sed2.txt

N
N
N
N
s:\n::g

Przy okazji zauważyłem, że nie wiem, jak wyrzucać w sedzie bez dołączania znaku końca linii, dlatego też są 2 pliczki.
Jakby ktoś wiedział jak to zrobić to byłbym wdzięczny za informację.

0

hm...
Jeszcze troche i sie zalamie...

Sed jak sadze program pod pingwina czyli kolejne wyzwanie zeby go wkoncu na ktoryms kompie postawic...

Wracajac do tematu, w efekcie koncowym dane musze miec w arkuszu kalkulacyjnym xls, czyli jakkolwiek nie produkowac wszystko musi byc wczesniej w kolumnach albo tak by mozna bylo w prosty sposob to w nie wepchnac (przy tej ilosci edytowanie poszczegonych wipsow odpada).

Soryy edytowac nie moge bom sie nie rejestrowal

P.S. Moje GG 2208746 gdyby ktos chcial bezposrednio pomoc.

P.S. Jesli kolega Dryobates zechcialby sie skontaktowac bylbym dzwieczny.
L.

0

Nie wnikam w sam temat, ale pod Windę możesz użyć gawk - starszy kolega seda.

0
  1. Sed jest pod systemy uniksowe. Nie koniecznie linuksa (ja nie posiadam :P)
  2. Jest sed dla windowsa. Wpisz w google "sed for windows" a dostaniesz linki
  3. Jak już Marooned napisał, można użyć jakiejś odmiany awk, np. gawk. Jeszcze potężniejsze narzędzie. Nawet nie trzeba za mocno przerabiać tego co podałem.
  4. Kontakt do mnie jest w profilu, ale nie gwarantuję, że wiele pomogę, bo mam nawał roboty. Próbować możesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1