Ankündigung

Einklappen
Keine Ankündigung bisher.

curl_multi_init: Mehrere, verschachtelte Handles möglich?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • curl_multi_init: Mehrere, verschachtelte Handles möglich?

    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:

    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_HEADER0);
    }

    $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); 
    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

  • #2
    Das, was ich versucht habe, hat nicht richtig geklappt.
    Das ist sehr schade, aber leider eine nutzlose Information...

    Von jeder Url bekommst du eine Folge-Url, die sammelst du (wie $urls) und machst den ganzen Ranz nochmal für diese Folge-Urls.
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      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.
      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.
      es wäre nett die versuche zu zeugen, schon weil das im unterbereich forgeschritten so üblichbn ist.

      Ist so etwas überhaupt möglich?
      wenn es nicht möglich ist, nehme ich an, es ist teil der aufgabe zuzeign wieso nicht

      Kommentar


      • #4
        Sorry für die verspätete Rückmeldung. Ich hatte ein Brett vor dem Kopf. Habe es so gemacht wie Istegelitz gesagt hat, also URLs gesammelt als Array und das dann im neuen CURL-Prozess abarbeiten lassen. Hat gedauert, aber jetzt klappt's

        Kommentar

        Lädt...
        X