MTV Charts

Code-Stücke können hier veröffentlicht werden.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Ein 50-Zeiler, um die deutschen Charts ("Hitlist", Album, Dance, "Black", Video) von MTV zu parsen:

MTV-Charts

Code: Alles auswählen

import mtvgt

print mtvgt.get_charts('hitlist')
Ich bin natürlich offen für Verbesserungsvorschläge.


//Edit: Video-Charts gehen nun auch.
the more they change the more they stay the same
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Was ist ``retl``, ist das die Schwester von `änsel`? Ansonsten würde ich auch nicht unbedingt einen Parameter `type` nennen, um `type()` nicht zu überdecken. Sonst ist dazu nicht viel zu sagen, schaut ordentlich aus.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

`retl` = "return list", also Liste die zurückgegeben wird.

Das mit `type` habe ich auch gemerkt, bzw. Eclipse, allerdings fiel mir kein besserer Name ein, Ideen dazu (ich habe das nicht als Problem gesehen, da die Funktion gerade mal zwei Zeilen hat)?
the more they change the more they stay the same
BlackJack

@Dav1d: Komische Abkürzung plus Dateityp im Namen kodiert. Wenn Du es einfach `result` genannt hättest, bräuchte man nicht so viel drüber nachdenken. :-)
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

BlackJack hat geschrieben:@Dav1d: Komische Abkürzung plus Dateityp im Namen kodiert. Wenn Du es einfach `result` genannt hättest, bräuchte man nicht so viel drüber nachdenken. :-)
Richtig, geändert.
the more they change the more they stay the same
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Mein Gott, ich werde alt. Ich kenne glaube ich kein einziges dieser Lieder.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

jbs hat geschrieben:Mein Gott, ich werde alt. Ich kenne glaube ich kein einziges dieser Lieder.
So lange Lemmy noch auf der Bühne steht bin ich nicht alt. \m/
Liffi
User
Beiträge: 153
Registriert: Montag 1. Januar 2007, 17:23

Dav1d hat geschrieben: Das mit `type` habe ich auch gemerkt, bzw. Eclipse, allerdings fiel mir kein besserer Name ein, Ideen dazu (ich habe das nicht als Problem gesehen, da die Funktion gerade mal zwei Zeilen hat)?
category?
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

/me hat geschrieben:
jbs hat geschrieben:Mein Gott, ich werde alt. Ich kenne glaube ich kein einziges dieser Lieder.
So lange Lemmy noch auf der Bühne steht bin ich nicht alt. \m/
Da bin ich dann wieder zu alt :D
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Jetzt fehlt nur noch, daraus eine DataEngine für Plasma zu bauen - und ein Plasmoid ;-)

Wobei... seit Blümchens Rücktritt interessieren mich ja keine Charts mehr :mrgreen:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hyperion hat geschrieben:Jetzt fehlt nur noch, daraus eine DataEngine für Plasma zu bauen - und ein Plasmoid ;-)
Für dieses obsolete DE? :p
Hyperion hat geschrieben:Wobei... seit Blümchens Rücktritt interessieren mich ja keine Charts mehr :mrgreen:
Ja, seit Aaron Carter und Blümchen nicht mehr auf der Bühne sind, lohnt sich Musikhören doch gar nicht mehr :K
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Leonidas hat geschrieben: Für dieses obsolete DE? :p
Naja, kann man ja vielleicht auch in den Amarok integrieren - muss ja nicht nur auf dem Desktop rumschwirren, wenn man den nicht mag und was anderes nutzt :D
Leonidas hat geschrieben: Ja, seit Aaron Carter und Blümchen nicht mehr auf der Bühne sind, lohnt sich Musikhören doch gar nicht mehr :K
Fast... Hören ja, aber Videos / Charts... wozu?

Ok, Shakira vergaß ich... da macht die Kombi aus Gucken und Hören schon noch Sinn :mrgreen:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Liffi hat geschrieben:
Dav1d hat geschrieben: Das mit `type` habe ich auch gemerkt, bzw. Eclipse, allerdings fiel mir kein besserer Name ein, Ideen dazu (ich habe das nicht als Problem gesehen, da die Funktion gerade mal zwei Zeilen hat)?
category?
Mh ja, macht mehr Sinn :)
the more they change the more they stay the same
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

jbs hat geschrieben:Mein Gott, ich werde alt. Ich kenne glaube ich kein einziges dieser Lieder.
Ach Quatsch, wir werden niemals alt. Ich kenne immerhin noch 3 der ersten 10 Bands der deutschen Singlecharts :lol:
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich biete 5... wobei "kennen"... "zuordnen und schon mal gehört haben" trifft es da besser :-D

@Dav1d: Ich schlage vor, das Script noch mittels `argparse` zu pimpen! Zudem wäre imho eine Tabellenausgabe nicht verkehrt - JSON in einer Shell liest sich nicht wirklich gut :-D (`indent=2` macht es etwas besser)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Und es gibt ein schönes Tabellen-Layout mit `argparse` und `texttable` ;).
the more they change the more they stay the same
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

nett :-)

Aber: Dein Encoding-Workaround ist noch "kaputt":

Code: Alles auswählen

                table.add_row([chart[k].encode('utf-8')
                                if isinstance(chart[k], unicode)
                                else chart[k]
                               for k in header])

Bei kommen da solche Sachen bei raus:

Code: Alles auswählen

-----------+------------+---------------------------+------------------------------------
         4 |          6 | Tacabro                   | Tacatá                             
-----------+------------+---------------------------+------------------------------------
Wieso versuchst Du nicht beim Parsen einfach wirklich *alles* in Unicode zu wandeln? Dann könntest Du verlässlich UTF-8 als Ausgabeencoding angeben.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Habe das nun geändert, gefällt mir aber nicht, ich verstehe nicht warum mir `lxml.html` kein `unicode` gibt.
the more they change the more they stay the same
BlackJack

@Dav1d: Sollte es eigentlich sofern etwas ausserhalb von ASCII enthalten ist‽
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

@BlackJack, ja das tut es (deshalb auch mein naives `unicode()`). Allerdings gibt es mir "falsches" unicode, wenn ich die Website nicht manuell dekodiere.
Außerdem finde ich das recht komisch, dass nur unicode zurückgegeben wird, falls etwas anderes als Ascii enthalten ist.
the more they change the more they stay the same
Antworten