Datenbank von epgd und epg von vdr sichern und im Bedarfsfall wiederherstellen`?
[epgd, epg2vdr] VDR-EPG mittels eventsview.sql "bearbeiten"
-
-
Try and Error...
Problem ist, wenn es nicht geht, hab ich keine Anhaltspunkte, was nicht passt...
Die eventsview.sql transferiert doch die Daten von der Datenbank zum VDR. Dann müsste die Datenbank doch immer intakt bleiben?
-
Du kannst natürlich deine view einspielen und das Ergebnis mal ausgeben lassen. Z.B. würde ich im Script den Namen der View ändern, damit es keine Konflikte gibt. Z.B. zu CREATE VIEW eventsview_test oder was auch immer. Die view einspielen
CodeView einspielen: mysql -u epg2vdr --password epg2vdr < eventsview_test.sql Ausführen und in Datei speichern (max. 20 Einträge): echo "select * from eventsview_test limit 20" | mysql -u epg2vdr --password epg2vdr > OUTPUT.txt Test view droppen: echo "drop view eventsview_test" | mysql -u epg2vdr --password epg2vdr
Das OUTPUT.txt kann man dann prüfen. Besser noch das select-Statement einschränken auf das Feld/die Felder, die man sehen will.
-
Vielen Dank.
Probiere das aus, sobald ich wieder am VDR bin.
-
Leider klappt schon das Einspielen nicht:
Codedarkwing@vdr01:~$ mysql -u epg2vdr --password epg2vdr < eventsview_test.sql Enter password: ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Null then case when sub_shorttext is Null then '' else case whe...' at line 82
Hier der Abschnitt:
Code/* case when epi_season is Null then '' else concat('|Staffel: ', cast(epi_season as char)) end, */ /* Beispiel: KKP S02 E04. Als der Start von Keefs neuer Initia… */ case when epi_season is Null then case when sub_shorttext is Null then '' else case when REGEXP_INSTR(sub_shorttext, 'S[0-9]+ ') = 0 then '' else concat('||Staffel: ', REGEXP_SUBSTR(sub_shorttext, 'S[0-9]+')) end end else concat('|Staffel: ', cast(epi_season as char)) end,
Kann es sein, dass sub_shorttext nicht geht, weil oben schon bearbeitet?
-
Jetzt hat es geklappt... Nun geht es ans testen
-
Bei einem Limit von 100000 hab ich dann Einträge erwischt:
Code8002862 26202 S19.2E-53-1105-4124 vdr 1707898100 P NULL NULL 81 1 Making the Soloist VR Free Solo am Les Drus in Frankreich S01 E02. Für Alex Honnold und Nico Hojac geht es ins Mont Blanc Massiv nach Frankreich, genauer zu einer Route des Les Druns. Für Alex Honnold und Nico Hojac geht es ins Mont Blanc Massiv nach Frankreich, genauer zu einer Route des Les Druns. Können sie am "Cerro Torre der Alpen" ihre Ziele in die Tat umsetzen? (2022) DVB 1708320000 1500 12 0 0x40, \n\nFür Alex Honnold und Nico Hojac geht es ins Mont Blanc Massiv nach Frankreich, genauer zu einer Route des Les Druns. Können sie am "Cerro Torre der Alpen" ihre Ziele in die Tat umsetzen? (2022)\n\nAltersempfehlung: ab 12\n\nStaffel: S01\n\nEpisode: E02\n\nEPG: DVB
Jetzt muss ich noch herausfinden, wie man das
noch bereinigt, damit am Ende auch Staffel: 1 rauskommt
-
-
Es geht nur um Sender, die keine ID haben und im Kurztext die Sxx Exx verstecken...
Ich denke es geht jetzt. Hab noch jeweils zwei Trim eingebaut.
Codecase when epi_season is Null then case when sub_shorttext is Null then '' else case when REGEXP_INSTR(sub_shorttext, 'S[0-9]+ ') = 0 then '' else concat('||Staffel: ', TRIM(LEADING '0' FROM TRIM(LEADING 'S' FROM REGEXP_SUBSTR(sub_shorttext, 'S[0-9]+')))) end end else concat('||Staffel: ', cast(epi_season as char)) end,
-
Wie muss ich das nun verändern, um nach mehreren Mustern zu suchen?
Oder gibt es eine bessere Alternative?
Ich hätte gerne die Möglichkeit das mit einem Skript zu machen:
Das Skript durchsucht die DB nach Eintragen, bei denen epi_season leer ist und sucht dann die Daten im sub_shorttext oder der Beschreibung und fügt die Werte dann in die DB ein.
-
Wie muss ich das nun verändern, um nach mehreren Mustern zu suchen?
Oder gibt es eine bessere Alternative?
Ich hätte gerne die Möglichkeit das mit einem Skript zu machen:
Das Skript durchsucht die DB nach Eintragen, bei denen epi_season leer ist und sucht dann die Daten im sub_shorttext oder der Beschreibung und fügt die Werte dann in die DB ein.
Evtl. hilft dir dieses Script eines für deine Bedürfnisse zu bauen:
Bash
Alles anzeigen#!/bin/bash fUsage() { action="$1" case "$action" in 5) $ECHO "$VERSION" exit 0 ;; esac $ECHO case "$action" in 4) $ECHO "wrong parameter!";; 3) $ECHO "mutual exclusive parameters!";; 2) $ECHO "missing parameter!";; 1) $ECHO "unknown parameter!";; esac $ECHO "\tusage:\t$my_name [ -a][ -d [ -D]][ -h] -p <pass> -s <string>[ -V]" $ECHO $ECHO "\t\t-a search in all tables" $ECHO "\t\t Default:" $ECHO "\t\t searchtimers, timers, timersdone, useevents" $ECHO "\t\t-d delete found timers and timersdone entries" $ECHO "\t\t-D delete found searchtimer entries" $ECHO "\t\t only in conjunction with -d" $ECHO "\t\t-h displays this help message" $ECHO "\t\t-s <string> search for <string>" $ECHO "\t\t-p <pass> password for epg2vdr database" $ECHO "\t\t-V displays version number and date" $ECHO exit $action } VERSION="version 0.01 / 30.01.2023" ECHO="/bin/echo -e" ECHON="/bin/echo -e -n" DBPRG="/usr/bin/mariadb" [ -x "$DBPRG" ] || DBPRG="/usr/bin/mysql" VDR="vdr" DB="epg2vdr" DBUSER="epg2vdr" A=0 D=0 while getopts adDhp:s:V OPTION do case "$OPTION" in a) A=1;; d) D=1;; D) D=2;; h) fUsage 0;; p) P=$OPTARG;; s) S=$OPTARG;; V) fUsage 5;; *) fUsage 4;; esac done shift `expr "$OPTIND" - 1` [ -z "$P" ] && fUsage 2 [ -z "$S" ] && fUsage 2 case "$A" in 1) TABLES=$( "$DBPRG" --host="${VDR}" --database="${DB}" \ --user="${DBUSER}" --password="$P" --batch \ --execute "SHOW tables;" \ | grep -vP "^(Tables_in|movie_media|series_media)" \ ) ;; *) TABLES="searchtimers timers timersdone useevents" ;; esac for _table in $TABLES # { do FIELDS=$( "$DBPRG" --host="${VDR}" --database="${DB}" \ --user="${DBUSER}" --password="$P" --batch \ --execute "SELECT COLUMN_NAME \ FROM information_schema.columns \ WHERE TABLE_NAME = '${_table}' \ AND TABLE_SCHEMA = '${DB}';" \ | grep -viP "^(COLUMN_NAME)$" \ ) _where="" _or="" _mfields="" _c="" _l="------------------------------------------------------------------------" for _field in $FIELDS # { do _where="${_where}${_or}${_field} RLIKE '${S}'" _or=" OR " _mfields="${_mfields}${_c}( CASE WHEN ${_field} RLIKE '${S}' \ THEN CONCAT( '\n', '${_field}:\n [', ${_field}, ']' ) END )" _c="," done # } RESULT=$( "$DBPRG" --host="$VDR" --database="$DB" \ --user="$DBUSER" --password="$P" \ --execute \ "SELECT CONCAT_WS( '\n', ${_mfields} ) AS MatchingFields \ FROM $_table WHERE ${_where} \G;" \ ) test -z "$RESULT" && continue $ECHO "${_table}:\n" $ECHO "$RESULT" $ECHO "$_l" if ( ( test "$_table" = "timers" || test "$_table" = "timersdone" ) \ && ( test $D -eq 1 || test $D -eq 2 ) ) \ || ( test "$_table" = "searchtimer" && test $D -eq 2 ) then $ECHO $ECHON "deleting found record from table [${_table}] - OK? [yn] " read yn case "$yn" in j|J|y|Y) # $ECHO \ "$DBPRG" --host="$VDR" --database="$DB" \ --user="$DBUSER" --password="$P" \ --execute \ "DELETE FROM $_table WHERE ${_where};" ;; esac fi done # }
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!