Image Description
Soranat Chamkring
  • 21 February 2024
  • 12 mins read

Open Source YouTube API from Google

Toy

17 February 2024

พี่ทอย ผมมีข้อมูลอยู่บน YouTube มากมายเลย ผมจะนำมาใช้ได้ยังไงครับ ?

เดี๋ยวพี่จะเล่าให้ฟังๆ

    หากเรามีข้อมูลบน YouTube Channel แล้วต้องการจะนำมาวิเคราะห์เพื่อปรับปรุงช่องให้มีคุณภาพ และผู้ติดตามมากยิ่งขึ้น การทำงานครั้งแรกคงจะอยู่ในภาพของการดูบน YouTube Analytics หรือการ Export มาเป็น Excel อย่างใดอย่างนึง แต่ถ้าหากเราต้องทำอย่างนี้เรื่อยๆ ทุกเดือน ทุกสัปดาห์ มันคงจะเหนื่อยไม่ใช่น้อย วันนี้เราจึงมาเสนอทางเลือกในการใช้งาน YouTube API แบบง่ายๆ โดยเราจะใช้ Python ไปตัวหลักในการทำงาน ก่อนอื่นจะต้องทำการติดตั้ง Library ของ google เข้าไปใน Environment ของเครื่องเราก่อนครับ

pip install google-api-python-client 
Done
python library installation

    ไปที่ Google Cloud Console Library แล้ว login ด้วย Account Google แล้วเลือก Project สักอัน

เลือกโปรเจคที่ต้องการใช้ API
Caption : เลือกโปรเจคที่ต้องการใช้ API

    Search 'YouTube' แล้วเลือก YouTube Data API V3

เลือก YouTube Data API V3
Caption : เลือก YouTube Data API V3

    หากมีการกด Enable อยู่แล้ว สามารถกด Manage ได้เลย

เลือก YouTube Data API V3
Caption : เลือก YouTube Data API V3

    เมื่อพูดถึงการดึงข้อมูลต่างผ่าน API แล้ว มีวิธีหลายแบบที่เราสามารถใช้ในการยืนยันตัวตนได้ทั้งแบบ Request header การใช้ Token หรือแม้กระทั่งการใช้ Credential เพื่อยืนยันผู้เรียกใช้ข้อมูล และแน่นอนว่า Youtube API จะใช้ Credential เป็นตัวหลังในการดึงข้อมูลครับ ซึ่งเราสามารถสร้าง Credential ได้ตามขั้นตอนด้านล่างนี้เลย

สร้าง Credential สำหรับดึงข้อมูล
Caption : สร้าง Credential สำหรับดึงข้อมูล
กดปุ่มเพื่อสร้าง API Key
Caption : กดปุ่มเพื่อสร้าง API Key
Copy API Key ไว้ใช้งาน
Caption : Copy API Key ไว้ใช้งาน

    หลังจากนี้จะเป็นเนื้อหาในส่วนของการเขียนโค้ด Python แล้ว หากใครพร้อมไปลุยกันได้เลยครับ สามารถศึกษาที่นี่ https://developers.google.com/youtube/v3/quickstart/python

ตัวอย่างการเขียนโค้ดแบบง่ายๆ ด้วย python

    การ Setup Library และการประกาศตัวแปร api_key (ควรเก็บไว้ใน .env เพื่อความปลอดภัยในการเรียกใช้งาน และป้องกันการรั่วไหลของข้อมูล) ทุกคนสามารถทำตามนี้ได้่เลย และสามารถปรับแต่งเป็นการอ้าง path ไปยัง Credential ได้เช่นกัน ขอแค่ไปถูก Path ที่กำหนดไว้ก็พอครับ

from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
import pandas as pd
import requests

api_key = <YOUR_API_KEY>
api_service_name = "youtube"
api_version = "v3"
youtube = build(api_service_name, api_version, developerKey=api_key)

    มาลองทดสอบ API กันด้วยการเรียก Video Category ที่มีอยู่ในประเทศไทย

    part เป็นส่วนที่ให้เราระบุว่าต้องการข้อมูลส่วนไหนบ้างซึ่งแต่ละ function ก็มี part ที่ให้เรียกไม่เท่ากัน สำหรับ function นี้มีให้เรียกแค่ snippet และ id ของ video category สามารถนำไปใช้ filter ข้อมูลใน function อื่น ๆ ต่อไปได้

res = youtube.videoCategories().list(part= 'snippet',  regionCode = 'TH').execute()
video_cate = pd.json_normalize(res['items'])
video_cate.head()
ตัวอย่างการดึงข้อมูล Video Category
Caption : ตัวอย่างการดึงข้อมูล Video Category

    Youtube Data API สามารถดึงข้อมูล trending ในประเทศไทย ได้สูงสุด 50 อันดับ

response = youtube.videos().list(part="snippet,statistics",
                                    chart="mostPopular",
                                    regionCode="TH",
                                    maxResults=50).execute()
trending = pd.json_normalize(response['items'], sep='_')
trending.head()
ตัวอย่างการดึงข้อมูล Top 50 Trend Video ในประเทศไทย
Caption : ตัวอย่างการดึงข้อมูล Top 50 Trend Video ในประเทศไทย

    นอกจากนี้ยังสามารถดึงข้อมูลคอมเม้นท์ในวิดีโอที่ต้องการได้สูงสุด 100 รายการ (สามารถวนลูปจนกว่าจะได้ครบได้เช่นกัน) ต้องใช้ Video ID ในการหา ซึ่งเราสามารถหาได้จาก URL ของ Youtube แล้วใช้ Regular Expression เข้ามาช่วย

import re
url = 'https://www.youtube.com/watch?v=wpoPBIrIxd8&ab_channel=9arm'
video_id = re.findall(r".*v=([^&]+)", url)[0] ## Output >> wpoPBIrIxd8

response1 = youtube.commentThreads().list(
    part="snippet,replies",
    videoId=video_id,
    maxResults=100
).execute()
df1 = pd.json_normalize(response['items'], sep='_')

    ถ้า Video นั้นมี comment มากกว่า 100 comments ใน response ที่ได้กลับมาจะมี key ชื่อว่า nextPageToken เราก็จะนำค่า response['nextPageToken'] มาเป็น parameter ส่งไปในครั้งถัดไป ก่อนรวมเป็น Dataframe แล้วนำไปใช้งานในรูปแบบของตารางได้