Ich liege nachts und versuche zu schlafen. Und wie immer tausend Gedanken, und unter ihnen gelang es mir, einen zu fangen. Und es klang so: "Warum nicht einen Analysator für Fußballspiele erstellen, bei dem Sie nur die Teilnehmer des Spiels eingeben und eine Stichprobe ihrer allgemeinen Statistiken sowie eine Beschreibung dessen erhalten müssen, was Sie im kommenden Spiel erwartet." In der Tat, warum nicht ?!
Am nächsten Tag, als ich aufwachte, war das erste, was ich tat, Google. Gibt es jetzt so etwas, weil etwas darauf hindeutete, dass dies in unserer Welt eine zu banale Idee ist (okay !?). Aber ich wollte nicht nur Zahlen zu Statistiken hinzufügen und von diesen trennen, sondern auch verschiedene Faktoren eines Sportereignisses berücksichtigen, aber es gibt eine große Anzahl davon.
Google gab sein Ergebnis jedoch wie immer. Ich habe eine Reihe von Ratenrechnern gefunden, die für 3-5.000 Rubel verkauft werden, und andere Berechnungstabellen, die gemeinfrei sind. Ich erinnerte mich irgendwie an die Berechnungen der Gesamtziele, aber ich musste sie verbessern und einen ganzen "Magier / Zauberer / Wangoo" von Sportereignissen am Ausgang haben. Oder zumindest eine Formel, die das Ergebnis nach Eingabe der Daten zurückgibt.
Schreibt das ein Parser ?!
Ich wollte nicht tief in den Code eintauchen. Erstens bin ich kein Programmierer, sondern eine Person, die ihm in seiner Arbeit ständig begegnet und ihn ziemlich gut verstehen kann. Zweitens war ich einfach zu faul, ich suchte nach einfachen Lösungen. Und ich erinnerte mich, dass das Wunder von Google Sheets Tabellen, XML- und HTML-Seiten analysieren kann, und dies geschieht mit einfachen Formeln: IMPORTDATA, IMPORTFEED, IMPORTHTML, IMPORTXML. Hier ist ein Link zu Googles Hilfe, dort wird alles ausführlich beschrieben, darauf werde ich wahrscheinlich nicht näher eingehen.
, . , , , . fbref.com, 2002 . " , !", - , 3- . , XG, XGa "". API Google Sheets query , sql, , , .
, Google Sheets ?!
, , . , , . , , . . , , Wordpress, , -, , . , , . Inline Google Spreadsheet Viewer. , , :
, Google Sheets?
. , , , . =). , . : , ( , ), , Google Sheets API. .
. " html , Google Apps". 999 , , , .
, , Google Sheets, - . , , . . , , , .
. , , , . , . Google Apps Script .
/******************************************************************************
* This tutorial is based on the work of Martin Hawksey twitter.com/mhawksey *
* But has been simplified and cleaned up to make it more beginner friendly *
* All credit still goes to Martin and any issues/complaints/questions to me. *
******************************************************************************/
// if you want to store your email server-side (hidden), uncomment the next line
// var TO_ADDRESS = "example@email.net";
// spit out all the keys/values from the form in HTML for email
// uses an array of keys if provided or the object to determine field order
function formatMailBody(obj, order) {
var result = "";
if (!order) {
order = Object.keys(obj);
}
// loop over all keys in the ordered form data
for (var idx in order) {
var key = order[idx];
result += "<h4 style='text-transform: capitalize; margin-bottom: 0'>" + key + "</h4><div>" + sanitizeInput(obj[key]) + "</div>";
// for every key, concatenate an `<h4 />`/`<div />` pairing of the key name and its value,
// and append it to the `result` string created at the start.
}
return result; // once the looping is done, `result` will be one long string to put in the email body
}
// sanitize content from the user - trust no one
// ref: https://developers.google.com/apps-script/reference/html/html-output#appendUntrusted(String)
function sanitizeInput(rawInput) {
var placeholder = HtmlService.createHtmlOutput(" ");
placeholder.appendUntrusted(rawInput);
return placeholder.getContent();
}
function doPost(e) {
try {
Logger.log(e); // the Google Script version of console.log see: Class Logger
record_data(e);
// shorter name for form data
var mailData = e.parameters;
// names and order of form elements (if set)
var orderParameter = e.parameters.formDataNameOrder;
var dataOrder;
if (orderParameter) {
dataOrder = JSON.parse(orderParameter);
}
// determine recepient of the email
// if you have your email uncommented above, it uses that `TO_ADDRESS`
// otherwise, it defaults to the email provided by the form's data attribute
var sendEmailTo = (typeof TO_ADDRESS !== "undefined") ? TO_ADDRESS : mailData.formGoogleSendEmail;
// send email if to address is set
if (sendEmailTo) {
MailApp.sendEmail({
to: String(sendEmailTo),
subject: "Contact form submitted",
// replyTo: String(mailData.email), // This is optional and reliant on your form actually collecting a field named `email`
htmlBody: formatMailBody(mailData, dataOrder)
});
}
return ContentService // return json success results
.createTextOutput(
JSON.stringify({"result":"success",
"data": JSON.stringify(e.parameters) }))
.setMimeType(ContentService.MimeType.JSON);
} catch(error) { // if error return this
Logger.log(error);
return ContentService
.createTextOutput(JSON.stringify({"result":"error", "error": error}))
.setMimeType(ContentService.MimeType.JSON);
}
}
/**
* record_data inserts the data received from the html form submission
* e is the data received from the POST
*/
function record_data(e) {
var lock = LockService.getDocumentLock();
lock.waitLock(30000); // hold off up to 30 sec to avoid concurrent writing
try {
Logger.log(JSON.stringify(e)); // log the POST data in case we need to debug it
// select the 'responses' sheet by default
var doc = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = e.parameters.formGoogleSheetName || "responses";
var sheet = doc.getSheetByName(sheetName);
var oldHeader = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var newHeader = oldHeader.slice();
var fieldsFromForm = getDataColumns(e.parameters);
var row = [new Date()]; // first element in the row should always be a timestamp
// loop through the header columns
for (var i = 1; i < oldHeader.length; i++) { // start at 1 to avoid Timestamp column
var field = oldHeader[i];
var output = getFieldFromData(field, e.parameters);
row.push(output);
// mark as stored by removing from form fields
var formIndex = fieldsFromForm.indexOf(field);
if (formIndex > -1) {
fieldsFromForm.splice(formIndex, 1);
}
}
// set any new fields in our form
for (var i = 0; i < fieldsFromForm.length; i++) {
var field = fieldsFromForm[i];
var output = getFieldFromData(field, e.parameters);
row.push(output);
newHeader.push(field);
}
// more efficient to set values as [][] array than individually
var nextRow = sheet.getLastRow() + 1; // get next row
sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
// update header row with any new data
if (newHeader.length > oldHeader.length) {
sheet.getRange(1, 1, 1, newHeader.length).setValues([newHeader]);
}
}
catch(error) {
Logger.log(error);
}
finally {
lock.releaseLock();
return;
}
}
function getDataColumns(data) {
return Object.keys(data).filter(function(column) {
return !(column === 'formDataNameOrder' || column === 'formGoogleSheetName' || column === 'formGoogleSendEmail' || column === 'honeypot');
});
}
function getFieldFromData(field, data) {
var values = data[field] || '';
var output = values.join ? values.join(', ') : values;
return output;
}
, , . ?
, , , . .
function update() {
var sheetName1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tournament");
var sheetName2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TheMeets");
var sheetName3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TheMeets_sort");
var cellFunction1 = '=IMPORTHTML("https://fbref.com/en/comps/12/La-Liga-Stats","table",1)';
var cellFunction2 = '=sort({IMPORTHTML("https://fbref.com/en/comps/12/schedule/La-Liga-Scores-and-Fixtures","table",1);IMPORTHTML("https://fbref.com/en/comps/12/3239/schedule/2019-2020-La-Liga-Scores-and-Fixtures","table",1);IMPORTHTML("https://fbref.com/en/comps/12/1886/schedule/2018-2019-La-Liga-Scores-and-Fixtures","table",1);IMPORTHTML("https://fbref.com/en/comps/12/1652/schedule/2017-2018-La-Liga-Scores-and-Fixtures","table",1)},3,FALSE)';
var cellFunction3 = '=sort(IMPORTHTML("https://fbref.com/en/comps/12/schedule/La-Liga-Scores-and-Fixtures","table",1),3,TRUE)';
sheetName1.getRange('A1').setValue(cellFunction1);
sheetName2.getRange('A2').setValue(cellFunction2);
sheetName3.getRange('A1').setValue(cellFunction3);
}
. Google Apps Script , . !
!
, :
" " "", , Google Sheets , , . , -.
Ich hoffe, dass meine Arbeit nicht umsonst geleistet wurde, und im russischsprachigen Raum wird dieser Artikel ein paar Leben mehr vor Ideen retten, die Sie von innen heraus verführen und fressen.
Der gesamte Code, Anweisungen und wie die Verwendung von Google Apps Script Ihre Daten in Google Tabellen speichern hier .