דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. בעיה בהורדת נתונים מ SQL לגוגל שיטס

בעיה בהורדת נתונים מ SQL לגוגל שיטס

מתוזמן נעוץ נעול הועבר תכנות
10 פוסטים 2 כותבים 247 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • G מנותק
    G מנותק
    GOOGL
    כתב ב נערך לאחרונה על ידי GOOGL
    #1

    שלום
    אני מנסה לבנות קוד שבכל רענון יוריד את כל תוכן הטבלה שבמסד נתונים לטבלה בגוגל שיטס
    החלק של הקוד שמכניס לגוגל שיטס פועל מצויין לבד, וגם החלק שמוציא מההמסד נתונים פועל טוב לבד.
    אבל כשאני מחבר אותם יחד, נכנסת רק השורה הראשונה של המסד לטבלה של גוגל שיטס ואז אני מקבל שגיאה:

    atal error: Uncaught Error: Call to undefined method Google\Service\Sheets\AppendValuesResponse::fetch_assoc()
    

    זה הקוד שלי:
    קובץ login.php

    <?php
    require __DIR__ . '/google-api-php-client/vendor/autoload.php';
    
    // Returns an authorized API client.
    // @return Google_Client the authorized client object
    $client = new Google_Client();
    $client->setApplicationName('Google Sheets API PHP Quickstart');
    $client->setScopes(Google_Service_Sheets::SPREADSHEETS);
    $client->setAuthConfig('key.json');
    $client->setAccessType('offline');
    $client->setPrompt('select_account consent');
    
    // Get the API client and construct the service object.
    $service = new Google_Service_Sheets($client);
    
    
    $information_Id = 'XXXXXX';
    $information_sheet = 'XXXX';
    
    //שליחה למסד נתונים
    $servername = "localhost";
    $username = "XXXX";
    $password = "XXXX";
    $dbname = "XXXX";
    
    
    // Create connection
    $conn = mysqli_connect($servername, $username, $password, $dbname);
    // Check connection
    if (!$conn) {
      die("Connection failed: " . mysqli_connect_error());
    }
    
    ?>
    

    קובץ ראשי:

    <?php
    
    include 'login.php';
    //מסד נתונים
    $sql = "SELECT * FROM `Main_Database_1`";
    $result = $conn->query($sql);
    
    if ($result->num_rows > 0){
    	while($row = $result->fetch_assoc()){
            //$id_row = $row["id"];
            $date_row = $row["date"];
            $Type_Activity_row = $row["Type_Activity"];
            $Distance_km_row = $row["Distance_km"];
            $activity_row = $row["activity"];
            $Program_ID_row = $row["Program_ID"];
            $Duration_activity_row = $row["Duration_activity"];
            $Student_name_row = $row["Student_name"];
            $Activity_Other_row = $row["Activity_Other"];
            $Beginning_time_row = $row["Beginning_time"];
            $End_time_row = $row["End_time"];
            $Teacher_ID_row = $row["Teacher_ID"];
            
            
            //גוגל שיטס
    		$spreadsheetId = $information_Id;
    		//הכנס נתןנים חדשים לפי שורה אחת מתחת
    		$range = $information_sheet;
            $values = [
                [
                $date_row,
                $Type_Activity_row,
                $Distance_km_row,
                $activity_row,
                $Program_ID_row,
                $Duration_activity_row,
                $Student_name_row,
                $Activity_Other_row,
                $Beginning_time_row,
                $End_time_row,
                $Teacher_ID_row 
                ],
            // Additional rows ...
            ];
            $body = new Google_Service_Sheets_ValueRange([
                'values' => $values
            ]);
            $params = [
                'valueInputOption' => 'RAW'
            ];
            $insert = [
                'insertDataOption' => 'INSERT_ROWS'
            ];
            $result = $service->spreadsheets_values->append($spreadsheetId, $range, $body, $params, $insert);
    		printf("%d תאים מצורפים.", $result->getUpdates()->getUpdatedCells());   
        }
        echo "<html><h1>נשלח בהצלחה!</h1><html>";
    };
    
    mysqli_close($conn);
    
    ?>
    
    dovidD תגובה 1 תגובה אחרונה
    0
    • G GOOGL מחק נושא זה ב
    • G GOOGL שחזר נושא זה ב
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      השיב לGOOGL ב נערך לאחרונה על ידי dovid
      #2

      @GOOGL אמר בבעיה בהורדת נתונים מ SQL לגוגל שיטס:

      fetch_assoc

      הבעיה היא השימוש הכפול במשתנה $result. השורות הבאות גורמות למשתנה $result שעד עכשיו החזיק תוצאות מסד נתונים עם המתודה fetch_assoc להידרס עם נתוני התשובה של גוגל, וממילא אין מקום לקריאה חוזרת לfetch_assoc:

      $result = $service->spreadsheets_values->append($spreadsheetId, $range, $body, $params, $insert);
      printf("%d תאים מצורפים.", $result->getUpdates()->getUpdatedCells());
      

      שנה בשורות אלו את $result למילה כמו $result_google.

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      dovidD תגובה 1 תגובה אחרונה
      2
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        השיב לdovid ב נערך לאחרונה על ידי
        #3

        קוד קומפקטי לטעמי:

        <?php
        
        include 'login.php';
        //מסד נתונים
        $sql = "SELECT * FROM `Main_Database_1`";
        $result = $conn->query($sql);
        
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_assoc()) {
        
                //גוגל שיטס
                $spreadsheetId = $information_Id;
                //הכנס נתןנים חדשים לפי שורה אחת מתחת
                $range = $information_sheet;
        
                $body = new Google_Service_Sheets_ValueRange([
                    'values' => [
                        [
                            $row["date"],
                            $row["Type_Activity"],
                            $row["Distance_km"],
                            $row["activity"],
                            $row["Program_ID"],
                            $row["Duration_activity"],
                            $row["Student_name"],
                            $row["Activity_Other"],
                            $row["Beginning_time"],
                            $row["End_time"],
                            $row["Teacher_ID"]
                        ],
                    ]
                ]);
                $params = ['valueInputOption' => 'RAW'];
                $insert = ['insertDataOption' => 'INSERT_ROWS'];
        
                $result = $service->spreadsheets_values->append($spreadsheetId, $range, $body, $params, $insert);
                printf("%d תאים מצורפים.", $result->getUpdates()->getUpdatedCells());
            }
            echo "<html><h1>נשלח בהצלחה!</h1><html>";
        };
        
        mysqli_close($conn);
        

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        G 2 תגובות תגובה אחרונה
        1
        • G מנותק
          G מנותק
          GOOGL
          השיב לdovid ב נערך לאחרונה על ידי
          #4

          @dovid
          תודה דוד הגאון
          ה' יברך אותך לא שמתי לב לזה....
          ממש עזרת לי.

          תגובה 1 תגובה אחרונה
          0
          • G מנותק
            G מנותק
            GOOGL
            השיב לdovid ב נערך לאחרונה על ידי
            #5

            @dovid
            זה עובד, אבל עכשיו בעצם הוא לא מאפשר יותר מ 100 בקשות לדקה...
            זה בעיה
            מה נראה לך כדאי לעשות, אולי להשהות את הקוד דקה?

            Fatal error: Uncaught Google\Service\Exception: { "error": { "code": 429, "message": "Quota exceeded for quota metric 'Write requests' and limit 'Write requests per minute per user' of service 'sheets.googleapis.com' for consumer 
            
            G תגובה 1 תגובה אחרונה
            0
            • G מנותק
              G מנותק
              GOOGL
              השיב לGOOGL ב נערך לאחרונה על ידי
              #6

              @GOOGL אמר בבעיה בהורדת נתונים מ SQL לגוגל שיטס:

              Fatal error: Uncaught Google\Service\Exception: { "error": { "code": 429, "message": "Quota exceeded for quota metric 'Write requests' and limit 'Write requests per minute per user' of service 'sheets.googleapis.com' for consumer

              https://stackoverflow.com/questions/65153922/why-am-i-receiving-a-quota-limit-error-google-cloud-platform-compute-engine-vm

              dovidD תגובה 1 תגובה אחרונה
              0
              • dovidD מנותק
                dovidD מנותק
                dovid ניהול
                השיב לGOOGL ב נערך לאחרונה על ידי
                #7

                @GOOGL תנסה את הקוד הבא:

                <?php
                
                include 'login.php';
                //מסד נתונים
                $sql = "SELECT * FROM `Main_Database_1`";
                $result = $conn->query($sql);
                
                if ($result->num_rows > 0) {
                
                    $values = array();
                
                    while ($row = $result->fetch_assoc()) {
                        $values[] = [
                            $row["date"],
                            $row["Type_Activity"],
                            $row["Distance_km"],
                            $row["activity"],
                            $row["Program_ID"],
                            $row["Duration_activity"],
                            $row["Student_name"],
                            $row["Activity_Other"],
                            $row["Beginning_time"],
                            $row["End_time"],
                            $row["Teacher_ID"]
                        ];
                    }
                
                    $spreadsheetId = $information_Id;
                    $range = $information_sheet;
                    $body = new Google_Service_Sheets_ValueRange(['values' => $values]);
                    $params = ['valueInputOption' => 'RAW'];
                    $insert = ['insertDataOption' => 'INSERT_ROWS'];
                
                    $result = $service->spreadsheets_values->append($spreadsheetId, $range, $body, $params, $insert);
                    printf("%d תאים מצורפים.", $result->getUpdates()->getUpdatedCells());
                
                    echo "<html><h1>נשלח בהצלחה!</h1><html>";
                };
                
                mysqli_close($conn);
                

                ותעשה אולי LIMIT לשאילתה, כי הכל עולה בבת אחת לזיכרון והPHP יכול לקרוס.

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                G תגובה 1 תגובה אחרונה
                3
                • G מנותק
                  G מנותק
                  GOOGL
                  השיב לdovid ב נערך לאחרונה על ידי
                  #8

                  @dovid
                  וואו זה מדהים...
                  תוכל להסביר לי (אם יש לך זמן)
                  מה נקודת השינוי?

                  dovidD תגובה 1 תגובה אחרונה
                  0
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    השיב לGOOGL ב נערך לאחרונה על ידי dovid
                    #9

                    @GOOGL הוצאתי את פעולת ההכנסה לגוגל שיטס מהלולאה, כלומר במקום שהקריאה לגוגל תתבצע שוב ושוב כמספר השורות היא מתבצעת פעם אחת בלבד אחרי שמילאנו מערך בכל השורות (מערך של מערכים).
                    הבעיה בפתרון הזה הוא א) הזיכרון, נוצר מערך גדול על הזיכרון של המכונה ב) גודל הבקשה הופך לענק ועלול להיכשל בגלל בעיות ברשת או איטיות.
                    אם הבעיות האלו יצוצו הפתרון הוא לשלוח במנות קטנות, עם לולאה שמריצה כל פעם משפט SQL עם הגבלה עם האופרטורים LIMIT + OFFSET.
                    אם כל שליחה תכלול 400 שורות, אז 100 בקשות יספיקו ל40 אלף שורות.

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    G תגובה 1 תגובה אחרונה
                    4
                    • G מנותק
                      G מנותק
                      GOOGL
                      השיב לdovid ב נערך לאחרונה על ידי
                      #10

                      @dovid
                      הבנתי.
                      תודה רבה על העזרה, אין כמוך.

                      תגובה 1 תגובה אחרונה
                      2
                      • dovidD dovid העביר נושא זה מ-תכנות ב-

                      בא תתחבר לדף היומי!
                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום