การดึงข้อมูลทรัพยากรจากเว็บ

ถ้าคุณจําเป็นต้องจัดการทรัพยากรบนเว็บ ให้ใช้เมธอด UrlFetchApp ต่อไปนี้

คําขอ GET อย่างง่าย

ใช้หากคุณต้องการ fetch(url) รับทรัพยากรบนเว็บ

    var response = UrlFetchApp.fetch('https://www.contoso.com');

fetch(url)เมธอดจะส่งกลับวัตถุ HTTResponse ซึ่งมีเมธอดสําหรับการอ่านการตอบกลับ ใช้ getContentText วิธีการสําหรับการอ่านการตอบสนองของข้อความ และ getContent สําหรับการอ่านการตอบสนองของเลขฐานสอง

ถ้าเนื้อหาการตอบกลับมีวัตถุ JSON ให้ใช้เพื่อรับ getContentText วัตถุ JSON เมื่อต้องการเข้าถึงแต่ละเขตข้อมูลในวัตถุ JSON ให้ใช้วิธีการ JSON.parse() แยกวิเคราะห์การตอบกลับ

    var stock = JSON.parse(response.getContentText());
    Logger.log(`stock symbol: ${stock["symbol"]}`);
    Logger.log(`company: ${stock["companyName"]}`);
    Logger.log(`close price: ${stock["close"]}`);

การจัดการข้อผิดพลาด HTTP

ถ้าคําขอล้มเหลว (ตัวอย่างเช่น คําขอ 400 ไม่ถูกต้อง) บริการจะหยุดประมวลผลสคริปต์ของคุณและเขียนข้อความแสดงข้อผิดพลาดลงในบันทึก ข้อความจะมีรหัสสถานะ HTTP ของคําขอ แต่ไม่มีข้อความแสดงข้อผิดพลาดที่อาจอยู่ในเนื้อหาของการตอบกลับ

ถ้าคุณต้องการรับเนื้อหาของการตอบกลับ ให้เรียกใช้fetch(url, params)เมธอดแทน แล้วตั้งค่าพารามิเตอร์ muteHttpExceptions เป็น true การตั้งค่า muteHttpExceptions เป็น true จะคืนค่าการควบคุมไปยังสคริปต์ของคุณเสมอ จากนั้นคุณจะต้องเรียก getResponseCode() เมธอดเพื่อพิจารณาว่าคําขอสําเร็จหรือล้มเหลวและดําเนินการตามนั้น

    var response = UrlFetchApp.fetch('https://contoso.com', { muteHttpExceptions: true });    

    if (200 == response.getResponseCode())
    {
        Logger.log('HTTP request succeeded');
    }
    else
    {
        Logger.log('HTTP request failed');
    }

การเพิ่ม การอัปเดต หรือการลบทรัพยากรบนเว็บ

ถ้าคุณจําเป็นต้องเพิ่ม อัปเดต หรือลบทรัพยากรเว็บ ให้ใช้เมธอด fetch(url, params) วิธีนี้ช่วยให้คุณระบุกริยา HTTP ที่จะใช้ ส่วนหัวชนิดเนื้อหา ส่วนหัวอื่นๆ ที่คําขอของคุณต้องการ และส่วนข้อมูลของคําขอ สําหรับรายละเอียดเกี่ยวกับพารามิเตอร์เหล่านี้ ให้ดูวัตถุ UrlFetchParams

ตัวอย่างต่อไปนี้รับทรัพยากรที่ต้องใช้โทเค็นการเข้าถึง OAuth เนื่องจาก GET เป็นคํากริยา HTTP เริ่มต้นของวิธีการดึงข้อมูล พารามิเตอร์ที่คุณต้องระบุคือ headers พารามิเตอร์เท่านั้น

    var token = "<the oauth token goes here>";
    var response = UrlFetchApp.fetch('https://contoso.com', { headers: { Authorization: `Bearer ${token}` } });    
    var jsonObject = JSON.parse(response.getContentText());    

ตัวอย่างนี้ส่งคําขอ POST พร้อมส่วนข้อมูลของ JSON เนื่องจากส่วนข้อมูลเป็นวัตถุ JSON ตัวอย่างจะตั้งค่าcontentTypeพารามิเตอร์เป็น application/json

    var myData = {
        'id' : '123abc',
        'name' : 'leg',
        'color' : 'red'
    };

    var options = {
        'method' : 'post',
        'contentType' : 'application/json',
        'payload' : JSON.stringify(myData)
    };

    var response = UrlFetchApp.fetch('https://contoso.com', options);    
    var jsonObject = JSON.parse(response.getContentText());    

ใช้ UrlFetchApp เพื่อรับไฟล์ข้อมูลหรือไฟล์ CSV จาก OneDrive

เมื่อต้องการรับไฟล์จาก OneDrive (https://onedrive.live.com) ให้ใช้ Microsoft Graph การเข้าถึงไฟล์ OneDrive ต้องใช้โทเค็นการเข้าถึง OAuth และการรับโทเค็นการเข้าถึงจําเป็นต้องได้รับความยินยอมจากผู้ใช้ เว้นแต่ว่าคุณจะมีโทเค็นรีเฟรช แต่เนื่องจากสคริปต์ไม่สนับสนุนคอมโพเนนต์ UI คุณจะต้องขอความยินยอมด้วยวิธีอื่น ถ้าคุณยังไม่มีวิธีอื่นในการรับโทเค็นรีเฟรช ต่อไปนี้คือสคริปต์ PowerShell ที่คุณสามารถเรียกใช้เพื่อขอความยินยอมและโทเค็นรีเฟรช

$clientId = "your application ID goes here"
 
Start-Process "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=$clientId&scope=files.read offline_access&response_type=code&redirect_uri=https://login.live.com/oauth20_desktop.srf"
 
$code = Read-Host "Please enter the code"
 
$response = Invoke-WebRequest https://login.microsoftonline.com/common/oauth2/v2.0/token -ContentType application/x-www-form-urlencoded -Method POST -Body "client_id=$clientid&redirect_uri=https://login.live.com/oauth20_desktop.srf&code=$code&grant_type=authorization_code"
 
Write-Output "Refresh token: " ($response.Content | ConvertFrom-Json).refresh_token 

ก่อนที่คุณจะสามารถเรียกใช้สคริปต์ PowerShell คุณจําเป็นต้องทําตามขั้นตอนเหล่านี้เพื่อรับรหัสไคลเอ็นต์

  1. ไปยัง และhttps://apps.dev.microsoft.comคลิก เพิ่มแอป
  2. ใส่ชื่อแอป เช่น ไคลเอ็นต์สคริปต์ (ไม่ต้องเลือก การตั้งค่าตามคําแนะนํา)
  3. คลิก สร้าง และจด ID แอปพลิเคชันของคุณ (ID ผู้ซื้อ)
  4. คลิก เพิ่มแพลตฟอร์ม แล้วคลิก แอปพลิเคชันดั้งเดิม
  5. ภายใต้สิทธิ์ที่ได้รับมอบสิทธิ์ของ Microsoft Graph ให้คลิกเพิ่มและเลือก Files อ่านและ offline_access
  6. คลิก บันทึก

เปิดแผ่นจดบันทึกหรือตัวแก้ไขที่คุณชื่นชอบ แล้วคัดลอกสคริปต์ PowerShell ไปยังตัวแก้ไข ตั้งค่า $clientID เป็น ID แอปพลิเคชันที่คุณได้รับเมื่อลงทะเบียนแอป

$clientId = "abc123-4d9e-44f1-837d-a7244af50027"

บันทึกไฟล์และตั้งชื่อเป็น GetTokens.ps1 (คุณสามารถตั้งชื่ออะไรก็ได้ที่คุณต้องการ แต่ต้อง .ps1 นามสกุล)

ตอนนี้ ให้เปิดหน้าต่างคอนโซล หากต้องการเปิดหน้าต่างคอนโซลบน Microsoft Windows ให้ป้อนคําสั่งเรียกใช้ของ Windows ต่อไปนี้ (<ปุ่ม> Windows+r):

cmd.exe

ที่พร้อมท์คําสั่ง ให้นําทางไปยังโฟลเดอร์ที่คุณบันทึก GetTokens.ps1 จากนั้น ให้ใส่คําสั่งต่อไปนี้

powershell.exe -File .\GetTokens.ps1

ถ้าคุณได้รับข้อผิดพลาดนโยบายการดําเนินการ คุณจะต้องเปลี่ยนนโยบายการดําเนินการของคุณ สําหรับตัวเลือกนโยบายการดําเนินการ ให้ดู เกี่ยวกับนโยบายการดําเนินการ เมื่อต้องการเปลี่ยนนโยบายการดําเนินการสําหรับเซสชัน ให้ใส่คําสั่งต่อไปนี้

powershell.exe -ExecutionPolicy Bypass -File .\GetTokens.ps1

เมื่อสคริปต์ PowerShell ทํางานสําเร็จ จะเริ่มเซสชันเบราว์เซอร์ที่คุณใส่ข้อมูลประจําตัวของบัญชี Microsoft (MSA) ของคุณ (ข้อมูลประจําตัวต้องมีสิทธิ์เข้าถึงไฟล์ OneDrive ของคุณ) หลังจากให้ความยินยอม แถบที่อยู่ของเบราว์เซอร์จะประกอบด้วยรหัสการให้สิทธิ์ (ดู ?code={copy this code})

https://login.live.com/oauth20_desktop.srf?code=M7ab570e5-a1c0-32e5-a946-e4490c822954&lc=1033

คัดลอกรหัสการให้สิทธิ์ (M7ab570e5-a1c0-32e5-a946-e4490c822954) และป้อนรหัสในหน้าต่างคอนโซลที่พร้อมท์ จากนั้นสคริปต์ PowerShell จะส่งกลับโทเค็นรีเฟรช ใช้โทเค็นรีเฟรชในสคริปต์ของคุณเพื่อรับโทเค็นการเข้าถึง คุณควรปฏิบัติต่อโทเค็นรีเฟรชเหมือนกับที่คุณใช้รหัสผ่าน ถ้ามีคนได้รับ พวกเขาจะสามารถเข้าถึงข้อมูล OneDrive ของคุณได้

โทเค็นรีเฟรชมีอายุยาวนาน แต่อาจไม่ถูกต้องได้ ถ้าคุณได้รับข้อผิดพลาด invalid_grant โทเค็นรีเฟรชของคุณจะไม่ถูกต้องอีกต่อไป และคุณจะต้องเรียกใช้สคริปต์ PowerShell อีกครั้งเพื่อขอความยินยอมและโทเค็นรีเฟรชใหม่

ตัวอย่างที่ดาวน์โหลดไฟล์ CSV

หลังจากได้รับโทเค็นรีเฟรช ตัวอย่างต่อไปนี้จะแสดงวิธีการ 1) ใช้โทเค็นรีเฟรชเพื่อรับโทเค็นการเข้าถึง และ 2) เรียกใช้ Microsoft Graph เพื่อรับ URL การดาวน์โหลดที่คุณใช้ในการดาวน์โหลดไฟล์ CSV แทนที่ {yourclientid} ด้วย ID แอปพลิเคชันของแอปที่ลงทะเบียนไว้ แล้วแทนที่ {yourrefreshtoken} ด้วยโทเค็นรีเฟรชของคุณ

function main() {
    var clientId = "{yourclientid}";
    var refreshToken = "{yourrefreshtoken}";

    var options = {
        'method' : 'post',
        'contentType' : 'application/x-www-form-urlencoded',
        'payload' : `client_id=${clientId}&redirect_uri=https://login.live.com/oauth20_desktop.srf&refresh_token=${refreshToken}&grant_type=refresh_token`
    };
    
    // Use the refresh token to get the access token.

    var response = UrlFetchApp.fetch('https://login.microsoftonline.com/common/oauth2/v2.0/token', options);
 
    var tokens = JSON.parse(response.getContentText());

    // Get the contents of the CSV file from OneDrive passing the access token in the Authorization header. 
    // Replace the path and file name (/me/drive/root/children/bids.csv) with your path and file name.

    response = UrlFetchApp.fetch('https://graph.microsoft.com/v1.0/me/drive/root/children/bids.csv/content', { headers: { Authorization: `Bearer ${tokens['access_token']}` } });    
 
    // Read and parse the contents of the file. The parseCSV method is a placeholder for 
    // whichever method you provide to parse the file.

    var file = response.getContentText();
    var data = parseCSV(file);
}

แยกวิเคราะห์ไฟล์ CSV

ไม่มีเครื่องมือแยกวิเคราะห์ CSV ในตัว ดังนั้นคุณจะต้องเขียนของคุณเองหรือค้นหาทางออนไลน์ ตัวอย่างเช่น การค้นหาด่วนออนไลน์พบ รายการนี้ ใน Stack Overflow ถ้าคุณพบแอปออนไลน์ ตรวจสอบให้แน่ใจว่าไม่มีข้อจํากัดในการใช้งาน

การเข้าถึงบริการของ Google

สําหรับข้อมูลเกี่ยวกับการใช้ UrlFetchApp เพื่อเข้าถึงบริการของ Google ให้ดูที่ การโทรบริการ Google