-
Notifications
You must be signed in to change notification settings - Fork 4
/
YoutubeAPI-Interaction.py
128 lines (110 loc) · 4.63 KB
/
YoutubeAPI-Interaction.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import requests
import json
import os
import sys
sys.path.insert(0, os.path.join("Resources"))
#API Congfiguration Key
from config import api_key
#Get Regions for their respective Trending Video List
regionCode_list = ["at", "ch", "cn", "dk", "is", "be", "fr", "is",
"mx", "us", "kr", "nl", "nz", "jp", "ru", "vn"]
# Get Trending Video Ids for each Region Code
urlRequest_regionCodeList_forVideoIDs = [
"https://www.googleapis.com/youtube/v3/videos?part=statistics&" +
f"chart=mostPopular®ionCode={regCode.upper()}&maxResults=25&key="
+ api_key for regCode in regionCode_list]
#API Call.
def getAPIResponse(url_string):
try:
resp = requests.get(url_string)
return([resp, resp.json()])
except:
print("Request Error. Check URL link or ensure have correct API key")
#From Response object, get each video's ID.
def getVideoIds(response_object):
response = response_object[1]
listOf_trendingVideo_ids = [i["id"] for i in response["items"]]
return(listOf_trendingVideo_ids)
#Obtain Each Video's Statistics and Information.
def acquireVideoInformation(videoID_list, apiKey, printout=None):
video_stats_dict = {"VideoID": [], "Title": [], "PublishedAt": [],
"ChannelID": [], "Description": [], "ChannelTitle": [],
"CategoryId": [], "ViewCount": [], "LikeCount": [],
"DislikeCount": [], "FavoriteCount": [], "CommentCount": []}
for video_id in videoID_list:
#Youtube API call for statistics
response_videoInfo = requests.get(
f"https://www.googleapis.com/youtube/v3/videos?id={video_id}&" +
f"key={apiKey}&part=snippet,statistics").json()
rest2_in = response_videoInfo["items"][0]
video_stats_dict["VideoID"].append(video_id)
video_stats_dict["Title"].append(rest2_in["snippet"]["title"])
video_stats_dict["PublishedAt"].append(
rest2_in["snippet"]["publishedAt"])
video_stats_dict["ChannelID"].append(rest2_in["snippet"]["channelId"])
video_stats_dict["Description"].append(
rest2_in["snippet"]["description"])
video_stats_dict["ChannelTitle"].append(
rest2_in["snippet"]["channelTitle"])
video_stats_dict["CategoryId"].append(
rest2_in["snippet"]["categoryId"])
try:
video_stats_dict["ViewCount"].append(
rest2_in["statistics"]["viewCount"])
except:
video_stats_dict["ViewCount"].append(0)
try:
video_stats_dict["LikeCount"].append(
rest2_in["statistics"]["likeCount"])
except:
video_stats_dict["LikeCount"].append(0)
try:
video_stats_dict["DislikeCount"].append(
rest2_in["statistics"]["dislikeCount"])
except:
video_stats_dict["DislikeCount"].append(0)
video_stats_dict["FavoriteCount"].append(
rest2_in["statistics"]["favoriteCount"])
try:
video_stats_dict["CommentCount"].append(
rest2_in["statistics"]["commentCount"])
except:
video_stats_dict["CommentCount"].append(0)
if printout is True:
print(video_stats_dict)
else:
pass
return(video_stats_dict)
trendingVideos_information = {}
for i, response_video in enumerate(urlRequest_regionCodeList_forVideoIDs):
# trendingVideo list
capString = regionCode_list[i].upper()
trendingVideos_information[capString] = [getAPIResponse(response_video)]
# description of trending videos
getVids = getVideoIds(trendingVideos_information[capString][0])
trendingVideos_information[capString].append(getVids)
trendingVideos_information[capString].append(acquireVideoInformation(
trendingVideos_information[capString][1], api_key, printout=True))
# -----------------------------------------------------
'''
Output Dataframe to json
'''
from datetime import datetime
from pandas import DataFrame
now = datetime.now()
year = str(now.year)
month = str(now.month)
day = str(now.day)
def outputToDataFrame(information):
'''
Requirement: Input DataFrame object from pandas library
'''
return(DataFrame(information))
#For each key and piece of information
for key, info in trendingVideos_information.items():
vidStats_df = outputToDataFrame(info[2])
vidStats_df["RegionCode"] = [key.upper()
for i in range(vidStats_df.shape[0])]
vidStats_df["Date"] = [
f"{month}/{day}/{year}" for i in range(vidStats_df.shape[0])]
vidStats_df.to_csv(f"Data/YoutubeVideoStats-{key}-{month}{day}{year}.csv")