Last active
July 28, 2017 13:59
-
-
Save jluczak/234439b27b2ee8ac144b43d14075e1ac to your computer and use it in GitHub Desktop.
Fetching automatically talks for NDC
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
### START BOILERPLATE CODE | |
# Sample Python code for user authorization | |
import httplib2 | |
import os | |
import sys | |
import pprint | |
from apiclient.discovery import build | |
from apiclient.errors import HttpError | |
from oauth2client.client import flow_from_clientsecrets | |
from oauth2client.file import Storage | |
from oauth2client.tools import argparser, run_flow | |
VIDEO_ID=[] | |
# The CLIENT_SECRETS_FILE variable specifies the name of a file that contains | |
# the OAuth 2.0 information for this application, including its client_id and | |
# client_secret. | |
CLIENT_SECRETS_FILE = "client_secrets.json" | |
# This OAuth 2.0 access scope allows for full read/write access to the | |
# authenticated user's account and requires requests to use an SSL connection. | |
YOUTUBE_READ_WRITE_SSL_SCOPE = "https://www.googleapis.com/auth/youtube.force-ssl" | |
API_SERVICE_NAME = "youtube" | |
API_VERSION = "v3" | |
# This variable defines a message to display if the CLIENT_SECRETS_FILE is | |
# missing. | |
MISSING_CLIENT_SECRETS_MESSAGE = "WARNING: Please configure OAuth 2.0" | |
# Authorize the request and store authorization credentials. | |
def get_authenticated_service(args): | |
flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE, scope=YOUTUBE_READ_WRITE_SSL_SCOPE, | |
message=MISSING_CLIENT_SECRETS_MESSAGE) | |
storage = Storage("youtube-api-snippets-oauth2.json") | |
credentials = storage.get() | |
if credentials is None or credentials.invalid: | |
credentials = run_flow(flow, storage, args) | |
# Trusted testers can download this discovery document from the developers page | |
# and it should be in the same directory with the code. | |
return build(API_SERVICE_NAME, API_VERSION, | |
http=credentials.authorize(httplib2.Http())) | |
args = argparser.parse_args() | |
service = get_authenticated_service(args) | |
def print_results(results): | |
file = open('results.py', 'w+') | |
file.write(pprint.pformat(results)) | |
file.close() | |
# Build a resource based on a list of properties given as key-value pairs. | |
# Leave properties with empty values out of the inserted resource. | |
def build_resource(properties): | |
resource = {} | |
for p in properties: | |
# Given a key like "snippet.title", split into "snippet" and "title", where | |
# "snippet" will be an object and "title" will be a property in that object. | |
prop_array = p.split('.') | |
ref = resource | |
for pa in range(0, len(prop_array)): | |
is_array = False | |
key = prop_array[pa] | |
# Convert a name like "snippet.tags[]" to snippet.tags, but handle | |
# the value as an array. | |
if key[-2:] == '[]': | |
key = key[0:len(key)-2:] | |
is_array = True | |
if pa == (len(prop_array) - 1): | |
# Leave properties without values out of inserted resource. | |
if properties[p]: | |
if is_array: | |
ref[key] = properties[p].split(',') | |
else: | |
ref[key] = properties[p] | |
elif key not in ref: | |
# For example, the property is "snippet.title", but the resource does | |
# not yet have a "snippet" object. Create the snippet object here. | |
# Setting "ref = ref[key]" means that in the next time through the | |
# "for pa in range ..." loop, we will be setting a property in the | |
# resource's "snippet" object. | |
ref[key] = {} | |
ref = ref[key] | |
else: | |
# For example, the property is "snippet.description", and the resource | |
# already has a "snippet" object. | |
ref = ref[key] | |
return resource | |
# Remove keyword arguments that are not set | |
def remove_empty_kwargs(**kwargs): | |
good_kwargs = {} | |
if kwargs is not None: | |
for key, value in kwargs.iteritems(): | |
if value: | |
good_kwargs[key] = value | |
return good_kwargs | |
### END BOILERPLATE CODE | |
# Sample python code for videos.list | |
def playlist_items_list_by_playlist_id(service, **kwargs): | |
kwargs = remove_empty_kwargs(**kwargs) # See full sample for function | |
results = service.playlistItems().list( | |
**kwargs | |
).execute() | |
data=[] | |
for item in results['items']: | |
data.append({'title': item['snippet']['title'],'id':item['snippet']['resourceId']['videoId'],'descrption':item['snippet']['description']}) | |
return data | |
def playlists_list_by_channel_id(service, **kwargs): | |
kwargs = remove_empty_kwargs(**kwargs) # See full sample for function | |
results = service.playlists().list( | |
**kwargs | |
).execute() | |
data=[] | |
for item in results['items']: | |
data = data+playlist_items_list_by_playlist_id(service, part='snippet', playlistId=item['id'], maxResults=50) | |
print_results(data) | |
playlists_list_by_channel_id(service, | |
part='snippet', | |
channelId='UCTdw38Cw6jcm0atBPA39a0Q') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment