Hi David, Well, I really don't know the first thing about Macs, but it looks like you got the download and environment variable right, at least it's not complaining about that. Looks like the current problem is with the parameters you're passing to the build() function. I don't have the apiclient module installed, so I can't look at it for myself, but here is the critical error: build() takes at most 2 positional arguments (3 given) This means that you've given too many parameters to build(). I'm a bit confused because your youtube_search()code is calling build() with: youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY), which is passing 3 arguments, and you're using youtube = build(YOUTUBE_API_SERVICE_NAME, GOOGLE_APPLICATION_CREDENTIALS, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY), which is passing 4 arguments. In either case the error you're getting is complaining that build() only takes 2 arguments, so it's not matching up with either youtube_search's code or your call to build(). It looks like you don't need the GOOGLE_APPLICATION_CREDENTIALS argument, but more serious than that is the build() that youtube_search is calling only takes 2 arguments and the script is calling with 3 arguments. So the script is fundamentally flawed to begin with. If you want to proceed with this script, you need to get a look at the build() function to see what arguments it wants. You can try altering the script to call build with only the arguments it will use, and try that. But I suspect there are deeper problems, most likely that apiclient.discovery version yo have insalled is either newer or older than this youtube_search is expecting, in which case all bets are off on making this combination work. So you have 2 choices that I see, either getting a look at what the build() you have installed uses and try youtube_search with that, or looking for other versions of apiclient and getting a look at their .discovery submodule build() functions. If you find a build() taking 3 arguments, you could try importing that version of apiclient.discovery with this youtube_search. But all in all, if I had this problem I'd back up to what I really want to accomplish and try another approach to the problem. It may not be worth all the futzing around to make this youtube_search work. Deborah David Amadi wrote, on February 05, 2017 2:45 PM:
If I understand your previous email well, I've created the bits I highlighted below and I'm still getting error messages - see below. I'm running the python script on a Macbook Pro. DEVELOPER_KEY = "AIza*****" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" GOOGLE_APPLICATION_CREDENTIALS = "/Users/*path*/Downloads/Youtube API-67ty5.json" def youtube_search(options): youtube = build(YOUTUBE_API_SERVICE_NAME, GOOGLE_APPLICATION_CREDENTIALS, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY) And here's the error message that was printed on my console: build() takes at most 2 positional arguments (3 given) Traceback (most recent call last): File "/Users/*path*/ML with Python/youtube_search.py", line 71, in <module> youtube_search(args) File "/Users/*path*/ML with Python/youtube_search.py", line 19, in youtube_search youtube = build(YOUTUBE_API_SERVICE_NAME, GOOGLE_APPLICATION_CREDENTIALS, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY) File "/Users/*path*/anaconda/lib/python3.5/site-packages/oauth2client/_helper s.py", line 133, in positional_wrapper return wrapped(*args, **kwargs) File "/Users/*path*/anaconda/lib/python3.5/site-packages/googleapiclient/disc overy.py", line 223, in build requested_url, discovery_http, cache_discovery, cache) File "/Users/*path*/anaconda/lib/python3.5/site-packages/googleapiclient/disc overy.py", line 270, in _retrieve_discovery_doc resp, content = http.request(actual_url) AttributeError: 'str' object has no attribute 'request' On 5 February 2017 at 19:58, Deborah Swanson <pyt...@deborahswanson.net> wrote: OK David, I'm also a Linux newbie and my Linux PC has a dead power supply that I've been too sick to fix. Since it is a choice (given my limited energy resources), I've spent my time learning python on a very old Windows PC instead of reviving the Linux PC, and I've never used Google Apps. However, looking at the links provided, this is how I'd proceed: 1) At https://developers.google.com/ <https://developers.google.com/identity/protocols/application-default-cr e> identity/protocols/application-default-cre dentials (Google Application Default Credentials | Google Identity Platform), are the insructions you need to follow. Now, I think you make up your own path and filename for the environment variable, the more iffy question is what file it shoud be. And the answer appears to be that it's a file you download. It then tells you to follow several instructions, using the https://console.developers. <https://console.developers.google.com/projectselector/apis/credentials> google.com/projectselector/apis/credentials page, to get a file that automatically downloads to your computer. 2) It then says you have to make the environment variable GOOGLE_APPLICATION_CREDENTIALS, specifying that it points to the file you just downloaded. I don't have a working Linux machine to test this on, at least it sounds like you're using Linux (let me know if you're using Windows and I can test it there), but to permanently set an environment variable in Linux: Edit ~/.bashrc and add the line: export GOOGLE_APPLICATION_CREDENTIALS=<path/filename> (instructions are different for Windows, or Linux using something other than bash for shell scripts) That's what you need to do, and then your youtube_search.py should work (haha, well you can try it and see). Deborah David Amadi wrote, on February 05, 2017 9:38 AM > > Hi Deborah, > > > Thank you for stepping in, I appreciate it. > > > Here's the python code I'm working with - > http://codegists.com/snippet/ <http://codegists.com/snippet/python/youtube_searchpy_valeraradu_python> python/youtube_searchpy_valeraradu_python > > > To be honest, I don't know how to define the environment > variable GOOGLE_APPLICATION_CREDENTIALS to point to a file > defining the credentials. In the python script (link in the > above line), you could only add the API Key, which I obtained > and provided - but the script won't run. > > > I look forward to hearing back from you. > > > Regards, > David > > > On 5 February 2017 at 03:16, Deborah Swanson > <pyt...@deborahswanson.net> wrote: > > david.am...@digital.beis.gov. <mailto:david.am...@digital.beis.gov.uk> uk wrote, on > Saturday, February 04, 2017 3:39 PM > > > > Hello All, > > > > I'm a newbie to python programming - got into it > > > predominately for the purposes of machine learning and data > mining and > > even though I've committed several weeks to learning the scripting > > language, I have struggled to fully grasp how it works. > > > > I'm looking to scrape title, video Id, view Count, like > Count, dislike > > Count, comment Count, favourite Count etc off YouTube using > a python > > script I found via an online tutorial. > > > > I have installed 'unidecode' and 'google-api-python-client' > packages > > via my terminal. I have also enabled YouTube Data Api V3 and I'm > > getting the error below each time I run the script. > > > > Could anyone please point me in the right direction? > > > > Thanks a lot in advance for your help > > > > **** > > Traceback (most recent call last): > > File "/Users/*Path*/ML with Python/youtube_search.py", > line 73, in > > <module> > > youtube_search(args) > > File "/Users/*Path*/ML with Python/youtube_search.py", > line 21, in > > youtube_search > > youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, > > developerKey=DEVELOPER_KEY) > > File > "/Users/*Path*/anaconda/lib/python3.5/site-packages/oauth2clie > > nt/_helpers.py", line 133, in positional_wrapper > > return wrapped(*args, **kwargs) > > File > > "/Users/*Path*/anaconda/lib/python3.5/site-packages/googleapic > > lient/discovery.py", line 226, in build > > credentials=credentials) > > File > > "/Users/*Path*/anaconda/lib/python3.5/site-packages/oauth2clie > > nt/_helpers.py", line 133, in positional_wrapper > > return wrapped(*args, **kwargs) > > File > > "/Users/*Path*/anaconda/lib/python3.5/site-packages/googleapic > > > lient/discovery.py", line 358, in build_from_document > > credentials = _auth.default_credentials() > > File > "/Users/*Path*/anaconda/lib/python3.5/site-packages/googleapic > > lient/_auth.py", line 41, in default_credentials > > return > > oauth2client.client.GoogleCredentials.get_application_default() > > File > > "/Users/*Path*/anaconda/lib/python3.5/site-packages/oauth2clie > > nt/client.py", line 1264, in get_application_default > > return GoogleCredentials._get_implicit_credentials() > > File > > "/Users/*Path*/anaconda/lib/python3.5/site-packages/oauth2clie > > nt/client.py", line 1254, in _get_implicit_credentials > > raise ApplicationDefaultCredentialsError(ADC_HELP_MSG) > > oauth2client.client.ApplicationDefaultCredentialsError: The > > Application Default Credentials are not available. They are > > available if running in Google Compute Engine. Otherwise, the > > environment variable GOOGLE_APPLICATION_CREDENTIALS must be > > defined pointing to a file defining the credentials. See > > https://developers.google.com/ <https://developers.google.com/accounts/docs/application-defaul> accounts/docs/application-defaul > t-credentials for more information. > > -- > Communications with the Department for Business, Innovation > and Skills may be automatically logged, monitored and/or > recorded for legal purposes. > -- > > I'm also a relatively new python coder (little over a year), > but it seems plain to me that "The Application Default > Credentials ... are available if running in Google Compute > Engine. Otherwise, the environment variable > GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a > file defining the credentials. See > https://developers.google.com/ <https://developers.google.com/accounts/docs/application-defaul> accounts/docs/application-defaul t-credenti als for more information." If you're not running in Google Compute Engine, you need to make a file defining the credentials, and supposedly there are instructions or requirements in the link above. Looks like Anaconda tried to get the credentials by calling its _auth.default_credentials() function: credentials = _auth.default_credentials() from "python3.5/site-packages/googleapiclient/discovery.py", but it failed. I think you need to read that link and make the file it wants to find. Deborah -- David Amadi Digital Performance Analyst | Apprenticeships Service Department for Business, Energy and Industrial Strategy david.am...@digital.beis.gov. <mailto:david.am...@digital.beis.gov.uk> uk M. 07904776300 Communications with the Department for Business, Innovation and Skills may be automatically logged, monitored and/or recorded for legal purposes. Communications with the Department for Business, Innovation and Skills may be automatically logged, monitored and/or recorded for legal purposes. -- David Amadi Digital Performance Analyst | Apprenticeships Service Department for Business, Energy and Industrial Strategy david.am...@digital.beis.gov.uk M. 07904776300 Communications with the Department for Business, Innovation and Skills may be automatically logged, monitored and/or recorded for legal purposes. Communications with the Department for Business, Innovation and Skills may be automatically logged, monitored and/or recorded for legal purposes. -- https://mail.python.org/mailman/listinfo/python-list