Programim dhe zhvillim, javascript, python, php, html

Dërgo trupin e Kërkesës në një fletë google duke përdorur fletë API dhe XMLHttpRequest

Për kontekstin, po bëj një aplikacion të vogël në Qt QML që kërkon lexim/shkrim të të dhënave në një fletë google. Pjesa e leximit po funksionon mirë, megjithatë kam probleme me përdorimin e funksionit "sheets.spreadsheets.values.append" nga google sheets API V4 (dokumentacioni mund të gjendet këtu: https://developers.google.com/sheets/api/reference/rest/)

Funksioni Javascript më poshtë merr këtë URL si parametër: https://sheets.googleapis.com/v4/spreadsheets/{SHEET-ID}/values/A2:ZZ:append?valueInputOption=RAW&key={API-KEY}

Trupi i kërkesës i kaluar si parametër është ky:

{
 "majorDimension": "ROWS",
 "values": [
  [
   "15:41 02/08/2019",
   "Steven",
   "20",
   "Male",
   "[email protected]",
   "FooBar"
  ]
 ]
}

Funksioni që thirret për të bërë POST:

function postReq(url, callback, request = null) {
    var xhr = new XMLHttpRequest();
    xhr.open("POST", url);
    xhr.onload = function (e) {
        if (e) console.log(e);
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                console.log(xhr.responseText);
                callback(xhr.responseText.toString());
            } else {
                callback(null);
                console.log(xhr.status);
            }
        } else {
            console.log(xhr.status);
        };
    };
    xhr.send(request);
};

Kjo kthen gjithmonë një kod përgjigjeje 401, i cili vazhdon edhe nëse e publikoj fletën në ueb dhe çelësi API nuk duhet të jetë problem pasi funksionon mirë kur lexon të dhënat (u sigurova që fleta të jetë gjithashtu e redaktueshme).


Përgjigjet:


1
  • Ju dëshironi të shtoni rreshta duke përdorur metodën e values.append të API-së së Sheets.
  • Ju po përdorni çelësin API për këtë.
  • Sheets API është aktivizuar tashmë në panelin API.

Nëse kuptimi im është i saktë, si për këtë modifikim? Ju lutemi, mendoni për këtë si vetëm një nga disa përgjigje.

Pikat e modifikimit:

  • Fatkeqësisht, çelësi API nuk mund të përdoret për metodën POST. Çelësi API mund të përdoret vetëm për metodën GET. Prandaj, ju lutemi përdorni tokenin e aksesit të marrë nga llogaria OAuth2 dhe Shërbimi.
  • Për skenarin tuaj, dërgoni trupin e kërkesës si application/json të llojit të përmbajtjes.

Skripti i modifikuar:

Si skript për përdorimin e shenjës së aksesit, e modifikova skriptin tuaj si më poshtë. Përpara se ta përdorni këtë, ju lutemi vendosni kodin tuaj të hyrjes.

function postReq(url, callback, request = null) {
    const accessToken = "###"; // <--- Please set your access token here.

    // Sample request body?
    var request = {
     "majorDimension": "ROWS",
     "values": [
      [
       "15:41 02/08/2019",
       "Steven",
       "20",
       "Male",
       "[email protected]",
       "FooBar"
      ]
     ]
    };

    var xhr = new XMLHttpRequest();
    xhr.open("POST", url);
    xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); // Added
    xhr.setRequestHeader('Content-Type', 'application/json'); // Added
    xhr.onload = function (e) {
        if (e) console.log(e);
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                console.log(xhr.responseText);
                callback(xhr.responseText.toString());
            } else {
                callback(null);
                console.log(xhr.status);
            }
        } else {
            console.log(xhr.status);
        };
    };
    xhr.send(JSON.stringify(request)); // Modified
};

Shënim:

  • Mbi skenarin e modifikuar, në mjedisin tim, mund të konfirmoja se funksionoi.

Referencat:

Nëse e kam keqkuptuar pyetjen tuaj dhe nuk ishte ky drejtimi që dëshironi, ju kërkoj falje.

02.08.2019
  • E kuptove shumë mirë pyetjen time dhe faleminderit shumë për kohën e dhënë për këtë përgjigje. Fatkeqësisht, jam pak i humbur kur bëhet fjalë për përdorimin e OAuth2 pasi nuk e kam përdorur kurrë më parë, shpresoja që çelësi API të funksiononte pasi ju është shumë më i thjeshtë. Sido që të jetë unë jam shumë mirënjohës për përgjigjen tuaj, ju keni qenë jashtëzakonisht i dobishëm 03.08.2019

  • 2

    Kemi një kërkesë të ngjashme

    need to display the contents of a google sheet (rows & columns) on a html page (not using google web app), and sadly data not being displayed as a html page??
    
    the code loads the google sheet files, but no content is displayed???
    
    We have used code from following URL:
        https://www.w3schools.com/xml/xml_http.asp
    
    note:
    a/ have made public and publish the google sheet contents
    a.1/ using google drive, obtain following link:
    
    https://docs.google.com/spreadsheets/d/1HVmBfKjQiUyXOfy-q5iWVvDYOSKnMLPiDr18W2EtU9s/edit?usp=sharing
    
    a.2/ publish google sheet to the web
    
    https://docs.google.com/spreadsheets/d/e/2PACX-1vQ3ZHpAYDBhjSelXk-GFuFJACQzsqlufZ0d5UCLw8iJNJwdHglY7388fYHL4632wgXDIfgnrd238Htg/pubhtml
    
        <!DOCTYPE html>
    <html>
    <body>
    
    <h2>Using the amstras XMLHttpRequest Object</h2>
    
    <div id="demo">
    <button type="button" onclick="loadXMLDoc()">Load Data</button>
    </div>
    
    <script>
    function loadXMLDoc() {
      var xhttp = new XMLHttpRequest();
      var vUrl = "https://docs.google.com/spreadsheets/d/e/2PACX-1vQ3ZHpAYDBhjSelXk-GFuFJACQzsqlufZ0d5UCLw8iJNJwdHglY7388fYHL4632wgXDIfgnrd238Htg/pubhtml?gid=0&single=true&output=csv";
      xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
          document.getElementById("demo").innerHTML =
          this.responseText;
        }
      };
      xhttp.open("GET", vUrl , true);
      xhttp.send();
    }
    </script>
    
    </body>
    </html>
    
    06.01.2021
    Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..