OFDb

Cast & Regie aus der IMDb kopieren

Begonnen von TakaTukaLand, 21 Juni 2025, 23:40:12

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

TakaTukaLand

21 Juni 2025, 23:40:12 Letzte Bearbeitung: 1 Juli 2025, 01:04:50 von TakaTukaLand
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:

TakaTukaLand

1 Juli 2025, 01:04:05 #1 Letzte Bearbeitung: 18 Juli 2025, 21:50:51 von TakaTukaLand Grund: Neuerungen
tl;dr

Hier die aktuelle Version des Scripts zum Kopieren des vollständigen Cast aus der IMDb.
javascript:(() => {
  const unwantedRoles = [
    'narrator',
    'voice',
    'scenes deleted',
    'archive footage',
    'archive material',
    'stock footage',
    'rumored',
    'credit only',
    'archivtonaufnahmen',
    'archivfilmmaterial',
    'nur stimme',
    'gelöschte szenen',
    'nur genannt',
    'synchronisation',
    'sprecher',
    'sprecherin',
    'unbestätigt',
    '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.full-credits-page-list-item');
    const results = [];

    for (const li of items) {
      const nameEl = li.querySelector('a.ipc-link.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-cast"]');
  const restCast = extractCast('[data-testid="second-sub-section-cast"]');
  const cast = [...mainCast, ...restCast];

  const excludedMain = extractCast('[data-testid="sub-section-cast"]', false);
  const excludedRest = extractCast('[data-testid="second-sub-section-cast"]', 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 onclick="copyToClipboard()" style="margin-top:20px;padding:16px 16px;font-size:14px;cursor:pointer;">Haupt-Cast in die Zwischenablage kopieren</button>
        </div>
      </div>
      <script>
        function copyToClipboard() {
          navigator.clipboard.writeText(${JSON.stringify(result)})
            .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-director"]');   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} Regienamen kopiert.`))       .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.

TakaTukaLand

6 Juli 2025, 20:56:19 #2 Letzte Bearbeitung: 18 Juli 2025, 21:51:18 von TakaTukaLand Grund: 'unbestätigt' ergänzt
Cast Script noch einmal ausgetauscht wegen Aufhübschung und ergänzten Zahlen zum Cast.



Filterliste ergänzt um:
    'archive material',
    'sprecher',
    'sprecherin',
    'unbestätigt',
    'erwähnung'

TinyPortal 2.0.0 © 2005-2020