Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # Initial setup:
- # copy client_secrets.json.ex to client_secrets.json, fill in keys.
- # create playlist on YouTube.com
- # $ virtualenv env
- # $ source env/bin/activate
- # $ pip install oauth2client
- # edit playlist_filter to match the filter you want to apply
- # run with:
- # $ python filter_to_playlist.py PLqobZszmMzUN3dnFzUxMZ-wEQCx7auycs UCQRqhw3y8rpH4Gkl0ZVTRPw
- import httplib2
- import os
- import sys
- import time
- import json
- ## EDIT THIS FUNCTION
- # this function is the configuration you want for the videos to be added
- # to the provided playlist.
- def playlist_filter(video):
- stats = video['statistics']
- if not (int(stats['likeCount']) and int(stats['dislikeCount'])):
- return False
- like_ratio = float(int(stats['likeCount']))/(int(stats['likeCount'])+int(stats['dislikeCount']))
- if int(video['statistics']['viewCount']) > 2222 and like_ratio > .988:
- return True
- return False
- from oauth2client.client import flow_from_clientsecrets
- from oauth2client.file import Storage
- from oauth2client.tools import argparser, run_flow
- CLIENT_SECRETS_FILE = "client_secrets.json"
- YOUTUBE_READONLY_SCOPE = "https://www.googleapis.com/auth/youtube"
- MISSING_CLIENT_SECRETS_MESSAGE = """configure"""
- def get_authenticated_service():
- flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE,
- scope=YOUTUBE_READONLY_SCOPE,
- message=MISSING_CLIENT_SECRETS_MESSAGE)
- flow.params['approval_prompt'] = 'force'
- flow.params['authuser'] = '15'
- flow.params['access_type'] = 'offline'
- storage = Storage("%s-oauth2.json" % sys.argv[0])
- credentials = storage.get()
- if credentials is None or credentials.invalid:
- credentials = run_flow(flow, storage)
- http = credentials.authorize(httplib2.Http())
- return http
- def run(playlist, channel):
- http = get_authenticated_service()
- pageToken = ""
- ids = []
- while pageToken != None:
- url = "https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=50&channelId=%s&type=video" % channel
- if pageToken:
- url = "%s&pageToken=%s" % (url, pageToken)
- status, response = http.request(url)
- data = json.loads(response.decode("utf-8"))
- for i in data['items']:
- ids.append(i['id']['videoId'])
- pageToken = data.get('nextPageToken')
- playlist_items = []
- for i in range(0, len(ids), 50):
- joined_vids = ",".join(ids[i:i+50])
- url = "https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics&maxResults=50&id=%s" % joined_vids
- status, response = http.request(url)
- data = json.loads(response.decode("utf-8"))
- for item in data['items']:
- if playlist_filter(item):
- playlist_items.append(item['id'])
- #print item['statistics']['viewCount']
- print("Adding %s items" % len(playlist_items))
- for ordinal, id in enumerate(playlist_items):
- item = {
- 'snippet': {
- 'playlistId': playlist,
- 'resourceId': {
- 'kind': 'youtube#video',
- 'videoId': id
- },
- }
- }
- pl_item = json.dumps(item)
- meta, response = http.request("https://www.googleapis.com/youtube/v3/playlistItems?part=snippet", method="POST", body=pl_item, headers={"Content-Type": "application/json"})
- # print response
- if __name__ == "__main__":
- argparser.add_argument("playlist", metavar="playlist")
- argparser.add_argument("channel", metavar="channel")
- args = argparser.parse_args()
- run(args.playlist, args.channel)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement