Python Code zum erstellen eines Dienstes

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Veyilla
User
Beiträge: 1
Registriert: Sonntag 5. März 2023, 23:14

Hallo,

mir ist klar dass ich hier im Forum neu bin, aber ich komme bei meinem Projekt aktuell irgendwie nicht weiter und ich weiß nicht so recht wie ich das als Anfänger lösen soll.

Ich habe mir in den Kopf gesetzt für twitch.tv einen Python Code zu schreiben der auf die öffentlichen Daten zugreift, in dem Falle auf alle sprachen von Bethesda und dass dabei noch die Info ausgegeben werden soll, auf Windows 11, das Drops aktiviert sind, für das Spiel The Elder Scrolls Online, mit immer wiederkehrender überprüfung ob irgendeiner der Channel von Bethesda, Bethesda_DE usw online sind. Außerdem soll der Code am ende einmalig registriert werden, damit dieser als DIenst unter Twitch Alert Service z.B. immer im Hintergrund mitläuft. Es wäre auch schön evtl diesen erweitern zu können auf 2-3 normale Streamer die in dem bereich unterwegs sind, falls mal kein offizieller Stream verfügbar ist sondern eben ein allgemeiner Drop verfügbar ist.
Hab es halt satt das immer zu verpassen ^^

Benutzt hab ich PyCharm, die Oberfläche erscheint mir so weit ganz angenehm. Der Code an sich funktioniert, es gibt keine fehler in PyCharm, aber nach der Dienst Registrierung läuft der Code nicht dauerhaft als Dienst im Hintergrund, sondern wird immer sofort beendet...

Vielleicht mag mir hier jemand helfen? Es ist mein erstes Projekt mit Coding, habe höchstens vor etwa 20 Jahren mal HTML verwendet, was ja damit gar nichts zu tun hat.

Hier mein Python Code dazu:

Code: Alles auswählen

# Import required modules
import twitch
from win10toast import ToastNotifier
import servicemanager
import win32serviceutil
import win32service
import win32event
import sys
import os

# Set up Twitch API
client = twitch.TwitchClient(client_id='deine_twitch_API')

# Set up Windows Toast notifier
toaster = ToastNotifier()

# Set up your desired streamer name and language codes
streamer_name = 'Bethesda'
language_codes = ['de', 'en', 'fr', 'it', 'es', 'ja', 'nl']  # Replace with desired language codes


class MyService(win32serviceutil.ServiceFramework):
    _svc_name_ = 'TwitchAlarm'
    _svc_display_name_ = 'Twitch Alarm Service'
    _svc_description_ = 'Prüft, ob ein Twitch-Streamer online ist und The Elder Scrolls Online spielt'

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)

    def svc_stop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)

    @staticmethod
    def svc_do_run():
        # Check if the service is already running
        if servicemanager.RunningAsService():
            # Call your main function here
            while True:
                # Check each language code for streamer status
                for language_code in language_codes:
                    # Get streamer information from Twitch API
                    streamer = client.streams.get_stream_by_user(streamer_name, language=language_code)

                    # If streamer is online and playing The Elder Scrolls Online
                    if streamer and streamer['game'] == 'The Elder Scrolls Online':
                        # Check if streamer has drops enabled
                        if streamer['is_playlist']:
                            drop_status = "Drops sind aktiviert!"
                        else:
                            drop_status = "Drops sind deaktiviert."

                        # Set up toast message
                        message = f'{streamer_name} ist jetzt online und spielt The Elder Scrolls Online in ' \
                                  f'{language_code}!\n{drop_status}'

                        # Show toast notification
                        toaster.show_toast('Twitch Alarm', message)


if __name__ == '__main__':
    # Install and start the service
    try:
        win32serviceutil.InstallService(
            None,
            'TwitchAlertService',
            'Twitch Alert Service',
            startType=win32service.SERVICE_AUTO_START,
            exeName=f'"{sys.executable}" "{os.path.abspath(__file__)}"'
        )
        win32serviceutil.StartService('TwitchAlertService')
        print('Service installed and started successfully')
    except Exception as e:
        print('Error installing or starting service:', e)
Die API habe ich nun mal extra raus genommen, ist jedoch vorhanden. Mit dem Oauth komme ich nicht klar, die brauche ich meiner Meinung nach auch nicht, weil ich will ja nur auf das zuhreifen was Öffentlich ist, in dem Fall was jeder sehen kann mit dem Stream und der Drops.
Hoffe es ist nichts zu kompliziertes :)

Liebe Grüße Veyilla
Antworten