This repository has been archived by the owner on Apr 24, 2019. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
20 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -1,28 +1,45 @@ | |||
class VideoService… | class VideoService | ||
This comment has been minimized.
Sorry, something went wrong. |
|||
def video_list | def video_list | ||
# Read a json file and store the contents in an instance variable | |||
@video_list = JSON.parse(File.read('videos.json')) | @video_list = JSON.parse(File.read('videos.json')) | ||
# Get all the ids of the stored in the contents and JSON file that was just | |||
ids = @video_list.map{|v| v['youtubeID']} | ids = @video_list.map{|v| v['youtubeID']} | ||
# Get authorized with Google to be allowed to make API calls | |||
client = GoogleAuthorizer.new( | client = GoogleAuthorizer.new( | ||
token_key: 'api-youtube', | token_key: 'api-youtube', | ||
application_name: 'Gateway Youtube Example', | application_name: 'Gateway Youtube Example', | ||
application_version: '0.1' | application_version: '0.1' | ||
).api_client | ).api_client | ||
# Not sure what this does, but I think its a way to tell youtube what I'm asking for | |||
youtube = client.discovered_api('youtube', 'v3') | youtube = client.discovered_api('youtube', 'v3') | ||
# Send the request to Youtube passing in the ids of the videos from out Json file and telling which | |||
# data we want from youtube. We want a video snippet, contentDetails(probably a description) | |||
# and statistics about the video | |||
request = { | request = { | ||
api_method: youtube.videos.list, | api_method: youtube.videos.list, # This looks like there are many api_methods and the one | ||
# we are asking for is the one that returns a list of videos. | |||
parameters: { | parameters: { | ||
id: ids.join(","), | id: ids.join(","), | ||
part: 'snippet, contentDetails, statistics', | part: 'snippet, contentDetails, statistics', | ||
} | } | ||
} | } | ||
# Get the body of the response and parse it with JSON.parse to make into a Ruby hash | |||
response = JSON.parse(client.execute!(request).body) | response = JSON.parse(client.execute!(request).body) | ||
ids.each do |id| | # Go through the array of ids | ||
ids.each do |id| | |||
# Find the video object that matches the this specific id | |||
video = @video_list.find{|v| id == v['youtubeID']} | video = @video_list.find{|v| id == v['youtubeID']} | ||
# Go through the items from the response and find one that matches the id | |||
youtube_record = response['items'].find{|v| id == v['id']} | youtube_record = response['items'].find{|v| id == v['id']} | ||
# Update the views key in the video object(the one we got from our JSON file) | |||
# with the viewCount from the response we got from youtube. | |||
video['views'] = youtube_record['statistics']['viewCount'].to_i | video['views'] = youtube_record['statistics']['viewCount'].to_i | ||
# Find out how many days the video has been live from the response from youtube | |||
days_available = Date.today - Date.parse(youtube_record['snippet']['publishedAt']) | days_available = Date.today - Date.parse(youtube_record['snippet']['publishedAt']) | ||
# Update the monthly views of the video | |||
video['monthlyViews'] = video['views'] * 365.0 / days_available / 12 | video['monthlyViews'] = video['views'] * 365.0 / days_available / 12 | ||
end | end | ||
# return the updated video list in a JSON dump | |||
return JSON.dump(@video_list) | return JSON.dump(@video_list) | ||
end | end | ||
end | end |
I also like annotating.
I'm going to read your comments aloud so that our listeners will have an idea of what's going on in this code.