Hallo zusammen,
ich versuche mich seit einiger Zeit mit cURL und hoffe, hier etwas Hilfe zu finden.
Meine Aufgabenstellung ist folgende. Ich habe eine Datenbank mit tausenden Zeilen URL-Adressen von Wikipedia. Diese Adressen möchte ich jeweils per Skript aufrufen um auf eine weitere Seite zu gelangen, die sich auf der Wikipedia-Seite ganz unten unter dem Link "Commons" versteckt. Auf diesen Commons-Seiten liegen alle frei verfügbaren Bilder zum Thema der Wikipedia-Seite. Im dritten Schritt möchte ich auf jede Seite dieser Bilder gelangen, um Daten wie Autoren, Lizenzen etc. abzurufen.
Mein altes Skript mit diversen cURL-Befehlen funktioniert so weit auch - allerdings in einem Zeitraum, der nicht akzeptabel ist. Für 2000 URLs benötigt das Skript um die 6 Stunden.
Nun habe ich gehört, dass es den cURL-Multi-Handler gibt, der mehrere Adressen gleichzeitig verarbeiten kann. Folgendes Skript habe ich gefunden:
Das Auslesen des 1) Commons-Pfades funktioniert und geht wirklich sehr schnell. Aber ich weiß nicht, wie ich die weiteren CURL-Codierungen (möglichst auch per multi cURL) einfügen soll. Das, was ich versucht habe, hat nicht richtig geklappt.
Hat jemand eine Idee, wie man das richtig umsetzt? Ist so etwas überhaupt möglich?
Vielen Dank im voraus!
Andreas
ich versuche mich seit einiger Zeit mit cURL und hoffe, hier etwas Hilfe zu finden.
Meine Aufgabenstellung ist folgende. Ich habe eine Datenbank mit tausenden Zeilen URL-Adressen von Wikipedia. Diese Adressen möchte ich jeweils per Skript aufrufen um auf eine weitere Seite zu gelangen, die sich auf der Wikipedia-Seite ganz unten unter dem Link "Commons" versteckt. Auf diesen Commons-Seiten liegen alle frei verfügbaren Bilder zum Thema der Wikipedia-Seite. Im dritten Schritt möchte ich auf jede Seite dieser Bilder gelangen, um Daten wie Autoren, Lizenzen etc. abzurufen.
Mein altes Skript mit diversen cURL-Befehlen funktioniert so weit auch - allerdings in einem Zeitraum, der nicht akzeptabel ist. Für 2000 URLs benötigt das Skript um die 6 Stunden.
Nun habe ich gehört, dass es den cURL-Multi-Handler gibt, der mehrere Adressen gleichzeitig verarbeiten kann. Folgendes Skript habe ich gefunden:
PHP-Code:
// Array der URLs in der Datenbank zusammensetzen:
$urls[] = 'http://www.wiki-seite-1.com';
$urls[] = 'http://www.wiki-seite-2.com';
$urls[] = 'http://www.wiki-seite-3.com';
foreach ($urls as $key => $url) {
$chs[$key] = curl_init();
curl_setopt($chs[$key], CURLOPT_URL, $url);
curl_setopt($chs[$key], CURLOPT_HEADER, 0);
}
$mh = curl_multi_init();
foreach ($chs as &$ch) {
curl_multi_add_handle($mh,$ch);
}
$active = null;
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
foreach ($chs as $url=>&$ch) {
$html = curl_multi_getcontent($ch);
// Aufgabenstellung:
// 1) AUSLESEN DES COMMONS-PFADES
// 2) GEHE PER CURL IN DIE COMMONS-SEITE HINEIN UND FILTERE DIE URLS DER EINZELNEN BILDER HERAUS
// 3) GEHE PER CURL IN DIE BILD-SEITEN HINEIN UND LESEN DIE DATEN AUS
curl_multi_remove_handle($mh, $ch);
}
curl_multi_close($mh);
Hat jemand eine Idee, wie man das richtig umsetzt? Ist so etwas überhaupt möglich?
Vielen Dank im voraus!
Andreas
Kommentar