Access an “Anyone with the link” Google Spreadsheet via the API - api

Try the following workflow:
Create a Google Spreadsheet. Set its ACL to “Anyone with the link”
Get its key (https://spreadsheets0.google.com/spreadsheet/ccc?key=HEREISTHEKEY)
Try accessing it with the HTTP API: https://spreadsheets.google.com/feeds/list/HEREISTHEKEY/o6d/public/full (try with private instead of public also)
Get a 404 error
It seems that the Google Spreadsheet API does not allow accessing a private link from the API when you are not authenticated, but maybe I'm wrong somewhere.
It's kind of illogical because you don't need to be logged in when accessing this spreadsheet from a browser.
Any thoughts (I'll fill up a bug report)?
Thanks!

One thought, and I'm not sure if this is applicable to your situation, is that you might try building a dummy Google account and having your interface access the HTTP API using those dummy credentials. It's dirty, but it might work, as once you're logged in you should definitely be authenticated. Right?

To be able to access it via the API, you need to "publish" the spreadsheet. You can do this via the file menu:
File > "Publish to the web..."
You'll then be able it via the API with the URL you gave. I had this issue initially too!

Related

Access to storage.cloud.google.com with a service account

Posted this on github and was told to come here ask for help
Hello!
I am trying to implement custom authentication for my resources on Google Cloud Storage using this module with a service account. I am trying to abstract away the need for a Google account for my end users.
What the ideal workflow would look like:
User queries https://cdn.example.com/[[BUCKET]]/[[FILENAME]] using Bearer token
The API on that end intercepts the bucket and file name and checks the validity of the token
The API then would request the resource at https://storage.cloud.google.com/[[BUCKET]]/[[FILENAME]]
Step 3 Returns the Location header that I will pass over to the user
After snooping around a bit I found out that the Location header returned in step 3 in the form of https://[[DATA]].googleusercontent.com/download/storage/v1/b/[[BUCKET]]/o/[[FILENAME]]?qk=[[KEY]] is a public link that can be accessed by anonymous users too. Which is exactly what I want. However while using the storage API I can only see selfLink and mediaLink, not the link above.
I tried using google-auto-auth to sign the request with my service account towards the storage.cloud.google.com endpoint but I get an Unauthorized error.
From looking here I understand that to access the storage.cloud.google.com is based on cookie authentication, which google-auto-auth doesn't seem to do. All it does is add a Bearer token to the header of the request.
This looks like you need signedUrls
Yea, that would be great, if it didn't expose the email of the service account.
Cheers!
TL;DR How to get the redirect URL from storage.cloud.google.com links using a service account?

Google Action API.ai Account linking debugging URL returning 500

I’ve followed this tutorial https://apiai-aws-heroku-nodejs-bots.blogspot.co.uk/2017/07/steps-for-apiai-and-google-account.html but when I go and grab by debugging URL which happens to be https://assistant.google.com/services/auth/handoffs/auth/start?provider=allergology-5fa9c_dev&scopes=https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/admin.directory.resource.calendar&return_url=https://www.google.com/ and paste it into a new window I get Error 500 but no explanation.
I also tried from an incognito window. It does ask for my email and password but then returns the same error.
I’ve used Implicit Grant Type and I don’t have Add quick account linking enabled please ket me know if that’s not right?
When I try the CURL URL I get the message {“status”:{“code”:401,“errorType”:“unauthorized”,“errorDetails”:“Authentication parameters missing”}}
UPDATE - now when I try the basic Talk to Allergology action on the simulator I don’t even get the debug info anymore, but the message “Sorry this action is not available in simulation” :frowning:
Could you please help?
thanks
Morena
I've managed to work out what I need to do by following this answer How to authenticate user with just a Google account on Actions on Google?
In my case - Configure your project (in the cloud console) so that the Calendar API is enabled and that the OAuth2 client is correctly configured.
I also switched from Implicit Grant Type to Authorisation Code.
My app is almost working, I am now having other issues, but at some point the Access Token was coming through with the request.

Google oauth2 redirect uri mismatch

I setup my credentials for using google oauth2 as a method of signing up. Works fine locally, but when I try and signup on the staging site I get a "redirect_uri_mismatch" error. Even after I copy and paste the url its complaining about into the redirect uris section. I am at my wits end and have almost thrown my laptop across the room several times. Help would be appreciated since google support is non-existent.
Double check on the google console. On the cloud console under APIs & Auth -> Credentials, click the Create New Client ID red button. Make one for a web application. You may have to come back and edit it in order to get the redirect/callback uri set up correctly.
Have you tried dropping the port?
http://example.com/users/auth/google_oauth2/callback
I had the same issue using http://localhost:9000 ...
If nothing works and no redirect_uri was provided when initiating the Google client, try using postmessage in the redirect_uri field.
I code rails, and I have to change the Oauth2 redirect uri in the google console, as well as my own code:
In development:
OAUTH2_REDIRECT: http://local.domain:3000/users/auth/google_oauth2/callback
In production:
OAUTH2_REDIRECT: http://example.com:3000/users/auth/google_oauth2/callback
I've learned The Hard Way to make sure these config vars are right everywhere.

Google OAuth won't accept its own client_id

I have an app that already successfully uses google oauth, but now I am trying to setup a staging deployment. It is a rails app with devise and omniauth, but I think there might be a problem with how I configured Google.
In the google api admin panel (https://code.google.com/apis/console) I can see the existing app. I created another one with a different callback url (because it is staging). Using Postman (a fancy way to edit the url parameters) I can send a get request to google with the current production client_id and redirect_url and it works fine. When I copy and paste in the new clients (staging's) client_id and redirect_url I always get the error Error: invalid_client.
I'm sure where to start with trying to the figure out the problem, but I've tried a lot of different steps, renaming the urls, changing the client secret, or recreating the client in the admin panel. Any ideas? This error is rather cryptic.
We had a temporary issue with a small set of client ids. The issue should be resolved. If you are still having problems please follow up.

Authorized used of goo.gl API to add URLs to user history

With Google opening the goo.gl API a few weeks ago, it's quite easy to use it with POST:
curl -F "url=LONGURL" http://goo.gl/api/shorten
The response is like this:
{"short_url":"http://goo.gl/A9MR","added_to_history":false}
So, does anyone know how to perform an authorized POST to the goo.gl API so that the shortened URL is added to the users history as if you would use the browser?
I tried providing a basic Authorization header using my Google mail address and password, but that doesn't work.
It's not really a public API, yet. What you're using is what the goo.gl site uses itself, but it's not designed for public use like you're trying to do. They do plan on launching one though, and when they do I'm sure they'll add it as an option.
See this post
EDIT: This is now possible with the newly launched API. See the docs here.