Advertisement
Guest User

Untitled

a guest
Oct 3rd, 2018
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. # Initial setup:
  4.  
  5. # copy client_secrets.json.ex to client_secrets.json, fill in keys.
  6. # create playlist on YouTube.com
  7. # $ virtualenv env
  8. # $ source env/bin/activate
  9. # $ pip install oauth2client
  10. # edit playlist_filter to match the filter you want to apply
  11. # run with:
  12. # $ python filter_to_playlist.py PLqobZszmMzUN3dnFzUxMZ-wEQCx7auycs UCQRqhw3y8rpH4Gkl0ZVTRPw
  13.  
  14. import httplib2
  15. import os
  16. import sys
  17. import time
  18. import json
  19.  
  20. ## EDIT THIS FUNCTION
  21. # this function is the configuration you want for the videos to be added
  22. # to the provided playlist.
  23.  
  24. def playlist_filter(video):
  25. stats = video['statistics']
  26. if not (int(stats['likeCount']) and int(stats['dislikeCount'])):
  27. return False
  28. like_ratio = float(int(stats['likeCount']))/(int(stats['likeCount'])+int(stats['dislikeCount']))
  29. if int(video['statistics']['viewCount']) > 2222 and like_ratio > .988:
  30. return True
  31. return False
  32.  
  33. from oauth2client.client import flow_from_clientsecrets
  34. from oauth2client.file import Storage
  35. from oauth2client.tools import argparser, run_flow
  36.  
  37. CLIENT_SECRETS_FILE = "client_secrets.json"
  38.  
  39. YOUTUBE_READONLY_SCOPE = "https://www.googleapis.com/auth/youtube"
  40.  
  41. MISSING_CLIENT_SECRETS_MESSAGE = """configure"""
  42.  
  43. def get_authenticated_service():
  44. flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE,
  45. scope=YOUTUBE_READONLY_SCOPE,
  46. message=MISSING_CLIENT_SECRETS_MESSAGE)
  47. flow.params['approval_prompt'] = 'force'
  48. flow.params['authuser'] = '15'
  49. flow.params['access_type'] = 'offline'
  50.  
  51. storage = Storage("%s-oauth2.json" % sys.argv[0])
  52. credentials = storage.get()
  53.  
  54. if credentials is None or credentials.invalid:
  55. credentials = run_flow(flow, storage)
  56. http = credentials.authorize(httplib2.Http())
  57. return http
  58.  
  59. def run(playlist, channel):
  60. http = get_authenticated_service()
  61. pageToken = ""
  62. ids = []
  63. while pageToken != None:
  64. url = "https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=50&channelId=%s&type=video" % channel
  65. if pageToken:
  66. url = "%s&pageToken=%s" % (url, pageToken)
  67. status, response = http.request(url)
  68. data = json.loads(response.decode("utf-8"))
  69. for i in data['items']:
  70. ids.append(i['id']['videoId'])
  71. pageToken = data.get('nextPageToken')
  72. playlist_items = []
  73. for i in range(0, len(ids), 50):
  74. joined_vids = ",".join(ids[i:i+50])
  75. url = "https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics&maxResults=50&id=%s" % joined_vids
  76. status, response = http.request(url)
  77. data = json.loads(response.decode("utf-8"))
  78. for item in data['items']:
  79. if playlist_filter(item):
  80. playlist_items.append(item['id'])
  81. #print item['statistics']['viewCount']
  82. print("Adding %s items" % len(playlist_items))
  83. for ordinal, id in enumerate(playlist_items):
  84. item = {
  85. 'snippet': {
  86. 'playlistId': playlist,
  87. 'resourceId': {
  88. 'kind': 'youtube#video',
  89. 'videoId': id
  90. },
  91. }
  92. }
  93. pl_item = json.dumps(item)
  94. meta, response = http.request("https://www.googleapis.com/youtube/v3/playlistItems?part=snippet", method="POST", body=pl_item, headers={"Content-Type": "application/json"})
  95. # print response
  96.  
  97. if __name__ == "__main__":
  98. argparser.add_argument("playlist", metavar="playlist")
  99. argparser.add_argument("channel", metavar="channel")
  100.  
  101. args = argparser.parse_args()
  102. run(args.playlist, args.channel)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement