Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Google Base Datei über 100.000 Artikel

    Benny

    • Mitglied
    • Beiträge: 245
    Google Base Datei über 100.000 Artikel
    am: 23. Dezember 2009, 23:10:32
    Hey,

    kann mir jemand helfen?
    Wie kann ich den Googlebase-Export so anpassen, das er mir nach 100.000 Artikeln eine neue Datei anfängt?

    Ich steig da grad nicht ganz so durch ...



    Linkback: https://www.modified-shop.org/forum/index.php?topic=3117.0
    Shop Hosting

    Benny

    • Mitglied
    • Beiträge: 245
    Google Base Datei über 100.000 Artikel
    Antwort #1 am: 24. Dezember 2009, 22:40:49
    Okay...

    Hab ich selbst erledigt xD"

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    Google Base Datei über 100.000 Artikel
    Antwort #2 am: 25. Dezember 2009, 05:41:18
    Und dein erlerntes Wissen magst du nicht zufällig mit uns teilen?

    Grüße

    Torsten

    Benny

    • Mitglied
    • Beiträge: 245
    Google Base Datei über 100.000 Artikel
    Antwort #3 am: 25. Dezember 2009, 06:06:36
    Klar, kann ich machen ^^

    Dachte nur das wäre so banal, das es unwichtig ist.
    Habe nun den Export auf 2 Dateien erweitert.
    Automatisch je nach 100.000er Schritten zu erweitern ist zu hoch für mich, bislang.

    Mein Gedankengang war es die Produkte zählen zu lassen und bei 100.000 Artikeln eine neue Datei anzufangen.
    Folgende Schritte waren von nöten:
    - Einbau Zähler
    - Schema verdoppeln
    - 2. Datei füllen und schreiben
    - Eine Export-Datei schreiben lassen

    Falls es noch jemanden interessiert ist gegen Ende auch eine ZIP-Erweiterung eingebaut.
    Damit wird der Generieren gezipt und gespeichert. Zusätzlich wird beim Export die Zip-Datei heruntergeladen.

    Fürs Verständnis sei noch gesagt das ich bei der Eingabe des Datein namens auf ein .txt verzichte und diese direkt festsetze in der Generierung.
    Somit konnte ich die Datei ohne Probleme erstmal gem. Namenseingabe um eine Zahl erweitern.

    Nun aber zu meinen Anpassungen:

    Vor der Produktschleife:

    Code: PHP  [Auswählen]
    while ($products = xtc_db_fetch_array($export_query)) {
    Das Schema verdoppelt z.B.:

    Code: PHP  [Auswählen]
    $schema_google2 = "beschreibung".chr(9)."id".chr(9)."link".chr(9)."preis".chr(9)."w".chr(228)."hrung".chr(9)."title".chr(9)."zustand".chr(9)."bild_url".chr(9)."ean".chr(9)."mpn".chr(9)."marke".chr(9)."versand".chr(9)."zahlungsmethode".chr(13);
    Und damit ein Zähler eingebaut ist folgende Zeile ebenfalls einfügen:

    Code: PHP  [Auswählen]
    $data_count = 0;
    Nun habe ich noch die geschriebenen Datenzeilen innerhalb der Schleife um eine IF-Abfrage und die 2. Datei erweitert:

    Code: PHP  [Auswählen]
    if ($data_count <100000)
                {
                  //create content - Schema Google
                  $schema_google .=
                    $products_description."\t".
                    $products['products_id']."\t".
                    $productURL."\t" .
                    number_format($products_price,2,'.','')."\t".
                    $_POST['currencies']."\t".
                    $products_name."\t".
                    "neu\t".
                    $image."\t" .
                    $products['products_ean']."\t".
                    $mpn."\t".
                    $products['manufacturers_name']."\t".
                    $_POST['shipping_country'].":::".number_format($versand,2,'.','')."\t".
                    $zahlungsmethode;

                    //Content Zeile beenden
                    $schema_google .= "\n";
    Nun noch den Zähler um 1 erweitern und die IF-Abfrage mit einer "}" schließen. ("$data_count++;" funktionierte irgendwie nicht so wie ich wollte)

    Code: PHP  [Auswählen]
    $data_count = $data_count + 1;
                }
    Mit o.a. Code werden die ersten 100.000 Artikel in die 1. Schemenvariable geschrieben und nun komm die 2. Variable:

    Code: PHP  [Auswählen]
    if ($data_count>= 100000)
                {
                  //create content - Schema Google
                  $schema_google2 .=
                    $products_description."\t".
                    $products['products_id']."\t".
                    $productURL."\t" .
                    number_format($products_price,2,'.','')."\t".
                    $_POST['currencies']."\t".
                    $products_name."\t".
                    "neu\t".
                    $image."\t" .
                    $products['products_ean']."\t".
                    $mpn."\t".
                    $products['manufacturers_name']."\t".
                    $_POST['shipping_country'].":::".number_format($versand,2,'.','')."\t".
                    $zahlungsmethode;

                    //Content Zeile beenden
                    $schema_google2 .= "\n";
                }
    Anschließend wird noch die While-Schleife mit einer "}" geschlossen, welche ich öfters mal ausversehen entfernt hatte. Na man lernt ja dazu *lacht*.

    Nachfolgend werden die Dateien geschrieben.
    Die ersten 100.000 Artikel müssen sowieso geschrieben werden, deswegen wird auf eine If-Abfrage verzichtet. Auch wenn es mehr Code ergibt, habe ich das schreiben der Dateien in den Switch vom Export mit hineingenommen. So wird jeweils entweder nur 1 Datei (Beim Export) und 2 Dateien (Beim Generieren) geschrieben.

    Zusätzlich sieht man nun meine einbindung der Zip-Erweiterung.

    Code: PHP  [Auswählen]
    // create File

          switch ($_POST['export']) {
            case 'yes':
                $file1 .= $file . ".txt";
                $fp = fopen(DIR_FS_DOCUMENT_ROOT.'export/' . $file1, "w+");
                fputs($fp,$schema_google);
                fclose($fp);

                $file_to_compress = DIR_FS_DOCUMENT_ROOT.'export/'.$file1; //any type of file
                $zip_file_to_produce = $file_to_compress.'.zip';

                $datei = fopen($zip_file_to_produce, 'w+');
                fclose($datei);

                $zip = new ZipArchive;
                if ($zip->open($zip_file_to_produce) === TRUE) {
                  $zip->addFile($file_to_compress, $file1);
                  $zip->close();
                }

                // send File to Browser
                $file1 .= $file . '.zip'; //Modified to download .zip
                $extension = substr($file1, -3);
                $fp = fopen(DIR_FS_DOCUMENT_ROOT.'export/' . $file1,"rb");
                $buffer = fread($fp, filesize(DIR_FS_DOCUMENT_ROOT.'export/' . $file1));
                fclose($fp);
                header('Content-type: application/x-octet-stream; charset=iso-8859-15');
                                  header('Content-disposition: attachment; filename=' . $file1);
                echo $buffer;
                exit;

            case 'no':
                $file1 .= $file . ".txt";
                $fp = fopen(DIR_FS_DOCUMENT_ROOT.'export/' . $file1, "w+");
                fputs($fp,$schema_google);
                fclose($fp);

                $file_to_compress = DIR_FS_DOCUMENT_ROOT.'export/'.$file1; //any type of file
                $zip_file_to_produce = $file_to_compress.'.zip';

                $datei = fopen($zip_file_to_produce, 'w+');
                fclose($datei);

                $zip = new ZipArchive;
                if ($zip->open($zip_file_to_produce) === TRUE) {
                  $zip->addFile($file_to_compress, $file1);
                  $zip->close();
              }

              if ($data_count>= 100000)
              {
                $file2 .= $file . "2.txt";
                $fp = fopen(DIR_FS_DOCUMENT_ROOT.'export/' . $file2, "w+");
                fputs($fp,$schema_google2);
                fclose($fp);

                $file_to_compress = DIR_FS_DOCUMENT_ROOT.'export/'.$file2; //any type of file
                $zip_file_to_produce = $file_to_compress.'.zip';

                $datei = fopen($zip_file_to_produce, 'w+');
                fclose($datei);

                $zip = new ZipArchive;
                if ($zip->open($zip_file_to_produce) === TRUE) {
                  $zip->addFile($file_to_compress, $file2);
                  $zip->close();
                }
              }

            break;
            }
    Nachfolgend wird noch die Funktion "process($file)" mit einer "}" geschlossen.

    Soviel zu meiner Anpassung. Vielleicht hilft es ja wen oder gibt einen interessanten Denkanstoß.

    Für mich wäre es noch interessant zu wissen wie man automatisiert in 100.000 Schritten die Export-Datei splitten kann und wie man die Zip-Generierung optional schalten kann.

    Bei Fragen gerne an Forum, denn ich bin mir sehr unsicher ob ich helfen kann.
    Benutzen der Modifikation auf eigene Gefahr.

    Gruß,
    Benny

    DokuMan

    • modified Team
    • Beiträge: 6.669
    • Geschlecht:
    Google Base Datei über 100.000 Artikel
    Antwort #4 am: 25. Dezember 2009, 13:56:29
    Nette Erweiterung, es auch zu zippen!

    Benny

    • Mitglied
    • Beiträge: 245
    Google Base Datei über 100.000 Artikel
    Antwort #5 am: 25. Dezember 2009, 18:46:54
    Jemand vielleicht eine Idee warum mir nachfolgende Anpassung Probleme macht?

    Code: PHP  [Auswählen]
    $products_description = $products['products_description'];
     
    Wird ersetzt mit nachfolgendem Code:

    Code: PHP  [Auswählen]
                  $products_description_rough = $products['products_description'];

                  //IFRAME filtern
                    if (trim($products_description_rough) != '') {
                      if (strpos($products_description_rough, 'iframe') === false) {
                        $products_description = $products_description_rough;
                      }
                      else {
                        preg_match ('@<iframe.*src=\"(.*)\&sci.*\/iframe>@isU', $products_description_rough, $match_data);
                        $products_description = $match_data[1];
                      }
                    }
     
    Sinn des komischen Iframe-Konstruktes ist eine Zweckentfremdung eines Importscriptes. Funktioniert auch alles prima. Nur eben hier beim Export nicht.
    Das Script läuft sehr lange. Also wird auch etwas gemacht. Nur keine Daten werden geschrieben. Ohne die o.a. Änderung läuft das Script einwandfrei durch. Mit Änderung werden leider auch keine Fehlermeldungen angezeigt. Das Script endet nach einer gewissen Zeit mit einer weißen Page.

    Hoffe mir kann jemand helfen.

    Benny

    • Mitglied
    • Beiträge: 245
    Google Base Datei über 100.000 Artikel
    Antwort #6 am: 26. Dezember 2009, 14:16:37
    So hab mal ein wenig rumgestet und scheinbar macht einzig allein das "preg_match" hier ein Problem.

    Leider immernoch keine Lösung.

    Dafür habe ich nun das Zipping optional geschaltet.

    Oben unter den "define" Deklarierungen:

    Code: PHP  [Auswählen]
    define('MODULE_GOOGLEBASE_ZIP_TITLE','<hr noshade><b>Generierte Datei zippen?</b>');
    define('MODULE_GOOGLEBASE_ZIP_DESC','W&auml;hlen Sie aus, ob neben der TXT-Datei auch eine TXT.ZIP-Datei generiert werden soll.');
    define('MODULE_GOOGLEBASE_ZIP_YES','TXT und TXT.ZIP speichern');
    define('MODULE_GOOGLEBASE_ZIP_NO','Nur TXT speichern');
     
    Und folgende Blöcke:

    Code: PHP  [Auswählen]
    $file_to_compress = DIR_FS_DOCUMENT_ROOT.'export/'.$file2; //any type of file
                $zip_file_to_produce = $file_to_compress.'.zip';

                $datei = fopen($zip_file_to_produce, 'w+');
                fclose($datei);

                $zip = new ZipArchive;
                if ($zip->open($zip_file_to_produce) === TRUE) {
                  $zip->addFile($file_to_compress, $file2);
                  $zip->close();
                }
     
    Mit diesem Code austauschen:

    Code: PHP  [Auswählen]
    if ($_POST['zip'] == 'yes') {
                  $file_to_compress = DIR_FS_DOCUMENT_ROOT.'export/'.$file1; //any type of file
                  $zip_file_to_produce = $file_to_compress.'.zip';

                  $datei = fopen($zip_file_to_produce, 'w+');
                  fclose($datei);

                  $zip = new ZipArchive;
                  if ($zip->open($zip_file_to_produce) === TRUE) {
                    $zip->addFile($file_to_compress, $file1);
                    $zip->close();
                  }
                }
     
    Bei der generierung des 2. Files bitte darauf achte das auch die Variable "$file2" nicht nur überschrieben, sondern auch neu eingesetzt wird.

    Zusätzlich arbeite ich gerade an der automatischen Splittung der Dateien, habe dafür nun eine Idee.

    Vielleicht kommt das dann nochmal später ^^

    Benny

    • Mitglied
    • Beiträge: 245
    Google Base Datei über 100.000 Artikel
    Antwort #7 am: 26. Dezember 2009, 16:46:53
    Achja glatt vergessen xD

    Weiter unten muss noch das Auswahlfeld mit eingefügt werden damit die Zip-Generierung optional ist xD

    Code: PHP  [Auswählen]
    '<b>'.MODULE_GOOGLEBASE_ZIP_TITLE.'</b><br />'.
    MODULE_GOOGLEBASE_ZIP_DESC.'<br />'.
    xtc_draw_radio_field('zip', 'yes', true).MODULE_GOOGLEBASE_ZIP_YES.'<br/>'.
    xtc_draw_radio_field('zip', 'no', false).MODULE_GOOGLEBASE_ZIP_NO.'<br />'.
     

    Benny

    • Mitglied
    • Beiträge: 245
    Google Base Datei über 100.000 Artikel
    Antwort #8 am: 26. Dezember 2009, 22:17:21
    Es ist vollbracht.
    Die Dateien werden nun je nach angegebener Grenze gesplittet.

    Würde dies gerne variabel einstellbar schalten.

    Dafür benötige ich ein Eingabefeld.
    Dieses muss beim Installieren auch in die CONFIGURE-Table hinterlegt werden, damit ein Standart-Wert existiert und dieser automatisch immer übernommen wird.

    Leider weiß ich nicht wie das zu schreiben ist. Mein Versuch funktioniert nicht.
    Wenn ich das habe, stelle ich den neuen Export hier online.

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    Google Base Datei über 100.000 Artikel
    Antwort #9 am: 27. Dezember 2009, 09:09:44
    He Benny,

    das wollte ich gerade fragen, ob du uns bei Gelegenheit nochmal eine Gesamtanleitung bereitstellen kannst, es wird hier ein wenig unübersichtlich. ;-)

    Grüße

    Torsten

    Benny

    • Mitglied
    • Beiträge: 245
    Google Base Datei über 100.000 Artikel
    Antwort #10 am: 30. Dezember 2009, 14:00:40
    Wollt mich nur kurz melden, das ich die Datei noch online stelle.
    Will nur sichergehen das mein aktuelles Problem mit meinem Hoster zu tun hat und nicht mit dem Script.

    Benny

    • Mitglied
    • Beiträge: 245
    Google Base Datei über 100.000 Artikel
    Antwort #11 am: 31. Dezember 2009, 14:18:49
    Mhm mein letztes Problem hat mit dem MemoryLimit und der Scriptlaufdauer meines Hosters zu tun. Leider ist eine vergrößerung gerade nicht durchführbar.

    Gibt es ne Möglichkeit, ähnlich des Imageprocessing in Steps für den Export?
    Sodass sich dieses Script selbst aufruft und zwischendurch die Dateien schreibt?

    Mag mir da jemand ein paar Programmschnipsel zum verstehen geben?
    Tue mich da etwas schwer xD

    BTW:
    (Argh 3 Versuche ne Datei anzuhängen xD)
    Anbei meine Datei :3
    Erweiterung der googlebase.php (c)2009-2010 by Benjamin Harbs - http://www.pcharbs.org um folgende Funktionen:
       - Zip-Komprimierung (Variabel)
       - Automatische generierung mehrerer Dateien bei eingabe einer Produktgrenze
       - Einbindung Alternativtext, wenn keine Produktbeschreibung vorhanden
       - Kürzen von Titel und Beschreibung gem. Googlebase-Richtlinien (fest gesetzt)

    3 Antworten
    4082 Aufrufe
    11. Oktober 2011, 08:39:13 von derheiko
    17 Antworten
    7039 Aufrufe
    25. Juni 2013, 21:48:22 von tombstone
    11 Antworten
    9006 Aufrufe
    21. Juni 2011, 21:09:26 von mt2010
    10 Antworten
    3228 Aufrufe
    15. Dezember 2016, 08:20:23 von Buggyboy