How to parse events from a public Google Calendar with Python - python

I have a public Google Calendar link (which I do not manage), and I would like to extract data from it to my python program. (From there I will myself process the data).
Basically, given a url to a public Google Calendar, I want to parse the events. No need to add or delete events, just read the events and their info. I don't see a reason to log in to my Google account because anyone with the url can view said Calendar from their browser with no sign-in needed.
Couldn't find anything on the web that does specifically this. Thanks!

You need to use authentication. There simply is no way around this. There are several reasons for this, but the main one is that the Google Calendar API has usage limits.
If there is no way to identify the account performing the request, you could create an app that spams the API with so much requests you bring down the Google Calendar API for everyone. Attaching authentication to the requests allows Google to track the usage.
You should use a service account created specifically for this. The best documentation about service accounts and how to use them in python is this one.
Combining this documentation for the Calendar API with the one linked above should get you started.
Note, if you are performing a lot of requests, you might hit the limits mentioned above. You will need to use what is called exponential backoff. The principle is described here. If you want to know about why to use a random value, see this nice blogpost on how to shoot yourself in the foot.

Related

Checking to see if calendar has changed using google calendar API

I'm using the google calendar API (python) to do some calendar parsing, and I'm going to be running a script once an hour to download events for the next two weeks. I'm on a pretty old system which has a lot going on so I want to only pull when there has been data changed. Is there any flag within the api to check if there is a change since last read?
Thanks for your time!
You may want to check the Events: watch method which watches for changes to Events resources. Also, from this post, the Google Calendar API provides push notifications that let you watch for changes to resources. You can use this feature to improve the performance of your application. It allows you to eliminate the extra network and compute costs involved with polling resources to determine if they have changed. Whenever a watched resource changes, the Google Calendar API notifies your application.

OAUTH2 Python Facebook Login

I am new to web programming- I've recently been familiarizing myself with the webapp2 framework. I'm trying to start building a website, and would like users to login to the site with Facebook and I'll need access to their friends list. I've been trying to find a way to do this- I found out about OAUTH2, and I think this may be a way to do this. All the tutorials for python and OAUTH2 that I've found have been using the google API, I'm not sure if it's any different, but I haven't been able to get it to work.
Does anyone have sample code they can post that uses OAUTH2 (or anything else) to get users to sign in through Facebook? Or any good resources that can help me with this?
Your app needs to authorize users with Facebook, since there's where the resources you need are (e.g. friend lists).
This is a classic use of OAuth2 and you don't have a way around it, because FB implements this protocol.
My suggestion is that you look at the Google sample and then adjust it for FB API. The important changes are:
The endpoint URLs (e.g. authorize, token and user profile
The scopes that define the extent of permissions you are requesting (e.g. list of friends)
The user profile (e.g. the information returned by FB on a user: name, e-mail, etc)
This is a very simple sample that does this in Python. It was meant to run in Google App Engine. The only caveat is that it uses our own library to encapsulate the flow. But you can use it to study how the basic protocol works. Run the live demo and turn on dev tools on your browser to see the network activity.
You will notice that OAuth2 is a rather simple protocol, using simple HTTP requests.

OAuth + Google Calendar + Python

I'm stuck..
Basically my goal is I want to be able to pull in end user's calendars, and parse their data daily. I don't need any interaction from them, just enough to authenticate them with OAuth. My current solution is a plain text file that it goes through as a dictionary and pulls in the calendar that way, but that's just asking for trouble. I am just getting my hands on OAuth but don't know how I'd use it in my instance.
Take a look at this example for using OAuth2 to access Google Cloud Storage. You should be able to use it with relatively small tweaks to pull Google Calendar data (primarily changing the scope from https://www.googleapis.com/auth/devstorage.full_control to https://www.googleapis.com/auth/calendar
This example is also helpful, showing how to loop over all a user's Google+ activities and print them to the console. Especially take note of how to use from apiclient.discovery import build to build an API object to interacte with the service.
You can also play with the Google Calendar API using the OAuth 2.0 playground tool or look through the API using the APIs explorer.

Query Events from Multiple Google Calendars in Single Batch

Is there a way to query for events in multiple calendars (in the same Google account) in a single batch request?
I've been through the Google documentation here, but it hasn't really helped.
What I'm trying to do really is scan through a given user's calendars and get a list of events for each one.
An example in python/gdata would be amazing.
EDIT: Looks like this answers my question. TL;DR not possible.
Short answer: No
Long answer: The API does not allow you to fetch more than one calendar with a single request and it doesn't allow you to manipulate more than one calendar in a single request.
If this is really important to you (you're trying to reduce requests so I guess it's about performance), you could possible use the Google App Engine to create a function that would perform this work for you. I'm not sure you would see a big jump in performance though.

Retrieving my own data via FaceBook API

I am building a website for a comedy group which uses Facebook as one of their marketing platforms; one of the requirements for the new site is to display all of their Facebook events on a calendar.
Currently, I am just trying to put together a Python script which can pull some data from my own Facebook account, like a list of all my friends. I presume once I can accomplish this I can move to pulling more complicated data out of my clients account (since they have given me access to their account).
I have looked at many of the posts here, and also went through the Facebook API documentation, including Facebook Connect, but am really beating my head against the wall. Everything I have read seems like overkill, as it involves setting up a good deal of infrastructure to allow my app to set up connections to any arbitrary user's account (who authorizes me). Shouldn't it be much simpler, given I only ever need to access 1 account?
I cannot find a way to retrieve data without having to display the Facebook login window. I have a script which will retrieve all my friends, but it includes a redirect where I have to physically log myself in to Facebook.
Would appreciate any advice or links, I just feel like I must be missing something simple.
Thank you!
Just posting up my notes on the successful advice, should others find this post;
Per Daniel and William's advice, I obtained the right permissions using the Connect options. From William, this link explains how the Facebook connection works
https://developers.facebook.com/docs/authentication/
This section on setting up the actual authentication was most helpful to me.
http://developers.facebook.com/docs/api
Basically, it goes as follows:
Post a link to the following URL. A user will need to physically click on it (even if that user is just you, the site admin).
https://graph.facebook.com/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=http://www.example.com/HANDLER
This will redirect to a Facebook login, which will return to http://www.example.com/HANDLER after the user authenticates. If you wish to do more than basic reads and news feed updates you will need to include this variable in the above link: scope=offline_access,user_photos. The scope variable just includes a comma separated list of values, which Facebook will explicitly tell the authenticating user about during the login process, and they will have to OK. Most helpful for me was the offline_access flag (user_photos lets you get at their photos too), so I can pull content without someone logging in regularly (so long as I store the access token obtained later)
Have a script located at http://www.example.com/HANDLER that will take a variable from the request (so facebook will redirect to http://www.example.com/HANDLER&code=YOUR_CODE after authentication). Your handler needs to pull out the code variable, and then send the following request:
https://graph.facebook.com/oauth/access_token?
client_id=YOUR_CLIENT_ID&
redirect_uri=http://www.example.com/oauth_redirect&
client_secret=YOUR_SECRET_KEY&
code=YOUR_CODE
This request will return a string of the form access_token=YOUR_ACCESS_TOKEN.
Just parse off the 'access_token=', and you will have a token that you can use to access the facebook graph API, in requests like
http://graph.facebook.com/me/friends?access_token=YOUR_ACCESS_TOKEN
This will return a JSON object containing all of your friends
Hope this saves someone else some not fun time straining through documentation. Thanks for the help!
It is true, that Facebook's API is targeted at developers who are creating apps that will be used by many users.
Thankfully, the new Graph API is much simpler to use than its predecessor, and shouldn't be terribly difficult for you to work with without using or creating a lot of underlying infrastructure.
You will need to implement authorization, but this is not difficult, and as long as you prompt the user for the offline_access permission, it'll only need to be done once.
The documentation on Desktop Authentication would probably be most relevant to you at this point, though you might want to move to the javascript-based authentication once you've got a web app up and running.
Once the authentication is done, all you're doing is making GET requests to various urls and working with the resulting JSON.
Here's the documentation about Events, and you can get a list of friends from the friends connection of a User.
I'm not expert on Facebook/Facebook Connect, however I've seen it used/used applications with it and it seems there's really only the 'official' way to do it. I'm afraid it looks like your best bet would probably be something along the lines of this.
http://wiki.developers.facebook.com/index.php/Connect/Authentication_and_Authorization
Regardless of how you actually 'use' it, you'll still need to authorize the application to connect to the account and this means having a Facebook App as well.
The answer to Facebook application authentication is hard to find but is actually found within the "Analytics" page of the Graph API.
Specify the following: https://graph.facebook.com/oauth/access_token?client_cred&client_id=yourappid&client_secret=yourappsecret , you will then be given an access_token that you may use on all other calls.
The Facebook provided APIs do NOT currently provide this level of functionality.

Categories

Resources