พี่ทอย ผมมีข้อมูลอยู่บน YouTube มากมายเลย ผมจะนำมาใช้ได้ยังไงครับ ?
เดี๋ยวพี่จะเล่าให้ฟังๆ
หากเรามีข้อมูลบน YouTube Channel แล้วต้องการจะนำมาวิเคราะห์เพื่อปรับปรุงช่องให้มีคุณภาพ และผู้ติดตามมากยิ่งขึ้น การทำงานครั้งแรกคงจะอยู่ในภาพของการดูบน YouTube Analytics หรือการ Export มาเป็น Excel อย่างใดอย่างนึง แต่ถ้าหากเราต้องทำอย่างนี้เรื่อยๆ ทุกเดือน ทุกสัปดาห์ มันคงจะเหนื่อยไม่ใช่น้อย วันนี้เราจึงมาเสนอทางเลือกในการใช้งาน YouTube API แบบง่ายๆ โดยเราจะใช้ Python ไปตัวหลักในการทำงาน ก่อนอื่นจะต้องทำการติดตั้ง Library ของ google เข้าไปใน Environment ของเครื่องเราก่อนครับ
pip install google-api-python-client
Done
ไปที่ Google Cloud Console Library แล้ว login ด้วย Account Google แล้วเลือก Project สักอัน
Search 'YouTube' แล้วเลือก YouTube Data API V3
หากมีการกด Enable อยู่แล้ว สามารถกด Manage ได้เลย
เมื่อพูดถึงการดึงข้อมูลต่างผ่าน API แล้ว มีวิธีหลายแบบที่เราสามารถใช้ในการยืนยันตัวตนได้ทั้งแบบ Request header การใช้ Token หรือแม้กระทั่งการใช้ Credential เพื่อยืนยันผู้เรียกใช้ข้อมูล และแน่นอนว่า Youtube API จะใช้ Credential เป็นตัวหลังในการดึงข้อมูลครับ ซึ่งเราสามารถสร้าง Credential ได้ตามขั้นตอนด้านล่างนี้เลย
หลังจากนี้จะเป็นเนื้อหาในส่วนของการเขียนโค้ด Python แล้ว หากใครพร้อมไปลุยกันได้เลยครับ สามารถศึกษาที่นี่ https://developers.google.com/youtube/v3/quickstart/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()
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()
นอกจากนี้ยังสามารถดึงข้อมูลคอมเม้นท์ในวิดีโอที่ต้องการได้สูงสุด 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 แล้วนำไปใช้งานในรูปแบบของตารางได้