amarok - aktuellen Song auf Homepage

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
HugoEA
User
Beiträge: 4
Registriert: Montag 24. September 2007, 18:51

Montag 24. September 2007, 19:06

Moin erstmal...

Jup, wie der Titel schon sagt, würde ich gerne auf meinem kleinem "Ubuntu-Server" zuhause den aktuell gespielten Titel auf meiner lokalen Website anzeigen lassen.

nun habe ich schon dieses Skript gefunden:

Code: Alles auswählen

import SimpleHTTPServer
import BaseHTTPServer
import os

LISTEN = 8080

class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler):
	def do_GET(self):
		artist = os.popen("dcop amarok player artist").read()[0:-1]
		title = os.popen("dcop amarok player title").read()[0:-1]
		length=os.popen("dcop amarok player totalTime").read()[0:-1]
		self.send_response(200)
		self.send_header("content-type", "text/html")
		self.end_headers()
		self.wfile.write("Currently playing: "+artist+" - "+title+" - "+length)

def main():
	global artist, title
	server = BaseHTTPServer.HTTPServer(('', LISTEN), Handler)
	server.serve_forever()	

if __name__ == "__main__":
	main()
... ist auch alles schön und gut, jedoch wird hier ein eigener Server gestartet.
Ich habe aber bereits Apache2 bei mir laufen.
Wie kann man das nun irgendwie ummodeln, dass es auch auf meinem Apache läuft?
Ach so, das ganze sollte auch in PHP eingearbeitet werden können.

Für eine kleine Hilfe wäre ich sehr Dankbar, da mich dieses Problem zu Python geführt hat :D

Mit freundlichen Grüssen

HugoEA
HugoEA
User
Beiträge: 4
Registriert: Montag 24. September 2007, 18:51

Donnerstag 11. Oktober 2007, 13:06

Hallo nochmal

da jetzt schon über 130 Views vorhanden sind, interessiert es anscheinend doch jemand.

Jedoch möchte ich dazu sagen, dass dies mein 1. Kontakt mit Python (der Sprache, nicht dem Tier, davon haben wir welche zuhause ;)) ist und ich mich über hilfe in diesem Falle sehr freuen würde...

Mit freundlichen Grüssen

HugoEA
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 11. Oktober 2007, 13:23

Hallo HugoEA, willkommen im Forum,

Es ist ganz einfach. Du lässt dieses Programm laufen (Dauerschleife oder via cron) und schreibst die Ausgabe von ``dcop`` in eine HTML-Datei die im ``htdocs``-Ordner deines Apachen liegt.

Das wäre mal ein Ansatz. Es gibt natürlich auch noch viele andere. Meld dich, wenn dir dieser Ansatz nicht gefällt, dann kann ich dir noch einen anderen vorstellen.
Zuletzt geändert von Leonidas am Donnerstag 11. Oktober 2007, 13:39, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 11. Oktober 2007, 13:36

Leonidas hat geschrieben:Es ist ganz einfach. Du lässt dieses Programm laufen (Dauerschleife oder via cron) und schreibst die Ausgabe von ``dcop`` in eine HTML-Datei die im ``htdocs``-Ordner deines Apachen liegt.
Hallo HugoEA!

Die andere Variante, die ebenfalls nicht aufwändig ist --> CGI.

CGI ist zwar nicht für große Websites gedacht, aber für so einfache Aufgaben ist es ideal.

Du musst dein Skript nur ein wenig ändern um damit eine CGI-Ausgabe zu erstellen. Dann musst du dieses CGI-Skript nur noch in deinen Apachen einbinden. Beides wird dir hier erklärt: http://webpython.codepoint.net/introduction

Hier sind auch noch Infos darüber:
- http://docs.python.org/lib/module-cgi.html
- http://docs.python.org/lib/module-cgitb.html

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import cgitb; cgitb.enable()
import os


print "Content-Type: text/html"
print

artist = os.popen("dcop amarok player artist").read()[0:-1]
title = os.popen("dcop amarok player title").read()[0:-1]
length = os.popen("dcop amarok player totalTime").read()[0:-1]

print "Currently playing: %s - %s - %s" % (artist, title, length)
Allerdings wird dieses Skript wahrscheinlich nicht funktionieren, wenn es nicht aus einer Desktop-Umgebung heraus aufgerufen wird. Wie soll denn der Benutzer, unter dem der Apache ausgeführt wird, wissen, welcher Desktop angesprochen werden soll. Vielleicht funktioniert es aber doch??? (ausprobieren)

Wie auch immer. Leonidas Vorschlag ist besser. Alle paar Sekunden von einem Skript, welches über die aktuelle Desktopsession gestartet wird, eine HTML-Seite generieren lassen, ist dafür wahrscheinlich zuverlässiger.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 11. Oktober 2007, 13:41

gerold hat geschrieben:Leonidas Vorschlag ist besser. Alle paar Sekunden von einem Skript, welches über die aktuelle Desktopsession gestartet wird, eine HTML-Seite generieren lassen, ist dafür wahrscheinlich zuverlässiger.
Würde ich so pauschal nicht sagen, denn meine Lösung generiert auch I/O wenn gar keiner nötig ist. So wird etwa jede Minute eine HTML-Datei auf die Festplatte geschrieben, die dann womöglich nur zweimal am Tag von jemandem im Webbrowser abgerufen wird.

Aber ich als GNOME-User weiß auch nicht wie DCOP genau funktioniert, ich bin auf der ``dbus``-Seite ;)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mots
User
Beiträge: 9
Registriert: Dienstag 10. Juli 2007, 09:44

Sonntag 21. Oktober 2007, 11:55

Ich hab sowas ähnliches - nur für MPD mit mod_python für apache realisiert, zu bewundern ist es hier: mots.suroot.com/nowplaying

Allerdings kackt das ganze fürchterlich ab, wenn mein laptop grad nicht läuft (auf dem rennt MPD), und ich bin zu faul, das zu fixen ;D
HugoEA
User
Beiträge: 4
Registriert: Montag 24. September 2007, 18:51

Dienstag 5. Februar 2008, 01:39

Hallochen

Erstmal danke für die schnellen Antworten.
War lange nicht mehr da, und konnte es bis dato auch nicht ausprobieren, aber heute habe ich mich mal daran versucht.

Ich würde es gerne mit der cgi-bin Variante versuch,
Ich bekomme aber nur diese Ausgabe, wenn ich : "http://localhost/cgi-bin/ama.py" eingebe
Currently playing: - -
also scheint er ja schoneinmal was zu machen
Wen ich das Skript jedoch in der Knsole ausführe klappt es wunderbar

Danke mal das es da an den Rechten hapert, hat da einer eine Möglichkeit, wie ich dieses Prolem lösen kann?
Im Moment läuft alles unter htdochs als www-user.

Danke schoneinmal...

Mit freundlichen Grüssen

HugoEA
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 6. Februar 2008, 13:21

Wieso verwendest Du nicht das cdop-Modul für Python? Ist doch wesentlich sinnvoller ;)
HugoEA
User
Beiträge: 4
Registriert: Montag 24. September 2007, 18:51

Freitag 8. Februar 2008, 14:08

:shock:
sowas gibt es?

Kannst du mal ein Bsp., oder einen Link posten?

Danke...
lunar

Freitag 15. Februar 2008, 13:57

Die CGI-Variante kann nie funktionieren. KDE ist ein Multiuser-Desktop, der auch mehrere gleichzeitige Sitzungen unterstützt. Aus diesem Grund erhält jede Sitzung ihren eigenen DCOP-Dienst, um die Sitzungen voneinander zu isolieren.
Um Missbrauch zu verhindern, authentifiziert der DCOP-Dienst seine Clients, und verhindert so, dass ein DCOP-Server Befehle anderer Nutzer entgegen nimmt.

Da nun der Apache als unprivilegierter User www-data läuft, kann er nicht auf den DCOP-Server deiner KDE-Sitzung zugreifen. Es gibt zwar die Möglichkeit, DCOP-Befehle an alle laufenden Sessions zu senden, das funktioniert aus naheliegenden Gründen aber nur mit root-Privilegien.

Entweder lässt du Apache mit Root-Privilegien laufen, wofür dich jeder anständige Admin töten wird, oder du bastelst etwas kompliziertes mit sudo. Beide Lösungen sind nicht wirklich elegant.

Ich würde die Sache anders angehen. Amarok hat ja ein eigenes Skript-Interface. Ich würde einfach mal nach einem Amarok-Skript suchen, welches den aktuellen Titel in eine Datei schreibt. Das kannst du dann so anpassen, dass eine HTML-Datei mit der richtigen Formatierung erstellt wird, welche du dann im Apache einbinden kannst.
Antworten