{"id":100001,"date":"2026-08-23T11:34:56","date_gmt":"2026-08-23T11:34:56","guid":{"rendered":"https:\/\/example.invalid\/?p=100001"},"modified":"2026-08-24T19:15:52","modified_gmt":"2026-08-24T17:15:52","slug":"dj-bemusterung-promoly-megamix-automatisieren","status":"publish","type":"post","link":"https:\/\/blog.mindkick.de\/?p=100001","title":{"rendered":"Automatische DJ-Bemusterung mit Promoly und Megamix: Download, ID3-Tags, Dropbox und E-Mail automatisieren"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\">Wer regelm\u00e4\u00dfig DJ-Bemusterungen bekommt, kennt das Spiel: Mail \u00f6ffnen, Download-Link anklicken, eventuell Feedback abgeben, ZIP herunterladen, entpacken, WAV-Dateien konvertieren, ID3-Tags korrigieren, Cover einbetten und die fertigen Titel anschlie\u00dfend irgendwo ablegen.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Bei einigen wenigen Bemusterungen ist das kein Problem. Kommen regelm\u00e4\u00dfig Promos von verschiedenen Plattformen, wird daraus aber schnell eine ziemlich stumpfe Besch\u00e4ftigung. Deshalb habe ich den Vorgang auf einem Linux-Server automatisiert. Das System verarbeitet derzeit <strong>Promoly<\/strong> und <strong>Megamix Promotion<\/strong>.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Das Ziel<\/h2>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>Fox Party DJ Team\/\r\n\u2514\u2500\u2500 Promo Titel\/\r\n    \u251c\u2500\u2500 2026-KW32\/\r\n    \u2502   \u251c\u2500\u2500 Artist - Titel.mp3\r\n    \u2502   \u2514\u2500\u2500 Artist - Titel (Extended Mix).mp3\r\n    \u2514\u2500\u2500 2026-KW34\/\r\n        \u251c\u2500\u2500 Die_JunX_Rhythmus_Der_Nacht_.mp3\r\n        \u251c\u2500\u2500 Vanessa_Mai__Ich_Fall_In_Love_.mp3\r\n        \u2514\u2500\u2500 RMC ONE - Be My Love (Original Mix).mp3<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Keine ZIP-Dateien, keine WAV-Dateien, keine JPG-Cover, keine JSON-Dateien und keine zus\u00e4tzlichen Unterordner. Das Cover steckt direkt im MP3.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Was die Automatisierung erledigt<\/h2>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>E-Mail\r\n   \u2193\r\nBemusterung erkennen\r\n   \u2193\r\nDownload-Link auslesen\r\n   \u2193\r\nDownload\r\n   \u2193\r\nZIP entpacken\r\n   \u2193\r\nWAV \u2192 MP3 320 kbit\/s CBR\r\n   \u2193\r\nID3-Tags korrigieren\r\n   \u2193\r\nCover einbetten\r\n   \u2193\r\nDropbox \/ Jahr-Kalenderwoche\r\n   \u2193\r\nUpload \u00fcberpr\u00fcfen\r\n   \u2193\r\nlokale Dateien l\u00f6schen\r\n   \u2193\r\nMail gelesen + Papierkorb\r\n   \u2193\r\nBenachrichtigungsmail<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Voraussetzungen<\/h2>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>sudo apt update\r\nsudo apt install -y \\\r\n    python3 \\\r\n    python3-venv \\\r\n    python3-pip \\\r\n    ffmpeg \\\r\n    unzip \\\r\n    rclone<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Projekt anlegen<\/h2>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/promoly-auto\r\ncd ~\/promoly-auto\r\n\r\npython3 -m venv .venv\r\nsource .venv\/bin\/activate\r\n\r\npip install playwright requests beautifulsoup4 mutagen\r\nplaywright install chromium<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Die Projektstruktur sieht ungef\u00e4hr so aus:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>promoly-auto\/\r\n\u251c\u2500\u2500 .venv\/\r\n\u251c\u2500\u2500 promoly_worker.py\r\n\u251c\u2500\u2500 megamix_worker.py\r\n\u251c\u2500\u2500 promoly_tags.py\r\n\u251c\u2500\u2500 promoly_run.py\r\n\u2514\u2500\u2500 flatten_dropbox.py<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Konfiguration<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Zugangsdaten geh\u00f6ren nicht direkt in die Python-Skripte. Die Konfiguration liegt beispielsweise unter <code>~\/.config\/promoly-auto\/config.json<\/code>.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>{\r\n  \"imap_host\": \"imap.example.de\",\r\n  \"imap_port\": 993,\r\n  \"imap_user\": \"BENUTZERNAME\",\r\n  \"imap_password\": \"PASSWORT\",\r\n  \"imap_folder\": \"INBOX\",\r\n  \"smtp_host\": \"smtp.example.de\",\r\n  \"smtp_port\": 465,\r\n  \"notify_from\": \"dj@example.de\",\r\n  \"notify_to\": \"bemusterung@example.de\",\r\n  \"trash_folder\": \"Trash\",\r\n  \"rclone_target\": \"dropbox:Fox Party DJ Team\/Promo Titel\",\r\n  \"max_per_run\": 2,\r\n  \"max_megamix_per_run\": 2\r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/.config\/promoly-auto\r\nchmod 700 ~\/.config\/promoly-auto\r\nchmod 600 ~\/.config\/promoly-auto\/config.json<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Bei 1blu sind beispielsweise IMAP \u00fcber <code>imap.1blu.de:993<\/code> und SMTP \u00fcber <code>smtp.1blu.de:465<\/code> mit SSL nutzbar.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Dropbox mit rclone anbinden<\/h2>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>rclone config\r\nrclone lsd \"dropbox:Fox Party DJ Team\"<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Das Ziel lautet <code>dropbox:Fox Party DJ Team\/Promo Titel<\/code>.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Promoly automatisieren<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Promoly ist der komplexere Teil, weil ein einfacher HTTP-Download nicht ausreicht. Die E-Mails kommen beispielsweise von <code>content@promolymail.com<\/code>. Beim Abrufen \u00fcber IMAP sollte <code>BODY.PEEK[]<\/code> verwendet werden, damit die Nachricht nicht schon durch das Lesen als gesehen markiert wird.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Feedback automatisch abgeben<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Bei Bedarf wird \u00fcber Playwright ein neutrales Feedback abgegeben: 3 Sterne und beispielsweise <em>Thanks for the promo. Downloaded for review.<\/em>. Vorher wird gepr\u00fcft, ob bereits <code>Your Feedback<\/code> angezeigt wird.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">MP3 bevorzugen, WAV als Fallback<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Der Worker sucht bevorzugt <code>Download Zip - MP3<\/code>. Ist das nicht verf\u00fcgbar, wird <code>Download Zip - WAV<\/code> verwendet. Weil Promoly die Download-Men\u00fcs teilweise dynamisch erzeugt, sollte nach klickbaren Elementen wie <code>button, a, [role='menuitem'], [role='option']<\/code> gesucht werden.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">WAV automatisch nach MP3 konvertieren<\/h2>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>ffmpeg \\\r\n  -i \"Titel.wav\" \\\r\n  -codec:a libmp3lame \\\r\n  -b:a 320k \\\r\n  \"Titel.mp3\"<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">ID3-Tags<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mit <code>mutagen<\/code> werden Artist, Title, Year, Genre, Label, Version beziehungsweise Kommentar und das Cover gepflegt. Versionen wie Original Mix, Extended Mix, Radio Edit, Instrumental oder DJ Version k\u00f6nnen aus dem Dateinamen erkannt werden. Das Cover wird als APIC direkt in das MP3 geschrieben, gespeichert wird als ID3v2.3.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Megamix Promotion automatisieren<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Megamix ist einfacher, weil die Mail direkte Download-Links enth\u00e4lt. Die Bemusterungen kommen beispielsweise von <code>promotion@megamix-promotion.de<\/code>. Die Mail enth\u00e4lt Interpret, Titel, Label, Cover und einen Link mit <code>\/protool\/load.php?ID=<\/code>. Daf\u00fcr reicht <code>requests<\/code>.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Abgelaufene Links erkennen<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c4ltere Megamix-Links k\u00f6nnen trotz HTTP 200 eine HTML-Fehlerseite liefern. Deshalb zus\u00e4tzlich den Content-Type pr\u00fcfen:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>ctype = response.headers.get(\r\n    \"Content-Type\", \"\"\r\n).split(\";\")[0].lower()\r\n\r\nif ctype == \"text\/html\":\r\n    # Fehlerseite statt Audiodatei<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Megamix-Tags erhalten<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Megamix liefert teilweise bereits brauchbar getaggte MP3s. Deshalb werden vorhandene Tags nicht pauschal gel\u00f6scht. Artist, Title, Label, Year und Cover werden sicher aktualisiert; Genre und andere vorhandene Informationen bleiben erhalten, wenn die Mail daf\u00fcr keinen besseren Wert liefert. Bereits gelieferte MP3-Dateien werden nicht erneut encodiert.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Nur MP3 direkt im KW-Ordner<\/h2>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>2026-KW34\/\r\n\u251c\u2500\u2500 RMC ONE - Be My Love (Original Mix).mp3\r\n\u251c\u2500\u2500 RMC ONE - Darkest Night (Original Mix).mp3\r\n\u251c\u2500\u2500 RMC ONE - I Dont Wanna Go (Original Mix).mp3\r\n\u251c\u2500\u2500 RMC ONE - No Regrets (Original Mix).mp3\r\n\u251c\u2500\u2500 Die_JunX_Rhythmus_Der_Nacht_.mp3\r\n\u2514\u2500\u2500 Vanessa_Mai__Ich_Fall_In_Love_.mp3<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Doppeluploads vermeiden<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nicht den kompletten Kampagnenordner mit rclone hochladen. In einer fr\u00fchen Version lag die Originaldatei im Kampagnenordner und die fertige MP3 zus\u00e4tzlich unter <code>files\/<\/code>. Dadurch konnte derselbe Titel zweimal in Dropbox landen.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Die fertige Version \u00fcbertr\u00e4gt deshalb ausschlie\u00dflich die bearbeiteten MP3-Dateien einzeln mit <code>rclone copyto<\/code> direkt in den jeweiligen Kalenderwochen-Ordner:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>rclone copyto \\\r\n  \"\/tmp\/fertiger-titel.mp3\" \\\r\n  \"dropbox:Fox Party DJ Team\/Promo Titel\/2026-KW34\/fertiger-titel.mp3\"<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Upload einer einzelnen MP3 korrekt \u00fcberpr\u00fcfen<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nach der Umstellung auf die flache Struktur <code>YYYY-KWxx\/Titel.mp3<\/code> ist eine wichtige Besonderheit aufgefallen: <code>rclone check<\/code> eignet sich hier nicht f\u00fcr die Pr\u00fcfung einer einzelnen Remote-Datei, weil es Verzeichnisse erwartet. Bei einem direkten Dateipfad kann dann ein Fehler wie <code>is a file not a directory<\/code> entstehen.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Deshalb wird jede hochgeladene MP3 mit <code>rclone lsjson --stat<\/code> gepr\u00fcft. Anschlie\u00dfend wird die Dateigr\u00f6\u00dfe der Remote-Datei mit der lokalen MP3 verglichen.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>rclone lsjson \\\r\n  \"dropbox:Fox Party DJ Team\/Promo Titel\/2026-KW34\/Titel.mp3\" \\\r\n  --stat<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Die Python-Logik sieht sinngem\u00e4\u00df so aus:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>r = subprocess.run(\r\n    [\r\n        \"rclone\",\r\n        \"lsjson\",\r\n        remote,\r\n        \"--stat\"\r\n    ],\r\n    capture_output=True,\r\n    text=True\r\n)\r\n\r\nif r.returncode != 0:\r\n    raise RuntimeError(\r\n        f\"Dropbox-Datei nicht gefunden: {mp3.name}\"\r\n    )\r\n\r\nremote_info = json.loads(r.stdout)\r\nremote_size = int(remote_info.get(\"Size\", -1))\r\nlocal_size = mp3.stat().st_size\r\n\r\nif remote_size != local_size:\r\n    raise RuntimeError(\r\n        f\"Dropbox-Gr\u00f6\u00dfe stimmt nicht: {mp3.name}\"\r\n    )<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Erst wenn <strong>jede einzelne MP3 einer Bemusterung<\/strong> erfolgreich hochgeladen und gepr\u00fcft wurde, gilt die Mail als vollst\u00e4ndig verarbeitet.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Mail wirklich erst nach dem letzten Track verschieben<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Bei Mehrtitel-Releases ist die Reihenfolge besonders wichtig. Der Worker arbeitet die MP3-Dateien in einer Schleife ab. Erst nachdem der letzte Titel erfolgreich hochgeladen und mit <code>lsjson --stat<\/code> gepr\u00fcft wurde, werden die lokalen Promo-Dateien gel\u00f6scht und die Quellmail gelesen markiert und nach <code>Trash<\/code> verschoben.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>Track 1\r\n\u2192 Upload\r\n\u2192 Remote-Datei pr\u00fcfen\r\n\u2192 OK\r\n\r\nTrack 2\r\n\u2192 Upload\r\n\u2192 Remote-Datei pr\u00fcfen\r\n\u2192 OK\r\n\r\n...\r\n\r\nalle Tracks OK\r\n\u2192 lokale Arbeitsdateien l\u00f6schen\r\n\u2192 Mail als gelesen markieren\r\n\u2192 Mail nach Trash verschieben<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Diese Reihenfolge verhindert, dass eine Mail bereits verschwindet, obwohl nur ein Teil eines Releases erfolgreich verarbeitet wurde.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Zentrale Steuerung<\/h2>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>Dropbox-Bestand vorher erfassen\r\n\u2193\r\nPromoly-Worker starten\r\n\u2193\r\nalle Tracks der Bemusterung hochladen\r\n\u2193\r\njede einzelne Remote-MP3 pr\u00fcfen\r\n\u2193\r\nerst danach Mail nach Trash\r\n\u2193\r\nMegamix-Worker starten\r\n\u2193\r\nauch dort alle Tracks einzeln pr\u00fcfen\r\n\u2193\r\nDropbox-Bestand nachher erfassen\r\n\u2193\r\nneue MP3s bestimmen\r\n\u2193\r\nBenachrichtigungsmail versenden<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Eine Mehrtitel-Promo wird also erst dann abgeschlossen, wenn wirklich <strong>alle<\/strong> enthaltenen MP3-Dateien erfolgreich verarbeitet wurden. Schl\u00e4gt die Pr\u00fcfung bei einem Titel fehl, bleibt die Mail im Posteingang und wird beim n\u00e4chsten Lauf erneut versucht.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Die Sammelmail basiert auf dem Unterschied zwischen dem Dropbox-Bestand vor und nach dem Lauf. Dadurch werden nur tats\u00e4chlich neu hinzugekommene MP3-Dateien gemeldet.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Bearbeitungsmenge begrenzen<\/h2>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>\"max_per_run\": 2,\r\n\"max_megamix_per_run\": 2<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">F\u00fcr einen einmaligen Altbestand kann <code>.\/promoly_run.py --all<\/code> verwendet werden.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Automatischer Start mit systemd<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Service:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>[Unit]\r\nDescription=Promoly DJ Promo Automation\r\nAfter=network-online.target\r\nWants=network-online.target\r\n\r\n[Service]\r\nType=oneshot\r\nUser=USER\r\nWorkingDirectory=\/home\/USER\/promoly-auto\r\nExecStart=\/home\/USER\/promoly-auto\/.venv\/bin\/python \/home\/USER\/promoly-auto\/promoly_run.py --once<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Timer:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>[Unit]\r\nDescription=Check DJ promos\r\n\r\n[Timer]\r\nOnBootSec=2min\r\nOnUnitActiveSec=10min\r\nRandomizedDelaySec=30\r\nPersistent=true\r\n\r\n[Install]\r\nWantedBy=timers.target<\/code><\/pre>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>sudo systemctl daemon-reload\r\nsudo systemctl enable --now promoly-auto.timer\r\nsystemctl status promoly-auto.timer --no-pager<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Logs ansehen<\/h2>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>journalctl -u promoly-auto.service -n 150 --no-pager\r\njournalctl -u promoly-auto.service -f<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Bestehenden Bestand aufr\u00e4umen<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ein separates <code>flatten_dropbox.py<\/code> kann alte Kampagnen-Unterordner aufl\u00f6sen. Wichtig: zuerst Trockenlauf, dann erst ausf\u00fchren.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>.\/flatten_dropbox.py\r\n.\/flatten_dropbox.py --execute<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Dateien au\u00dferhalb der <code>YYYY-KWxx<\/code>-Struktur sollten dabei grunds\u00e4tzlich nicht automatisch angefasst werden.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Sicherheit<\/h2>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>chmod 700 ~\/.config\/promoly-auto\r\nchmod 600 ~\/.config\/promoly-auto\/config.json<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Pers\u00f6nliche Promo-Links sollten nicht \u00f6ffentlich protokolliert werden.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Das Ergebnis<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Im Normalfall muss eine neue Promo-Mail nicht mehr manuell angefasst werden. Download, gegebenenfalls WAV-Konvertierung, ID3-Tags, Cover, der direkte Upload in <code>YYYY-KWxx<\/code>, die Einzeldatei-Pr\u00fcfung per <code>rclone lsjson --stat<\/code>, das Aufr\u00e4umen, das Verschieben der Mail nach <code>Trash<\/code> und die Benachrichtigung laufen automatisch.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Mail rein \u2013 fertig getaggte Musik raus.<\/strong><\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Promo-Mails automatisch auswerten, Tracks herunterladen, WAV in MP3 konvertieren, ID3-Tags und Cover setzen, nach Kalenderwochen in Dropbox ablegen und die Bemusterungsmail archivieren.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1,122,134,133],"tags":[],"class_list":["post-100001","post","type-post","status-publish","format-standard","hentry","category-allgemeines","category-apps","category-computer-co","category-diy-projekte"],"jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blog.mindkick.de\/index.php?rest_route=\/wp\/v2\/posts\/100001","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mindkick.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mindkick.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mindkick.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mindkick.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=100001"}],"version-history":[{"count":1,"href":"https:\/\/blog.mindkick.de\/index.php?rest_route=\/wp\/v2\/posts\/100001\/revisions"}],"predecessor-version":[{"id":100002,"href":"https:\/\/blog.mindkick.de\/index.php?rest_route=\/wp\/v2\/posts\/100001\/revisions\/100002"}],"wp:attachment":[{"href":"https:\/\/blog.mindkick.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=100001"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mindkick.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=100001"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mindkick.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=100001"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}