garf for YouTube Data API
Interacts with YouTube Data API.
Install
Install garf-youtube-data-api
library
pip install garf-executors garf-youtube-data-api
uv pip install garf-executors garf-youtube-data-api
Usage
Prerequisites
- YouTube Data API enabled.
- API key to access to access YouTube Data API exposed as
export GARF_YOUTUBE_DATA_API_KEY=<YOUR_API_KEY>
echo "SELECT id, snippet.title AS channel_name FROM channels" > query.sql
garf query.sql --source youtube-data-api \
--output csv \
--source.id=YOUTUBE_CHANNEL_ID
import os
from garf_io import writer
from garf_youtube_data_api import YouTubeDataApiReportFetcher
query = 'SELECT id, snippet.title AS channel_name FROM channels'
fetched_report = (
YouTubeDataApiReportFetcher(api_key=os.getenv('GARF_YOUTUBE_DATA_API_KEY'))
.fetch(query, id=[YOUTUBE_CHANNEL_ID])
)
csv_writer = writer.create_writer('csv')
csv_writer.write(fetched_report, 'query')
Available source parameters
name | values | comments |
---|---|---|
id |
id(s) of YouTube channels or videos | Multiple ids are supported, should be comma-separated |
forHandle |
YouTube channel handle | i.e. @myChannel |
forUsername |
YouTube channel name | i.e. myChannel |
regionCode |
ISO 3166-1 alpha-2 country code | i.e. US |
chart |
mostPopular |
Gets most popular in regionCode , can be narrowed down with videoCategoriId |
videoId |
id(s) of YouTube Video to get comments from | Multiple ids are supported, should be comma-separated |
Examples
Videos
Gets meta information and statistics for YouTube videos.
echo "
SELECT
id,
snippet.publishedAt AS published_at,
snippet.title AS title,
snippet.description AS description,
snippet.channelTitle AS channel,
snippet.tags AS tags,
snippet.defaultLanguage AS language,
snippet.defaultAudioLanguage AS audio_language,
status.madeForKids AS made_for_kids,
topicDetails.topicCategories AS topics,
contentDetails.duration AS duration,
contentDetails.caption AS has_caption,
statistics.viewCount AS views,
statistics.likeCount AS likes,
statistics.commentCount AS comments,
statistics.favoriteCount AS favourites
FROM videos
" > video_info.sql
garf video_info.sql --source youtube-data-api \
--output csv \
--source.id=YOUTUBE_VIDEO_ID_1,YOUTUBE_VIDEO_ID_2
import os
from garf_io import writer
from garf_youtube_data_api import YouTubeDataApiReportFetcher
query = """
SELECT
id,
snippet.publishedAt AS published_at,
snippet.title AS title,
snippet.description AS description,
snippet.channelTitle AS channel,
snippet.tags AS tags,
snippet.defaultLanguage AS language,
snippet.defaultAudioLanguage AS audio_language,
status.madeForKids AS made_for_kids,
topicDetails.topicCategories AS topics,
contentDetails.duration AS duration,
contentDetails.caption AS has_caption,
statistics.viewCount AS views,
statistics.likeCount AS likes,
statistics.commentCount AS comments,
statistics.favoriteCount AS favourites
FROM videos
"""
fetched_report = (
YouTubeDataApiReportFetcher(api_key=os.getenv('GARF_YOUTUBE_DATA_API_KEY'))
.fetch(query, id=[YOUTUBE_VIDEO_ID_1, YOUTUBE_VIDEO_ID_2])
)
csv_writer = writer.create_writer('csv')
csv_writer.write(fetched_report, 'video_info')
Gets YouTube video(s) height and width.
echo "
SELECT
id,
player.embedWidth AS width,
player.embedHeight AS height
FROM videos
" > video_orientation.sql
garf video_orientation.sql --source youtube-data-api \
--output csv \
--source.id=YOUTUBE_VIDEO_ID_1,YOUTUBE_VIDEO_ID_2 \
--source.maxWidth=500
import os
from garf_io import writer
from garf_youtube_data_api import YouTubeDataApiReportFetcher
query = """
SELECT
id,
player.embedWidth AS width,
player.embedHeight AS height
FROM videos
"""
fetched_report = (
YouTubeDataApiReportFetcher(api_key=os.getenv('GARF_YOUTUBE_DATA_API_KEY'))
.fetch(
query,
id=[YOUTUBE_VIDEO_ID_1, YOUTUBE_VIDEO_ID_2],
maxWidth=500
)
)
csv_writer = writer.create_writer('csv')
csv_writer.write(fetched_report, 'video_orientation')
Channels
Gets meta information and statistics for YouTube channel(s).
echo "
SELECT
id,
snippet.title AS title,
snippet.description AS description,
snippet.publishedAt AS published_at,
snippet.country AS country,
snippet.defaultLanguage AS language,
status.madeForKids AS made_for_kids,
topicDetails.topicCategories AS topics,
statistics.videoCount AS videos,
statistics.viewCount AS views,
statistics.subscriberCount AS subscribers
FROM channels
" > channel_info.sql
garf channel_info.sql --source youtube-data-api \
--output csv \
--source.id=YOUTUBE_CHANNEL_ID
import os
from garf_io import writer
from garf_youtube_data_api import YouTubeDataApiReportFetcher
query = """
SELECT
id,
snippet.title AS title,
snippet.description AS description,
snippet.publishedAt AS published_at,
snippet.country AS country,
snippet.defaultLanguage AS language,
status.madeForKids AS made_for_kids,
topicDetails.topicCategories AS topics,
statistics.videoCount AS videos,
statistics.viewCount AS views,
statistics.subscriberCount AS subscribers
FROM channels
"""
fetched_report = (
YouTubeDataApiReportFetcher(api_key=os.getenv('GARF_YOUTUBE_DATA_API_KEY'))
.fetch(query, id=[YOUTUBE_CHANNEL_ID])
)
csv_writer = writer.create_writer('csv')
csv_writer.write(fetched_report, 'channel_info')
Gets all public videos from YouTube channel(s)
echo "
SELECT
channel_id,
video_id
FROM builtin.channelVideos
" > channel_videos.sql
garf channel_videos.sql --source youtube-data-api \
--output csv \
--source.id=YOUTUBE_CHANNEL_ID
import os
from garf_io import writer
from garf_youtube_data_api import YouTubeDataApiReportFetcher
query = """
SELECT
channel_id,
video_id
FROM builtin.channelVideos
"""
fetched_report = (
YouTubeDataApiReportFetcher(api_key=os.getenv('GARF_YOUTUBE_DATA_API_KEY'))
.fetch(query, id=[YOUTUBE_CHANNEL_ID])
)
csv_writer = writer.create_writer('csv')
csv_writer.write(fetched_report, 'channel_videos')
Commentaries
Gets tops level commentaries for YouTube video(s).
echo "
SELECT
id AS commentary_id,
snippet.videoId AS video_id,
snippet.topLevelComment.snippet.textDisplay AS comment
FROM commentThreads
" > video_commentaries.sql
garf video_commentaries.sql --source youtube-data-api \
--output csv \
--source.id=YOUTUBE_VIDEO_ID_1,YOUTUBE_VIDEO_ID_2
import os
from garf_io import writer
from garf_youtube_data_api import YouTubeDataApiReportFetcher
query = """
SELECT
id AS commentary_id,
snippet.videoId AS video_id,
snippet.topLevelComment.snippet.textDisplay AS comment
FROM commentThreads
"""
fetched_report = (
YouTubeDataApiReportFetcher(api_key=os.getenv('GARF_YOUTUBE_DATA_API_KEY'))
.fetch(query, id=[YOUTUBE_VIDEO_ID_1, YOUTUBE_VIDEO_ID_2])
)
csv_writer = writer.create_writer('csv')
csv_writer.write(fetched_report, 'video_commentaries')