Hallo,
für eine WordPress-Seite würde ich gerne alle Schauspieler, die es über die TMDB-API gibt als Beiträge speichern. Um überhaupt an alle Einträge zu kommen, kann man einen täglichen Export aller IDs der Personen bekommen und mit den IDs dann jeweils die Details der Personen abrufen. So schön so gut. Leider sind es etwas über 2 Millionen IDs und wenn ich mir die Datei auslesen lasse und dann via foreach über die API jage reicht das Memory-Limit nicht aus. Ein setzen auf -1 des Limits kommt nicht in Frage, würde es mir zweifelsohne den Server killen.
Die Datei splitten und in mehreren Anläufen iterieren wäre eine Idee, aber bei der schieren Masse an Daten wären das so viele einzelne Dateien, die nicht zu bewältigen wären.
Hier mal mein Aufbau:
(Die Liste mit den Person IDs ist nicht wirklich eine JSON, sondern beinhaltet JSON-Strings in Zeilen gespeichert)
Mit $data will ich dann weiter arbeiten, allerdings erhalte ich im Vorfeld einen memory exhaust. Welche Möglichkeiten gibt es, diese Abfrage möglich zu machen ohne das memory limit derart zu strapazieren? Ich hab schon versucht, irgendwie um die Arrays herum zu kommen, aber bisher kein Erfolg
Vielen Dank!
für eine WordPress-Seite würde ich gerne alle Schauspieler, die es über die TMDB-API gibt als Beiträge speichern. Um überhaupt an alle Einträge zu kommen, kann man einen täglichen Export aller IDs der Personen bekommen und mit den IDs dann jeweils die Details der Personen abrufen. So schön so gut. Leider sind es etwas über 2 Millionen IDs und wenn ich mir die Datei auslesen lasse und dann via foreach über die API jage reicht das Memory-Limit nicht aus. Ein setzen auf -1 des Limits kommt nicht in Frage, würde es mir zweifelsohne den Server killen.
Die Datei splitten und in mehreren Anläufen iterieren wäre eine Idee, aber bei der schieren Masse an Daten wären das so viele einzelne Dateien, die nicht zu bewältigen wären.
Hier mal mein Aufbau:
(Die Liste mit den Person IDs ist nicht wirklich eine JSON, sondern beinhaltet JSON-Strings in Zeilen gespeichert)
PHP-Code:
$tmdb_url = 'https://api.themoviedb.org/3/person/';
$tmdb_api_key = 'xxxxxxxxxxxxxxxxxxxxxxx';
// Öffne die Liste mit JSON Content und zeile für zeile lesen
$fileData = function() {
$json_file = get_template_directory() . '/person_ids_09_17_2021.json';
$file = fopen($json_file, 'r');
if (!$file)
die('file does not exist or cannot be opened - ' . var_dump($json_file));
while (($line = fgets($file)) !== false) {
yield $line;
}
fclose($file);
};
// Jede Zeile JSON in einem Array kombinierenm
$lines;
foreach($fileData() as $line) {
$lines[] = json_decode($line);
}
// Die einzelnen Zeilen iterieren und mit der ID in jedem Durchgang die Details holen und alles in einem, Array speichern
foreach($lines as $line) {
$tmdb_id = $line->id;
$url = $tmdb_url . $tmdb_id . '?api_key=' . $tmdb_api_key . '&language=de-DE';
$request = wp_remote_get( $url );
$body = wp_remote_retrieve_body( $request );
$data = json_decode($body);
}
Vielen Dank!
Kommentar