OFDb

Darsteller, Regie etc. aus der IMDb herauskopieren

Begonnen von Karm, 9 April 2025, 19:45:13

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 2 Gäste betrachten dieses Thema.

mali

13 Juli 2025, 22:29:27 #90 Letzte Bearbeitung: 13 Juli 2025, 22:34:57 von mali
Zitat von: Flämmer am 13 Juli 2025, 21:55:06Kann bitte der Code für Regie auch aktualisiert werden.

Inwiefern?

Der funktioniert doch noch. In Post 13 in diesem Thread.


https://www.gemeinschaftsforum.com/forum/index.php/topic,262139.msg1367180.html#msg1367180

Flämmer


TakaTukaLand


TakaTukaLand


mali

26 August 2025, 14:30:36 #94 Letzte Bearbeitung: 28 August 2025, 14:35:44 von mali
Gutes Beispiel, warum man die "ausgefilternten" immer noch mal kontrollieren sollte und die Automatik nicht wasserdicht ist. Zufällig gestern gefunden:

Unsere Kleine Farm


Da wird Michael Landon aussortiert, weil er eben neben Darsteller auch als Narrator geführt wird.

Flämmer

28 September 2025, 19:18:02 #95 Letzte Bearbeitung: 28 September 2025, 19:45:25 von Flämmer
Kann Bitte folgene Filterbegriffe ergänzt werden archive sound & Narration.

Wishmaster27

Das Script funktioniert nicht mehr :(

Es wird immer "Keine passenden Schauspielernamen" angezeigt :(

mali

Ja wunderbar :-)

War zu erwarten, dass das irgendwann mal passiert, weil die IMDb ständig die Seitenstruktur, die Selektoren, das CSS ändert. Und das, obwohl jüngst dort in einem Forum versprochen wurde das erstmal nicht mehr zu machen, weil dann jedesmal unzählige Tools nicht mehr funktionieren. Nun - man sieht, was dieses Versprechen wert war :-)

QED und so.

Muss ich mir angucken.

Wishmaster27

Jetzt wurde das binnen-i hinzugefürt Autor /in; Schauspieler / in; usw..

mali

Zitat von: Wishmaster27 am 10 Oktober 2025, 15:46:38Jetzt wurde das binnen-i hinzugefürt Autor /in; Schauspieler / in; usw..

Jo, aber daran liegt es nicht. Der komplette Quellcode ist halt anders.

So gibt es halt zum Beispiel "sub-section-cast / second-sub-section-cast" als IDs/Selektoren nicht mehr usw. Der Code ist nochmals mehr verschachtelt und "abstrahiert" als vorher. Ich bin davon überzeugt, dass die das immer mit Vorsatz machen :-)

Wishmaster27

Verstehe...es kann ja nicht einmal einfach bleiben :)

Phantastik

Zitat von: Wishmaster27 am 10 Oktober 2025, 15:46:38Jetzt wurde das binnen-i hinzugefürt Autor /in; Schauspieler / in; usw..

Vor der Verhunzung der englischen Sprache schreckt man da noch zurück (Directors anstatt Directors/ress, Writers anstatt Writers/ress, Producers anstatt Producers/ress, usw).

Verwende die englischsprachige Version ;-).

Phantastik

mali

Zitat von: Wishmaster27 am 10 Oktober 2025, 16:20:36Verstehe...es kann ja nicht einmal einfach bleiben :)

Nee  :mr.green:

Bin aber auf einem guten Weg, blicke so langsam durch die neuen Selektoren/Strukturen und erste Tests klappen schon ganz gut :-)

mali

11 Oktober 2025, 01:23:00 #103 Letzte Bearbeitung: 14 Oktober 2025, 22:50:04 von TakaTukaLand Grund: 'synchronization' & 'angeblich' ergänzt
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>
  `);
})();

mali


Wishmaster27


Phantastik


mali

11 Oktober 2025, 12:54:19 #107 Letzte Bearbeitung: 12 Oktober 2025, 21:06:52 von mali
Zitat von: Phantastik am 11 Oktober 2025, 10:46:58Jetzt noch Regie.

Ja, das wird spannend. Es scheint nämlich überhaupt keine eindeutigen bzw. gleichbleibenden IDs für Regie und andere Crew etc. zu geben.


Vorher:
data-testid="sub-section-director"

Jetzt:
data-testid="sub-section-amzn1.imdb.concept.name_credit_category.ace5cb4c-8708-4238-9542-04641e7c8171" class="sc-314065ad-0 hZXevt full-credits-page-container"
 
Tja - keine funktionierende Idee im Moment.

mali

Wobei ".ace5cb4c-8708-4238-9542-04641e7c8171" offenbar immer für "Director" steht  :skeptisch:  Hm, könnte ein Ansatz sein.

Ein Wörterbuch IMDb <-> Deutsch wäre praktisch :-)

mali

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.'));
  }
})();


Neuer Code für Regie.



mali


Phantastik

Wie ich bemerkt habe, darf da ein weiteres Filterkriterium hinzugefügt werden:

    'synchronization',
Phantastik

TakaTukaLand


TakaTukaLand

Zitat von: Phantastik am 12 Oktober 2025, 23:58:03Wie ich bemerkt habe, darf da ein weiteres Filterkriterium hinzugefügt werden:

    'synchronization',
Phantastik
ist ergänzt :respect:

Phantastik

Für das 'rumored' verwendet IMDb in der deutschsprachigen Version

    'angeblich',

Phantastik

TakaTukaLand


TinyPortal 2.0.0 © 2005-2020