Seite 1 von 1

Aktueller Titel > Stream lesen / php öffnen

Verfasst: Montag 10. Dezember 2007, 12:49
von tjuXx
Hallo,

ich möchte mir ein kleinen Tool schrieben, welches mir den aktuellen Titel eines Internetstreams anzeigt.

Meine erste Frage: Kann ich die Daten aus dem Stream auslesen(*.nsv)???

Die zweite Möglichkeit wäre den Titel aus der Playlist auszulesen:
http://schueler.homeip.net/project-reloaded/index.php

Wie kann ich die Php-Datei vom Sever abrufen und einlesen. Kenne mich mit Webanwendungen leider noch gar nicht aus.

Über Hilfe freue ich mich sehr.....

LG tjuXx

Verfasst: Montag 10. Dezember 2007, 13:24
von schlangenbeschwörer
Gug mal in der Doku unter urllib(, htmllib). Damit kannst du die Seite einlesen. Je nachdem, wie einfach du die Daten findest, kannst du dann entweder mit re suchen, oder das ganze fachmännisch mit beautiful soup zerlegen. Du könntest bei der Seite auch direkt die aktuelle Zeit anhängen, dann hast du noch weniger überflüssige Daten.

Verfasst: Montag 10. Dezember 2007, 13:25
von Y0Gi
Was den Stream angeht solltest du dir Dokumentation zu dessen Format beschaffen und schauen, ob da relevante extrahierbare Informationen enthalten sind.

Bei der zweiten Idee ist es hier irrelevant, ob die Datei serverseitig in PHP geschrieben ist, da der Server letztlich ein HTML-Dokument ausliefert. Dieses kannst du wie folgt in einen String einlesen:

Code: Alles auswählen

import urllib2

URL = 'http://schueler.homeip.net/project-reloaded/index.php'

if __name__ == '__main__':
    try:
        data = urllib2.urlopen(URL).read()
    except urllib2.URLError, e:
        print 'Fehler:', e

Verfasst: Montag 10. Dezember 2007, 14:07
von schlangenbeschwörer
Ein möglicher weg mit re und noch ohne On Air:

Code: Alles auswählen

re.findall('<td class="artist".*?>(.*?)<', data)[0]

Verfasst: Montag 10. Dezember 2007, 15:36
von schlangenbeschwörer
Alternativ:

Code: Alles auswählen

import urllib2, time

url = time.strftime("http://schueler.homeip.net/project-reloaded/search.php?day=%d&month=%m&hour=%H&minute=%M")

if __name__ == '__main__':
    try:
        data = urllib2.urlopen(url).read()
        artist = re.findall('<td class="artist" .*?>(.*?)</td>', data)
        title = re.findall('<td class="title" .*?>(.*?)</td>', data)
        print "%s von %s" %(title, artist)
    except urllib2.URLError, e:
        print 'Fehler:', e

Verfasst: Mittwoch 12. Dezember 2007, 16:29
von tjuXx
super, vielen Dank...da muss ich ja nicht mehr viel machen :)

der Vollständigheit halber:

der Code von "schlangenbeschwörer" gibt manchmal die zwei Titel aus. Habe daher Line 10 geändert:

Code: Alles auswählen

print "%s von %s" %(title[-1], artist[-1])
ausserdem muss "re" noch importiert werden.

jetzt muss nur noch ne kleine GUI her....ich denke das bekomme ich alleine hin :)

Gruß tjuXx

Verfasst: Mittwoch 12. Dezember 2007, 16:49
von Leonidas
Siehe What's On Air, du kannst gerne ein Plugin dafür schreiben.

Verfasst: Donnerstag 13. Dezember 2007, 15:05
von tjuXx
Siehe What's On Air
Was ist "What's On Air"??? wo finde ich es.

LG tjuXx

Verfasst: Donnerstag 13. Dezember 2007, 15:17
von schlangenbeschwörer

Verfasst: Donnerstag 13. Dezember 2007, 16:26
von tjuXx
kann mich da gerne mal drann versuchen....... bin noch Anfänger, und bin daher nicht sicher ob der Code richtig ist und es so funktionieren kann???

Ich habe versucht mich ein Bisschen an den anderen Parsern (sagt man das so??) zu orientieren.

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-

import base, urllib2, time, re

class ProjectReloadedParser(base.Stationbase):
    """Parser for Project-Reloaded
    Homepage: http://www.project-reloaded.com/
    Stream  : http://62.26.4.172:8010/;stream.nsv
              rtsp://62.26.161.89/projectreloaded$livestream.wma"""

    def __init__(self, url=time.strftime('http://schueler.homeip.net/project-reloaded/search.php?day=%d&month=%m&hour=%H&minute=%M'):
        base.StationBase.__init__(self, url)

    def parse(self):
        data   = urllib2.urlopen(url).read()
        artist = re.findall('<td class="artist" .*?>(.*?)</td>', data)
        self.artist = artist[-1]
        title  = re.findall('<td class="title" .*?>(.*?)</td>', data)
        self.title  = title[-1]

    def current_track(self):
        return "%s - %s" %(self.artist, self.title)

Parser = ProjectReloadedParser

if __name__ == '__main__':
    base.test_parser(Parser, 'projectreloaded.html')
Gruß tjuXx

Verfasst: Freitag 14. Dezember 2007, 00:58
von Leonidas
Danke, werde es mir morgen ansehen und dann committen.

Verfasst: Freitag 14. Dezember 2007, 15:27
von Leonidas
Ich habe es nach einigen Veränderungen in Revision 289 hinzugefügt.

Verfasst: Freitag 14. Dezember 2007, 15:48
von tjuXx
super.....ich habe mir den Installer "whatsonair-0.8.7.exe" runtergeladen und installiert. Beim ausführen von "seewhatsonair.exe" bekomme ich folgenden Fehler:
Komponente nicht gefunden

"Die Anwendung konnte nicht gestartet werden, weil libglib-2.0-0.dll nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben."
Neuintallation behebt das Problem nicht. Könnt ihr mir helfen???

Verfasst: Freitag 14. Dezember 2007, 15:56
von tjuXx
habe gerade das logfile gefunden:
Traceback (most recent call last):
File "seewhatsonair.py", line 13, in ?
File "gtk\__init__.pyo", line 33, in ?
File "gobject.pyo", line 9, in ?
File "gobject.pyo", line 7, in __load
ImportError: DLL load failed: Das angegebene Modul wurde nicht gefunden.

Verfasst: Freitag 14. Dezember 2007, 16:11
von Leonidas
Ja, das GTK-Interface braucht natürlich PyGTK und GTK+. Das muss unter Windows meist selbst installiert werden (GTK+ reicht wohl).

Edit: Und nein, nimm besser die SVN-Version. Das Release ist uralt, aber ich komme nicht dazu ein neues zu machen, denn dann müsste ich erstmal den Code aufräumen.

Verfasst: Montag 17. Dezember 2007, 12:59
von tjuXx
danke...es klappt jetzt :)

Hätte noch ein Feature Request. Kann man den aktuellen Titel einer bestimmten Station als Fenstertitel nutzen. Der Vorteil: Er wird auch in der Taskleiste angezeigt.

schreibe wenn ich Zeit finde noch ein paar weitere Parser.

Gruß tjuXx

Verfasst: Montag 17. Dezember 2007, 18:29
von Leonidas
tjuXx hat geschrieben:Hätte noch ein Feature Request. Kann man den aktuellen Titel einer bestimmten Station als Fenstertitel nutzen. Der Vorteil: Er wird auch in der Taskleiste angezeigt.
Gute Idee, kannst du den in den Tracker reinschreiben? Sonst vergesse ich den. Ansonsten ist es eigentlich ein recht simpler Patch, nur weiß ich nicht wann ich dazu komme den zu implementieren. Aber ich habe schon mal Release 0.8.8 rausgegeben :)
tjuXx hat geschrieben:schreibe wenn ich Zeit finde noch ein paar weitere Parser.
Super. Ich habe einige Änderungen am Scraping-Code gemacht, mal sehen wie sich das entwickelt. Besonders die CSS-Selektoren finde ich angenehm.

Optimal wäre es in Zukunft html5lib + ElementTree + CSS Selektoren zu verwenden, mal sehen ob das sich als sinnvoll erweist.