Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. # begin createplaylist.py
  2.  
  3. #!/usr/bin/python
  4.  
  5. import httplib2
  6. import os
  7. import sys
  8.  
  9. from apiclient.discovery import build
  10. from oauth2client.file import Storage
  11. from oauth2client.client import flow_from_clientsecrets
  12. from oauth2client.tools import run
  13. import time
  14.  
  15. filename = sys.argv[1]
  16. vids = [x.strip() for x in open(filename).readlines()]
  17. title = sys.argv[2]
  18.  
  19.  
  20. CLIENT_SECRETS_FILE = "client_secrets.json"
  21. MISSING_CLIENT_SECRETS_MESSAGE = "your configuration a shit"
  22.  
  23. # An OAuth 2 access scope that allows for full read/write access.
  24. YOUTUBE_READ_WRITE_SCOPE = "https://www.googleapis.com/auth/youtube"
  25. YOUTUBE_API_SERVICE_NAME = "youtube"
  26. YOUTUBE_API_VERSION = "v3"
  27.  
  28. flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE,
  29. message=MISSING_CLIENT_SECRETS_MESSAGE,
  30. scope=YOUTUBE_READ_WRITE_SCOPE)
  31.  
  32. storage = Storage("%s-oauth2.json" % sys.argv[0])
  33. credentials = storage.get()
  34.  
  35. if credentials is None or credentials.invalid:
  36. credentials = run(flow, storage)
  37.  
  38. youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
  39. http=credentials.authorize(httplib2.Http()))
  40.  
  41. playlist = youtube.playlists().insert(
  42. part="snippet,status",
  43. body=dict(
  44. snippet=dict(
  45. title=title,
  46. description=""
  47. ),
  48. status=dict(
  49. privacyStatus="private"
  50. )
  51. )
  52. ).execute()
  53.  
  54. print 'created playlist', playlist['id']
  55.  
  56. for v in vids:
  57. try:
  58. videoinsert = youtube.playlistItems().insert(
  59. part='snippet,id',
  60. body={
  61. 'snippet': {
  62. 'playlistId': playlist['id'],
  63. 'resourceId': {
  64. 'videoId': v,
  65. 'kind': 'youtube#video'
  66. }
  67. }
  68. }).execute()
  69. print 'added', v
  70. except Exception:
  71. print 'failed to add', v
  72.  
  73. print "New playlist id: %s" % playlist["id"]
  74.  
  75. # end createplaylist.py
  76. # begin eqdpage.py
  77.  
  78. #!/usr/bin/python
  79.  
  80. from urllib2 import urlopen
  81. from urlparse import urlparse, parse_qs
  82. from bs4 import BeautifulSoup
  83. import sys
  84. import re
  85. from pyutils.xutils import *
  86.  
  87. print 'getting eqd page'
  88.  
  89. page = sys.argv[1]
  90. page = urlopen(page).read()
  91. page = BeautifulSoup(page)
  92.  
  93. validdomains = ('www.youtube.com', 'youtube.com', 'www.youtu.be', 'youtu.be')
  94. links = filter(lambda x: x, map(lambda x: x.get('href'), page.findAll('a')))
  95. urls = map(lambda x: urlparse(x), links)
  96. yturls = filter(lambda x: x.netloc in validdomains, urls)
  97. queries = filter(lambda x: x, map(lambda x: x.query, yturls))
  98. queries = map(lambda x: parse_qs(x), queries)
  99. linkedvideoids = filter(lambda x: x, map(lambda x: x.get('v'), queries))
  100. linkedvideoids = map(lambda x: x[0], linkedvideoids)
  101.  
  102. frames = filter(lambda x: x, map(lambda x: x.get('src'), page.findAll('iframe')))
  103. urls = map(lambda x: urlparse(x), frames)
  104. ytframes = filter(lambda x: x.netloc in validdomains, urls)
  105. paths = filter(lambda x: x, map(lambda x: x.path, ytframes))
  106. embeddedvideoids = map(lambda x: x.split('/')[2], paths)
  107.  
  108. videoids = linkedvideoids + embeddedvideoids
  109.  
  110. seen = set()
  111. playlist = []
  112.  
  113. for v in videoids:
  114. if v in seen:
  115. continue
  116. playlist.append(v)
  117. seen.add(v)
  118.  
  119. print 'got playlist: %d videos' % len(playlist)
  120.  
  121. title = page.title.text
  122.  
  123. print 'creating playlist:', title
  124.  
  125. p = x(['createplaylist.py', '<playlist', title])
  126. out = getwritepipe('playlist')
  127. out.write('\n'.join(playlist))
  128. out.close()
  129. p.wait()
  130.  
  131. # end eqdpage.py
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement