Gemeinschaftsforum.com

OFDb => Korrekturhinweise und Ergänzungen für OFDb => Thema gestartet von: TakaTukaLand am 21 Juni 2025, 23:40:12

Titel: Cast & Regie aus der IMDb kopieren
Beitrag von: TakaTukaLand am 21 Juni 2025, 23:40:12
Es gibt ein Werkzeug, um komplette Castlisten aus der IMDb zu kopieren, das euch die Arbeit extrem erleichtern wird!

1. Lest diesen Thread:
https://www.gemeinschaftsforum.com/forum/index.php/topic,262139.30.html

2. Gebt Props an mali :anbeten:

3. Vergesst nicht voices / Synchronisation / archive footage / puppet player etc. aus dem kopierten Cast zu entfernen :happy3:
Titel: Re: Für alle die gerne Cast austauschen / ergänzen
Beitrag von: TakaTukaLand am 1 Juli 2025, 01:04:05
tl;dr

Hier die aktuelle Version des Scripts zum Kopieren des vollständigen Cast aus der IMDb.
javascript:(() => {
  const unwantedRoles = [
    'narrator',
    'arration',
    'voice',
    'synchronization',
    'scenes deleted',
    'archive footage',
    'archive material',
    'archive sound',
    'stock footage',
    'rumored',
    'credit only',
    'archivtonaufnahmen',
    'archivfilmmaterial',
    'nur stimme',
    'gelöschte szenen',
    'nur genannt',
    'synchronisation',
    'sprecher',
    'sprecherin',
    'unbestätigt',
    'angeblich',
    'erwähnung'
  ];

  function normalize(text) {
    return text.toLowerCase().replace(/\s+/g, ' ').trim();
  }

  function extractCast(selector, wanted = true) {
    const section = document.querySelector(selector);
    if (!section) return [];
    const items = section.querySelectorAll('li[data-testid="name-credits-list-item"]');
    const results = [];

    for (const li of items) {
      const nameEl = li.querySelector('a.name-credits--title-text-big');
      const fullText = li.innerText;
      const normalizedText = normalize(fullText);
      const matchedRole = unwantedRoles.find(role => normalizedText.includes(role));

      if (nameEl) {
        if (wanted && !matchedRole) {
          results.push(nameEl.textContent.trim());
        } else if (!wanted && matchedRole) {
          results.push(nameEl.textContent.trim() + ' (' + matchedRole + ')');
        }
      }
    }
    return results;
  }

  const mainCast = extractCast('[data-testid^="sub-section-amzn1.imdb.concept.name_credit_group"]');
  const restCast = extractCast('[data-testid^="second-sub-section-amzn1.imdb.concept.name_credit_group"]');
  const cast = [...mainCast, ...restCast];

  const excludedMain = extractCast('[data-testid^="sub-section-amzn1.imdb.concept.name_credit_group"]', false);
  const excludedRest = extractCast('[data-testid^="second-sub-section-amzn1.imdb.concept.name_credit_group"]', false);
  const excluded = [...excludedMain, ...excludedRest];

  if (cast.length === 0) {
    alert('Keine passenden Schauspielernamen gefunden.');
    return;
  }

  const result = cast.join('\n');
  const excludedHtml = excluded.map(e => '<div style="color:red">' + e + '</div>').join('');
  const castHtml = cast.map(name => '<div>' + name + '</div>').join('');

const popup = window.open('', '', 'width=1000,height=800');
popup.document.write(`
<html>
<head><title>IMDb Cast Liste</title></head>
<body style="font-family:sans-serif;font-size:14px;">
  <div style="display:flex;gap:40px;align-items:flex-start;">
    <div style="flex:1;white-space:pre-wrap;">
      <div style="font-weight:bold;margin-bottom:5px;">Haupt-Cast:</div>
      ${castHtml}
    </div>
    <div style="flex:1;white-space:pre-wrap;">
      <div style="color:red; font-weight:bold; margin-bottom:5px;">Ausgefilterte Rollen:</div>
      ${excludedHtml}
      <div style="margin-top:20px;font-weight:bold;color:#444;">
        <div>Anzahl Haupt-Cast: ${cast.length}</div>
        <div>Anzahl ausgefiltert: ${excluded.length}</div>
        <div>Gesamtzahl Einträge: ${cast.length + excluded.length}</div>
      </div>
      <button id="copyBtn" style="margin-top:20px;padding:16px 16px;font-size:14px;cursor:pointer;">
        Haupt-Cast in die Zwischenablage kopieren
      </button>
    </div>
  </div>
  <script>
    const resultText = ${JSON.stringify(result)};
    document.getElementById('copyBtn').addEventListener('click', () => {
      navigator.clipboard.writeText(resultText)
        .then(() => alert('Haupt-Cast kopiert!'))
        .catch(err => console.error('Clipboard error:', err));
    });
  </script>
</body>
</html>
  `);
})();

Das Script filtert nun auch Personen heraus, die nicht (über den Cast) in die OFDb aufgenommen werden.
Diese Filterung ist aktuell noch in der Testphase, die Liste (s. 1. Absatz im Code) ist möglicherweise noch nicht komplett und insbesondere die Funktion als "Narrator" kann evtl. eine Person zu unrecht herausfiltern. Dafür wird nun auch angezeigt welche Personen tatsächlich herausgefiltert werden und ggf. noch einmal selbst überprüft werden sollten.
Ergänzungen (z.B. auch andere Sprachen) oder Probleme mit dieser Filterliste bzw. dem Scipt können am besten im oben genannten Thread gemeldet werden. Der Code hier wird bei Änderungen aktuell gehalten.

Hier noch das Script zum Kopieren der Regie:
javascript:(() => {
  const section = document.querySelector('[data-testid="sub-section-amzn1.imdb.concept.name_credit_category.ace5cb4c-8708-4238-9542-04641e7c8171"]');
  const anchors = section ? section.querySelectorAll('a.name-credits--title-text-big') : [];
  const names = [...anchors].map(a => a.textContent.trim()).filter(Boolean);

  if (names.length === 0) {
    alert('Keine Regienamen gefunden.');
  } else {
    navigator.clipboard.writeText(names.join('\n'))
      .then(() => alert(`${names.length} Regiename(n) kopiert:\n` + names.join('\n')))
      .catch(() => alert('Fehler beim Kopieren in die Zwischenablage.'));
  }
})();


Anleitung:
Erstelle ein Lesezeichen in deinem Browser (für Cast & Regie jeweils ein eigenes) und gib den kompletten Code als Adresse ein (anstatt einer Webadresse). Einen Namen kannst du beliebig wählen.

Gehe auf einen IMDb-Filmeintrag und klicke auf den Pfeil neben "Hauptbesetzung"/"Cast" oder "Topbesetzung"/"Top cast" oder "Komplette Besetzung und alle Crew-Mitglieder"/"All cast & crew".

Sobald die Seite mit dem Cast vollständig geladen ist (bei besonders langen Cast-Listen ggf. die Seite vollständig runterscrollen), kann das Lesezeichen angeklickt werden. Es öffnet sich ein Pop-Up Fenster mit der kompletten Cast-Liste (bei besonders langen Listen mit mehreren tausend Darstellenden etwas abwarten, bis wirklich alle Namen erfasst wurden).
Falls ihr Pop-Ups generell verboten habt, müsste ihr es für die IMDb selektiv zulassen.
In dem Pop-Up ist nun auch ein Kopieren-Button integriert.

Bei der Regie öffnet sich kein Pop-Up Fenster. Die Namen werden direkt in die Zwischenablage kopiert und können in der OFDb bzw. im Forum eingefügt werden.

Edit: Neuerungen in blau, auch das Cast-Script wurde aktualisiert.
Titel: Re: Cast & Regie aus der IMDb kopieren
Beitrag von: TakaTukaLand am 6 Juli 2025, 20:56:19
Cast Script noch einmal ausgetauscht wegen Aufhübschung und ergänzten Zahlen zum Cast.

(https://i.ibb.co/ccyTh8yv/kosmetik.jpg)

Filterliste ergänzt um:
    'archive material',
    'sprecher',
    'sprecherin',
    'unbestätigt',
    'erwähnung'
Titel: Re: Cast & Regie aus der IMDb kopieren
Beitrag von: TakaTukaLand am 29 September 2025, 01:34:32
Filterliste ergänzt um "archive sound" und "narration".
Titel: Re: Cast & Regie aus der IMDb kopieren
Beitrag von: TakaTukaLand am 13 Oktober 2025, 13:57:37
Nach Änderungen der IMDb musste der Code komplett erneuert werden. Oben findet ihr die aktuelle Version.

Edit: Noch einmal ergänzt um Filterbegriffe 'synchronization' & 'angeblich'.
TinyPortal 2.0.0 © 2005-2020