Month: February 2023

  • วิธีใช้ Power Query ดึงข้อมูลจาก PSU Web API

    PSU Web API เป็นเว็บที่ให้บริการข้อมูลในรูปแบบ JSON ทุกท่านที่มี PSU Passport สามารถสมัครเพื่อขอใช้บริการได้ที่เว็บไซต์ api.psu.ac.th โดยปัจจุบันข้อมูลที่เปิดให้บริการแล้วคือ ข้อมูลส่วนกลาง ข้อมูลระบบสารสนเทศนักศึกษา และข้อมูลระบบสารสนเทศบุคลากร สำหรับทุกท่านที่สนใจใช้บริการข้อมูลสามารถศึกษาวิธีการได้จากคู่มือของระบบค่ะ

    วันนี้จะขอนำเสนอวิธีการดึงข้อมูลจาก PSU Web API ที่ให้บริการออกมาเป็นรูปแบบตารางด้วย Power Query ใน Microsoft Excel 365 กันค่ะ ซึ่งการดึงข้อมูลด้วย Power Query นี้น่าจะเหมาะสำหรับคนที่ไม่ถนัดในการเขียนโปรแกรมเพื่อดึงข้อมูลมาใช้งานกันค่ะ

    STEP 1 : เชื่อมต่อกับแหล่งข้อมูล PSU Web API

    • คลิกเมนู Data –> Get Data –> From Other Sources –> From Web
    • ตัวอย่าง แสดงการดึงข้อมูลชื่อปริญญาที่ให้บริการจากระบบ PSU Web API
    • ป้อน URL ตามรูปแบบที่กำหนด ศึกษาได้จากคู่มือการใช้งานของระบบ (ตามตัวอย่างให้แสดงข้อมูล 100 รายการ)
    • คลิกปุ่ม OK

    STEP 2 : ตั้งค่า Power Query Editor

    • ระบบแสดงผลลัพธ์ข้อมูล 2 ส่วน คือส่วน paging ลักษณะข้อมูลเป็น Record และส่วนของ data ซึ่งจะมีลักษณะข้อมูลเป็น List ซึ่งภายใน List จะมี Record ซ้อนอยู่ข้างในอีกที
    • ตั้งชื่อ Query Name : Degree
    • คลิก Convert Into Table เพื่อแปลงผลลัพธ์ 2 ส่วนออกมาเป็นตาราง

    STEP 3 : ทำการ Transpose และแตก List ข้อมูล

    • คลิกเมนู Transpose –> Reverse Rows เพื่อสลับให้ paging เป็น First Row
    • คลิก Use First Row as Header เพื่อเตรียมแตก List ในคอลัมน์ data ออกมา
    • คลิกปุ่ม Expand ที่หัวตารางของคอลัมน์ Column2 แล้วคลิก Expand to New Rows เราก็จะได้ Record ออกมาในแต่ละบรรทัด
    • คลิกปุ่ม Expand ที่หัวตารางของคอลัมน์ Column2 อีกครั้ง
    • สามารถคลิกเลือกหรือไม่เลือกคอลัมน์ที่ต้องการหรือไม่ต้องการได้
    • คลิกไม่เลือก Use original column name as prefix
    • คลิกปุ่ม OK ระบบแสดงข้อมูลจำนวน 100 รายการตามที่กำหนดจาก PSU Web API
    • คลิกเมนู Home –> Close & Load เพื่อเสร็จสิ้น

    STEP 4 : Power Query ดึงข้อมูลจาก PSU Web API มาแสดงเป็นตารางเรียบร้อยแล้วค่ะ

    ^_^ หวังว่าโพสนี้จะเป็นประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ แล้วพบกันใหม่ค่ะ

  • วิธีรวมข้อมูล Excel จากหลายชีทเข้าด้วยกันเป็นตารางเดียวด้วย Power Query

    Power Query เครื่องมือสำคัญของ Power BI และ Microsoft Excel 2016 | 2019 | 365 ที่จะช่วยจัดการข้อมูลให้ได้ตามต้องการ ไม่ว่าเป็นการรวบรวมข้อมูลจากหลายแหล่งเข้าด้วยกัน การเปลี่ยนประเภทข้อมูล การจัดตารางหรือคิวรี การจัดคอลัมน์ การจัดการข้อมูลที่บกพร่อง การรวมข้อมูล การแยกข้อมูล การปรับแต่งข้อมูล และการสร้างรูปแบบข้อมูล

    จุดเด่นของ Power Query

    • รวบรวมข้อมูลได้จากหลายแหล่ง หลากหลายรูปแบบ
    • ใช้งานง่าย มีปุ่มเมนูให้ใช้งาน
    • ทุกการกระทำจะถูกบันทึกไว้เป็น Steps สามารถแก้ไข สลับลำดับ หรือลบ Steps ที่ทำไว้ได้อย่างง่ายดาย
    • รองรับการทำงานที่ Advance มากขึ้นด้วย M Code ซึ่งเป็นภาษาพิเศษของ Power Query

    ในการใช้งาน Microsoft Excel เราอาจจะมีความจำเป็นที่จะรวมรวมข้อมูลจากหลาย ๆ ซีทเป็นตารางเดียว เพื่อให้สามารถนำไปวิเคราะห์ต่อ วันนี้จึงจะขอนำเสนอความสามารถของ Power Query เพื่อรวมข้อมูล Excel แต่ละชีทรวมเป็นตารางเดียวโดยเริ่มจาก

    STEP 1 : ทำการแปลงข้อมูลในแต่ละชีทให้เป็นตาราง

    • เนื่องจาก Power Query จะทำงานกับข้อมูลในรูปแบบที่เป็นตาราง ดังนั้นต้องดำเนินการแปลงข้อมูลแต่ละชีทให้เป็นตาราง
    • ภายในชีท HATYAI คลิกเซลล์ A1
    • คลิกเมนู Insert –> Table
    • ระบบเลือกช่วงข้อมูลที่ต้องการให้อัตโนมัติ
    • เลือก My table has headers
    • คลิกปุ่ม OK
    • กำหนด Table Name : T_HATYAI
    • ดำเนินการเช่นเดียวกันในชีทที่เหลือโดยตั้งชื่อตาราง T_PATTANI, T_PHUKET, T_SURAT, T_TRANG ตามลำดับ

    STEP 2 : รวมข้อมูลเป็นตารางเดียวด้วย Power Query

    • คลิกเมนู Data –> Get Data –> From Other Sources –>Blank Query
    • ระบบแสดงหน้าต่าง Power Query Editor

    STEP 3 : กำหนดรายละเอียดของ Query

    • ตั้งชื่อ Query Name : ALL_CAMPUS
    • พิมพ์ฟังก์ชัน “=Excel.CurrentWorkbook()” ซึ่งเป็นภาษา M ที่อยู่เบื้องหลังของ Power Query เพื่อแสดงตารางข้อมูลทั้งหมดในไฟล์ Excel ของเรา
    • เราสามารถ Filter เพื่อเลือกรวมเฉพาะตารางข้อมูลที่ต้องการเท่านั้นได้
    • สมมุติเราต้องการรวมเฉพาะตารางเฉพาะที่ขึ้นต้นด้วยตัวอักษร ‘T’ เราสามารถทำได้โดยคลิกที่ Text Filters –> Begins With….
    • กรอกตัวอักษร T ลงไป คลิกปุ่ม OK

    STEP 4 : กำหนดรายละเอียดของคอลัมน์

    • สามารถเลือกหรือไม่เลือกคอลัมน์ที่ต้องการหรือไม่ต้องการได้
    • กำหนดเงื่อนไขไม่เลือก Use original column name as prefix กรณีเลือกจะมีชื่อ Content นำหน้าชื่อคอลัมน์เช่น Content.Subject ID Content.Subject Code เป็นต้น
    • คลิกปุ่ม OK ระบบแสดงข้อมูลที่เกิดจากการรวมของตารางข้อมูลตามเงื่อนไข
    • คลิกปุ่ม Close & Load ระบบจะทำการรวมข้อมูลทั้ง 5 ชีทไว้ที่ชีท ALL_CAMPUS

    STEP 4 : Power Query รวมข้อมูล Excel จากหลายชีทเข้าด้วยกันเป็นตารางเดียวเรียบร้อยแล้วค่ะ

    ^_^ หวังว่าโพสนี้จะเป็นประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ แล้วพบกันใหม่ค่ะ

  • วิธีการแยกคำนำหน้าชื่อ ชื่อและนามสกุล ที่รวมอยู่ในช่องเดียวกันใน Microsoft Excel

    ในการใช้งาน Microsoft Excel เราคงจะเคยเจอปัญหาที่ข้อมูลมีทั้งคำนำหน้าชื่อ ชื่อและนามสกุล รวมอยู่ในช่องเดียวกัน แต่การนำไปใช้งานของเราต้องการที่จะแยกคำนำหน้าชื่อ ชื่อและนามสกุลออกจากกันเป็นคนละช่อง

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

    STEP 1 : สร้างคอลัมน์สำหรับการแสดงผล และสร้าง List รายการคำนำหน้าชื่อที่คอลัมน์ I

    STEP 2 : ทำการแปลง TITLE_LIST เป็นตาราง เพื่อความสะดวกในการจัดการข้อมูลคำนำหน้าชื่อและการอ้างอิงข้อมูล

    • คลิกเซลล์ I1
    • คลิกเมนู Insert –> Table
    • ระบบเลือกช่วงข้อมูลที่ต้องการให้อัตโนมัติ
    • เลือก My table has headers
    • คลิกปุ่ม OK
    • กำหนด Table Name : TITLE

    STEP 3 : ทำการแยกเฉพาะคำนำหน้าชื่อมาแสดงที่คอลัมน์ D ด้วยฟังก์ชัน SEARCH , MATCH และ INDEX

    =INDEX(TITLE[TITLE_LIST],MATCH(1,SEARCH(TITLE[TITLE_LIST],B2),0))

    ฟังก์ชัน SEARCH : ค้นหาสตริงข้อความหนึ่งภายในสตริงข้อความที่สอง และส่งกลับตัวเลขที่เป็นตำแหน่งเริ่มต้นของสตริงข้อความแรกจากอักขระแรกของสตริงข้อความที่สอง

    ไวยากรณ์ : SEARCH(find_text,within_text,[start_num])

    กรณี

    • ถ้าไม่พบค่าของ find_text จะส่งกลับ #VALUE! เป็นค่าความผิดพลาด
    • กรณีพบค่าของ find_text ส่งกับตัวเลขที่เป็นตำแหน่งเริ่มต้นของสตริงข้อความแรกจากอักขระแรกของสตริงข้อความที่สอง
      • กรณี find_text เป็นช่วงข้อมูล จะส่งค่ากลับเป็นเลข 1

    ฟังก์ชัน MATCH : ค้นหารายการที่ระบุช่วงในเซลล์ แล้วส่งกลับตําแหน่งสัมพันธ์ของรายการนั้นในช่วง ตัวอย่างเช่น ถ้าช่วง A1:A3 มีค่า 5, 25 และ 38 สูตร =MATCH(25,A1:A3,0) จะส่งกลับตัวเลข 2 เนื่องจาก 25 เป็นรายการที่สองในช่วง

    ไวยากรณ์ : MATCH(lookup_value, lookup_array, [match_type])

    ฟังก์ชัน INDEX : ส่งกลับค่าจากภายในตารางหรือช่วงข้อมูล

    ไวยากรณ์ : INDEX(array, row_num, [column_num])

    STEP 4 : ทำการแยกชื่อและนามสกุลออกจากคำนำหน้าชื่อมาแสดงที่คอลัมน์ C ด้วยฟังก์ชัน SUBSTITUTE

    =SUBSTITUTE(B2,D2,””)

    ฟังก์ชัน SUBSTITUTE : ใช้แทนที่ข้อความเดิม old text ด้วยข้อความใหม่ new text ส่วน instance_num ใช้เพื่อระบุตำแหน่งการแทนที่ ซึ่งถ้าไม่ระบุ old text จะถูกเปลี่ยนด้วย new text ทั้งหมด

    ไวยากรณ์ : SUBSTITUTE(text, old_text, new_text, [instance_num])

    STEP 5 : ทำการแยกชื่อมาแสดงที่คอลัมน์ E ด้วยฟังก์ชัน LEFT และ SEARCH

    =LEFT(C2,SEARCH(” “,C2,1)-1)

    ฟังก์ชัน LEFT : ส่งกลับอักขระจำนวนหนึ่งที่อยู่ในลำดับแรกๆ ในสตริงข้อความ ตามจำนวนอักขระที่ระบุ

    ไวยากรณ์ : LEFT(text, [num_chars])

    STEP 6 : ทำการแยกนามสกุลมาแสดงที่คอลัมน์ F ด้วยฟังก์ชัน RIGHT , LEN และ SEARCH

    =RIGHT(C2,LEN(C2)-SEARCH(” “,C2,1))

    ฟังก์ชัน RIGHT : ส่งกลับอักขระสุดท้ายจำนวนหนึ่งในสตริงข้อความ ตามจำนวนอักขระที่ระบุ

    ไวยากรณ์ : RIGHT(text,[num_chars])

    ฟังก์ชัน LEN :  ส่งกลับเป็นจำนวนอักขระในสตริง

    ไวยากรณ์ : LEN(text)

    STEP 7 : แยกคำนำหน้าชื่อ ชื่อและนามสกุล ที่รวมอยู่ในช่องเดียวกันใน Microsoft Excel เรียบร้อยแล้วค่ะ

    ^_^ หวังว่าโพสนี้จะเป็นประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ แล้วพบกันใหม่ค่ะ

  • เทคนิคการดึงข้อมูล Youtube Video ผ่าน Youtube API

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

    โจทย์ที่ว่าก็คือ จะต้องดึงข้อมูลรายละเอียดต่างๆ ของ Youtube จาก URL ที่ระบุ ไม่ว่าจะเป็น Thumbmail, Title, Description ซึ่งจากการไปศึกษา API ที่ Youtube ได้จัดเตรียมไว้ให้ ก็พบว่าสามารถใช้งานได้อย่างไม่ยุ่งยากแต่อย่างใด เพียงแต่เราจะต้องมี API Key ที่ต้องใช้ในการเข้าถึงข้อมูลต่างๆ ของ Youtube ดังนั้นเริ่มต้นเราจะไปดูวิธีการให้ได้มาซึ่ง API Key ก่อน

    1. เข้าไปที่ https://console.cloud.google.com/cloud-resource-manager และ login ด้วย google account ให้เรียบร้อย จากนั้นทำการสร้าง Project ใหม่

    2. ป้อนชื่อโปรเจ็ค ในที่นี้สมมติเป็น Sample Project กด CREATE

    3. จากนั้นให้ทำการ Enable API เพื่อให้โปรเจ็คที่เราสร้างสามารถใช้งานได้ โดยให้ไปที่เมนูแฮมเบอร์เกอร์ -> APIs & Services -> Enabled APIs & services

    4. กด + ENABLE APIS AND SERVISES

    5. ค้น Youtube Data API

    6. เลือก YouTube Data API v3 และกด Enable

    7. กด Enable

    8. กลับไปที่ Enable APIS And Services และเลือก YouTube Data API v3

    9. เลือก CREATE CREDENTIALS

    10. เลือก Public data และกด NEXT

    11. จะได้ API Key ที่จะนำไปใช้ในการเขียนโปรแกรมเพื่อดึงข้อมูลจาก Youtube API ให้สำเนาเก็บไว้ใช้งานในขั้นตอนต่อไป

    เมื่อเราได้ API Key มาแล้ว เราก็จะมาถึงขั้นตอนในการเขียนโปรแกรมกันต่อ เนื่องจากในตอนนี้ผู้เขียนพัฒนาโปรเจ็คต่างๆ ด้วย Blazor ซึ่งเป็นเฟรมเวิร์คปัจจุบันของ ASP.NET ตัวอย่างโค้ดผู้เขียนก็จะขอเขียนด้วย Blazor ซึ่งในส่วนของการติดต่อ API ก็น่าจะพอเป็นแนวทางให้กับการพัฒนาด้วยเฟรมเวิร์คอื่นหรือภาษาอื่นได้ และเพื่อไม่ให้บล็อกนี้ยาวเกินไป ผู้เขียนขอข้ามขั้นตอนการสร้างโปรเจ็คไปเลย

    1. เริ่มต้นเพื่อให้โปรเจ็คของเราสามารถใช้งาน Youtube API ได้ เราจะต้องติดตั้ง Library ที่จำเป็นก่อน โดยเราจะติดตั้งผ่านเครื่องมือที่เรียกว่า Nuget โดยคลิกขวาที่โปรเจ็ค เลือก Manage Nuget Packages…

    2. ค้น Youtube เลือก Google.Apis.Youtube.v3 และ Install

    3. และเพื่อให้ page ที่เราจะเขียนโปรแกรมติดต่อกับ Youtube API สามารถใช้งาน Library ดังกล่าวได้ เราจะต้องเพิ่ม using Library นั้นๆ เข้ามาก่อน

    @using Google.Apis.Services
    @using Google.Apis.YouTube.v3
    @using Google.Apis.YouTube.v3.Data
    

    4. สร้าง YoutubeService เพื่อใช้ในการติดต่อ API และเราจะกำหนด API Key ใน object นี้ ดังโค้ดตัวอย่าง

    var youtubeService = new YouTubeService(new BaseClientService.Initializer()
    {
        ApiKey = "XXxxXxXxXXX0xxxxXXxxxXxXXxxxxXXxX0XX0x0",
        ApplicationName = this.GetType().ToString()
    });

    5. สร้าง object ListRequest และกำหนดข้อมูลที่ต้องการเป็น snippet ผ่านเมทธอด List ซึ่ง snippet จะเป็น object ที่บรรจุข้อมูลต่างๆ ของวิดีโอยูทูปนั้นๆ

    VideosResource.ListRequest req = youtubeService.Videos.List("snippet");

    6. กำหนดค่าแปรวิดีโอที่เราต้องการดึงข้อมูล ซึ่งจะเป็น parameter ที่อยู่หลังตัวแปร v เช่น https://www.youtube.com/watch?v=4VTx7oIzv_8 ค่าที่เราต้องการคือ 4VTx7oIzv_8

    req.Id = "4VTx7oIzv_8";

    7. จากนั้นทำการดึงข้อมูลจาก Youtube โดยเรียกเมทธอด Execute และดึงข้อมูลที่ต้องการจาก property ต่างๆ ที่อยู่ใน object Snippet

    VideoListResponse resp = req.Execute();
    if (resp.Items.Count > 0)
    {
    	title = resp.Items.ElementAt(0).Snippet.Title;
    	description = resp.Items.ElementAt(0).Snippet.Description;
        ThumbnailDetails tmb = resp.Items.ElementAt(0).Snippet.Thumbnails;
        thumbnail = tmb.Default__.Url;
    }

    8. และโด้ด HTML ส่วนแสดงผล

    <p><b>URL : </b> @url</p>
    <p><b>Title : </b> @title</p>
    <p><b>Description : </b> @title</p>
    <p><b>Thumbnail : </b> </p>
    <img src="@thumbnail" />

    9. จะได้ผลลัพธ์ดังตัวอย่าง

    10. นอกจากนี้ผู้อ่านสามารถดึงข้อมูลอื่นๆ ที่เกี่ยวข้องกับ video นั้นๆ ได้ผ่าน object Snippet รวมทั้งมี object ย่อยๆ อีกมากมายอย่างเช่น Thumbnails เป็นต้น หรือผู้อ่านจะทดสอบการทำงานได้ง่ายๆ ผ่าน query string โดยให้แทนที่ API Key ด้วยคีย์ของท่านเอง และ Video ID ด้วย ID ของ Video ที่ต้องการได้เลย ดังตัวอย่าง

    https://www.googleapis.com/youtube/v3/videos?part=snippet&id={video IDs}&key={API key}

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


    แหล่งข้อมูลอ้างอิง