11#!/usr/bin/python 
22
3- import  httplib2 
3+ # This code sample shows how to add a channel subscription. 
4+ # The default channel-id is for the GoogleDevelopers YouTube channel. 
5+ # Sample usage: 
6+ # python add_subscription.py --channel-id=UC_x5XG1OV2P6uZZ5FSM9Ttw 
7+ 
8+ import  argparse 
49import  os 
5- import  sys 
10+ import  re 
611
7- from   apiclient . discovery   import  build 
8- from   apiclient . errors   import  HttpError 
9- from  oauth2client . client  import  flow_from_clientsecrets 
10- from  oauth2client . file  import  Storage 
11- from  oauth2client . tools  import  argparser ,  run_flow 
12+ import  google . oauth2 . credentials 
13+ import  google_auth_oauthlib . flow 
14+ from  googleapiclient . discovery  import  build 
15+ from  googleapiclient . errors  import  HttpError 
16+ from  google_auth_oauthlib . flow  import  InstalledAppFlow 
1217
1318
1419# The CLIENT_SECRETS_FILE variable specifies the name of a file that contains 
2126#   https://developers.google.com/youtube/v3/guides/authentication 
2227# For more information about the client_secrets.json file format, see: 
2328#   https://developers.google.com/api-client-library/python/guide/aaa_client_secrets 
24- CLIENT_SECRETS_FILE  =  "client_secrets .json" 
29+ CLIENT_SECRETS_FILE  =  'client_secret .json' 
2530
2631# This OAuth 2.0 access scope allows for full read/write access to the 
2732# authenticated user's account. 
28- YOUTUBE_READ_WRITE_SCOPE  =  "https://www.googleapis.com/auth/youtube" 
29- YOUTUBE_API_SERVICE_NAME  =  "youtube" 
30- YOUTUBE_API_VERSION  =  "v3" 
31- 
32- # This variable defines a message to display if the CLIENT_SECRETS_FILE is 
33- # missing. 
34- MISSING_CLIENT_SECRETS_MESSAGE  =  """ 
35- WARNING: Please configure OAuth 2.0 
36- 
37- To make this sample run you will need to populate the client_secrets.json file 
38- found at: 
39- 
40-    %s 
41- 
42- with information from the {{ Cloud Console }} 
43- {{ https://cloud.google.com/console }} 
44- 
45- For more information about the client_secrets.json file format, please visit: 
46- https://developers.google.com/api-client-library/python/guide/aaa_client_secrets 
47- """  %  os .path .abspath (os .path .join (os .path .dirname (__file__ ),
48-                                    CLIENT_SECRETS_FILE ))
49- 
50- def  get_authenticated_service (args ):
51-   flow  =  flow_from_clientsecrets (CLIENT_SECRETS_FILE ,
52-     scope = YOUTUBE_READ_WRITE_SCOPE ,
53-     message = MISSING_CLIENT_SECRETS_MESSAGE )
54- 
55-   storage  =  Storage ("%s-oauth2.json"  %  sys .argv [0 ])
56-   credentials  =  storage .get ()
57- 
58-   if  credentials  is  None  or  credentials .invalid :
59-     credentials  =  run_flow (flow , storage , args )
60- 
61-   return  build (YOUTUBE_API_SERVICE_NAME , YOUTUBE_API_VERSION ,
62-     http = credentials .authorize (httplib2 .Http ()))
33+ SCOPES  =  ['https://www.googleapis.com/auth/youtube' ]
34+ API_SERVICE_NAME  =  'youtube' 
35+ API_VERSION  =  'v3' 
6336
37+ def  get_authenticated_service ():
38+   flow  =  InstalledAppFlow .from_client_secrets_file (CLIENT_SECRETS_FILE , SCOPES )
39+   credentials  =  flow .run_console ()
40+   return  build (API_SERVICE_NAME , API_VERSION , credentials  =  credentials )
6441
6542# This method calls the API's youtube.subscriptions.insert method to add a 
6643# subscription to the specified channel. 
@@ -75,17 +52,18 @@ def add_subscription(youtube, channel_id):
7552      )
7653    )).execute ()
7754
78-   return  add_subscription_response [" snippet" ][ " title"  ]
55+   return  add_subscription_response [' snippet' ][ ' title'  ]
7956
80- if  __name__  ==  "__main__" :
81-   argparser .add_argument ("--channel-id" , help = "ID of the channel to subscribe to." ,
82-     default = "UCtVd0c0tGXuTSbU5d8cSBUg" )
83-   args  =  argparser .parse_args ()
57+ if  __name__  ==  '__main__' :
58+   parser  =  argparse .ArgumentParser (description = 'Process arguments.' )
59+   parser .add_argument ('--channel-id' , help = 'ID of the channel to subscribe to.' ,
60+     default = 'UC_x5XG1OV2P6uZZ5FSM9Ttw' )
61+   args  =  parser .parse_args ()
8462
85-   youtube  =  get_authenticated_service (args )
63+   youtube  =  get_authenticated_service ()
8664  try :
8765    channel_title  =  add_subscription (youtube , args .channel_id )
8866  except  HttpError , e :
89-     print  " An HTTP error %d occurred:\n %s"   %  (e .resp .status , e .content )
67+     print  ' An HTTP error %d occurred:\n %s'   %  (e .resp .status , e .content )
9068  else :
91-     print  " A subscription to '%s' was added."   %  channel_title 
69+     print  ' A subscription to \ ' %s\ '  was added.'   %  channel_title 
0 commit comments