Seite 1 von 1

Fehler, den ich nicht verstehe

Verfasst: Sonntag 28. Juni 2020, 17:08
von JakobPrie
Hallo,
es geht 1. um die Methode download_video (glaube ich zumindestens) und habe folgenden Fehler:

Code: Alles auswählen

unsupported operand type(s) for /: 'str' and 'str'
Die Klasse sieht wie folgt aus:

Code: Alles auswählen

from bs4 import BeautifulSoup
from pathlib import Path
import requests
from urllib.parse import urlparse
import subprocess

TAGESSCHAU_URL = "https://www.tagesschau.de/100sekunden/"
DOWNLOAD_PATH = "/home/pi/Desktop/LUNA/Zimmer/modules/resources"


def handle():
    try:
        print(f"Hole Video-URL von {TAGESSCHAU_URL} ...")
        url = get_video_url()
        print(f"Lade Video von {url} herunter ...")
        path = download_video(url)
        print(f"Video wurde gespeichert unter {path}")
        print(f"Konvertiere Video in Audio ...")
        convert_to_wav(path)
        print(f"Video kovertiert")
        luna.play(path)
    except Exception as e:
        print(f"Abbruch durch Fehler: {e}")

def get_content(url):
    response = requests.get(url)
    response.raise_for_status()
    return response.content

def get_video_url():
    soup = BeautifulSoup(get_content(TAGESSCHAU_URL), "html.parser")
    meta = soup.find("meta", {"name": "twitter:player:stream"})
    if not meta or not meta.has_attr("content"):
        raise ValueError("Konnte keine Infos zur Video-URL finden")
    return meta["content"]

def download_video(url):
    filename = 'tagesschau_100sec.mp4'
    path = DOWNLOAD_PATH / filename
    path.write_bytes(get_content(url))
    return path

def convert_to_wav(path):
    subprocess.call(["ffmpeg", "-i", path, "-ac", "2", "-f", "wav", "tagesschau_100sec.wav"])


if __name__ == "__main__":
    main()
2. Außerdem glaube ich, dass in def convert_to_wav() nicht ganz funktioniert, da der Pfad ja nicht vollständig ist. Die Datei liegt in /home/pi/Desktop/LUNA/Zimmer/modules/resources. Wie muss ich das dann angeben?
Vielen Dank für eure Hilfe!
Liebe Grüße,
Jakob

Re: Fehler, den ich nicht verstehe

Verfasst: Sonntag 28. Juni 2020, 17:15
von Sirius3
DOWNLOAD_PATH muss vom Typ Path sein, nicht str. Die Fehlerbehandlung in `handle` ist nicht sinnvoll und kann ersatzlos gelöscht werden. `main` ist nicht definiert.
Zu 2) was ist da deiner Meinung nach nicht vollständig?

Re: Fehler, den ich nicht verstehe

Verfasst: Sonntag 28. Juni 2020, 17:19
von JakobPrie
Sirius3 hat geschrieben: Sonntag 28. Juni 2020, 17:15 DOWNLOAD_PATH muss vom Typ Path sein, nicht str. Die Fehlerbehandlung in `handle` ist nicht sinnvoll und kann ersatzlos gelöscht werden. `main` ist nicht definiert.
Zu 2) was ist da deiner Meinung nach nicht vollständig?
Danke für deine Hilfe!
Wie bekomme ich denn DOWNLOAD_PATH zu einem Path-Typ?

Re: Fehler, den ich nicht verstehe

Verfasst: Sonntag 28. Juni 2020, 17:44
von Sirius3

Code: Alles auswählen

DOWNLOAD_PATH = Path("/home/pi/Desktop/LUNA/Zimmer/modules/resource")

Re: Fehler, den ich nicht verstehe

Verfasst: Montag 29. Juni 2020, 11:14
von __blackjack__
Bei der Umwandlung in WAV würde ich den Namen der Ausgabedatei noch ein bisschen mehr am Original ausrichten und nur die Dateiendung austauschen.

Code: Alles auswählen

def convert_to_wav(path):
    subprocess.run(
        [
            "ffmpeg",
            "-i",
            str(path),
            "-ac",
            "2",
            "-f",
            "wav",
            str(path.with_name(path.stem + ".wav"))
        ],
        check=True,
    )
Und am Ende bei `luna.play()` (was ist `luna`?) wird der *.mp4-Pfad angegeben und nicht der von der WAV-Datei. Soll das so?

`urlparse()` wird importiert, aber nirgends verwendet.

Re: Fehler, den ich nicht verstehe

Verfasst: Montag 29. Juni 2020, 19:44
von snafu
Der Code stammt ja in abgewandelter Form offensichtlich von hier:
viewtopic.php?f=1&t=48985#p368912

Wenn man den ändert, dann sollte man schon wissen, was man tut. Vor allem wenn die Datentypen nicht beachtet werden und die betroffene Funktion plötzlich die str-API vor sich hat, obwohl die Path-API erwartet wird, dann knallt es nun mal...

Re: Fehler, den ich nicht verstehe

Verfasst: Mittwoch 1. Juli 2020, 22:39
von JakobPrie
snafu hat geschrieben: Montag 29. Juni 2020, 19:44 Der Code stammt ja in abgewandelter Form offensichtlich von hier:
viewtopic.php?f=1&t=48985#p368912

Wenn man den ändert, dann sollte man schon wissen, was man tut. Vor allem wenn die Datentypen nicht beachtet werden und die betroffene Funktion plötzlich die str-API vor sich hat, obwohl die Path-API erwartet wird, dann knallt es nun mal...
Hi,
durchaus ist der Code von dort, dieses Thema hatte ich nämlich auch eröffnet ;D
Ich wollte es einfach mal probieren, da ich finde, dass mann am meisten beim Machen lernt. Und ich meine jetzt habe ich ja wieder was gelernt.
Ich lese mich jetzt mal in die beiden APIs ein und mal gucken, vlt schaff ich es ja dann.
Dennoch vielen Dank für den Tipp!
LG,
Jakob

Re: Fehler, den ich nicht verstehe

Verfasst: Mittwoch 1. Juli 2020, 22:43
von JakobPrie
__blackjack__ hat geschrieben: Montag 29. Juni 2020, 11:14 Bei der Umwandlung in WAV würde ich den Namen der Ausgabedatei noch ein bisschen mehr am Original ausrichten und nur die Dateiendung austauschen.

Code: Alles auswählen

def convert_to_wav(path):
    subprocess.run(
        [
            "ffmpeg",
            "-i",
            str(path),
            "-ac",
            "2",
            "-f",
            "wav",
            str(path.with_name(path.stem + ".wav"))
        ],
        check=True,
    )
Und am Ende bei `luna.play()` (was ist `luna`?) wird der *.mp4-Pfad angegeben und nicht der von der WAV-Datei. Soll das so?

`urlparse()` wird importiert, aber nirgends verwendet.
Hallo, Danke für die Hilfe, das werde ich so umsetzten. Bei Luna handelt es sich um ein Projekt eines Sprachassistenten, das ich gerade begonnen habe. Dabei stellt luna.* eine Schnittstelle zu einer anderen Klasse, auf welche alle Skills zugreifen können, damit man Sachen, wie "Textausgeben" nicht redundant behandelt. Demnentsprechend muss natürlich eine WAV-Datei aufgerufen werden, das werde ich gleich mal abwandeln ;D