Code that can access all major online calendars? - calendar

I'm working on a service that needs to be able to read items from users' calendars. It needs to work whether the user is using Google Calendar, Exchange, Hotmail/Live, iCal, etc...
I want to do this (effectively):
calendar = Login(emailaddress, password); // Works for #hotmail.com, #gmail.com...
// For every item in the users' calendar extract the location of the meeting
for each (item in calendar)
location = item.Location;
I figure someone must have built some code that abstracts away the varied ways you login to these services and access the objects. But I haven't found anything yet. Any pointers would be appreciated. I don't really care what it's written in (Ruby, Python, C#, Java) as long as I can wrap it.
UPDATE: I've been able to get something working against the Google Calendar using the Google Calendar API. In the process I came across CalDAV and the fact that Google, Yahoo, and Apple support it. I'm going to focus on CalDAV for now, and then probably plumb in Hotmail/Live and Exchange later. I really only need the calendar event times and location so this should not be too challenging.
UPDATE 2: I have discovered DDay.iCal. I'd like to use this as my top level abstraction within my app. But I still have not found anything that will help me connect to, and interact with each of the popular mail systems. Nor have I found any code that shows how to layer DDay.ICal over CalDAV (which, theoretically, would give me Google, Yahoo, and Apple). Anyone?

There is a calendar REST API for Hotmail which is available in beta form as part of the developer preview of the Live SDK. This is also a beta interactive SDK for the REST API which you can try out at http://beta.isdk.dev.live.com. Just try out the query "/me/calendars"

Related

How do you get a URL to a shared O365 calendar?

I have been playing around with the Graph API to access the shared calendars and events within an organization.
I can successfully query my organization users and the calendar/events for any of those users. What I would like to do now is to generate a URL allowing you to jump to an outlook web session (eg - https://outlook.office365.com/calendar/) directly to a particular user's calendar (that you have access to).
I can see that Events have a 'WebLink' property that allows you to do this with a calendar event, but I can't find any documentation that indicates how you could jump to a calendar the same way.
I did find some old stuff implying that the old school OWA used to allow this but those url's don't look like they work anymore.
I also tried to pull apart the URL's provided when you 'share' you calendar with an external email address and it sends them a 'click here to add the calendar, or here to see a web view' etc email. That looked kind of promising because it actually DOES provide a direct link to a web version of the calendar; but it it includes a few fields in the URLthat I can't figure out (more than likely the external user auth) so I can't reverse engineer it to build one with the info I have available in the Graph API.
URL was of the form:
https://outlook.office365.com/owa/calendar/<userid>#<domain>/<52CharacterHex_ProbablyAHashedTokenForTheExternalUsersAuth>/<WindowsUserSID_ProbablyToRepresentTheExternalUserOrProxyAccessEntity>/reachcalendar.html
Anyone else got any ideas on how I can launch a web session of another uses calendar (that I have access to)? Ultimately what I am doing is creating a small management dashboard (using a summary built via Graph API data) that shows an overview of a collection of user's calendars but allows you to jump into the any individual user's full calendar if more info is required.
Publish to the web. follow this:
https://support.microsoft.com/en-us/office/share-your-calendar-in-outlook-on-the-web-7ecef8ae-139c-40d9-bae2-a23977ee58d5
basically
OWA -> Settings
Calendar -> Shared Calendars
Publish a Calendar -> copy HTML

How to send user data to developer? Xcode/Swift

I'm creating my first application that requires me to update the app based on user input. I've been searching for the best way to send input to me. For example, I have a button that when the user presses I would like to send me the information they've added to a text field. Being new to this, I thought this could be done by simply sending the information to a specified email, but from what I've researched I will need some sort of database. Looking through the Apple Developer Documentation I don't even know which topic I should be looking at to figure this out, any help or direction would be very helpful!
You need to setup a server (using an API) to receive the information.
Usually you will use a webservice to receive the info from the app, although there are other ways to do that.
Sending an email through iOs would require the user to accept the email that is being sent, so doesn't look like a good idea.
Take a look at some options available to create webservices (django rest framework or flask), Google's Firebase also can be handy in this situation, since is only integrating it with your app and storing the data you want to store, with easy integration for Authentication and user tracking.

Reviewing iCloud Calendars

Question: Is there a way to either confirm that an iCloud calendar is empty or, alternatively, to list the contents of the calendar?
Background: I have a number of calendars (iCloud, Google and others) that I have created over the years. I now want to manage them down to a smaller number and remove duplicate events and actions.
Currently I am looking at my iCloud calendars. A couple of the calendars appear to be empty because I cannot see anything from them on my calendar when I scroll back and forward through the months. However, it's possible that the calendar my contain something that I have forgotten but don't want to lose.
You can access iCloud calendars using the standard
CalDAV protocol. As a recent complication you need to setup an app-specific-password to access your account.
You fail to mention what programming environment you want to do this in, but:
Building a CalDAV client
is a great resource.
Basic stuff like listing calendars can also be done quite easily using tools like curl and xmlstarlet.

Filemaker and Google Calendar. How do I make them communicate?

I am somewhat new to programming, have some experience with VBA, but thats it. I am learning Filemaker at the moment and I am getting along quite nicely. I want to let FM automaticly enter certain appointments and reminders into my google calendar.
Now, I know that the calendar has an API, and I know that that API is the interface with which I can communicate with it. But I am lacking a step in my knowledge ladder, because the documentation is thoroughly confusing. I need to know what to use, in order to tell the calendar what to enter where. Is it like some compound url I construct? How do I login?
These are all questions that pop up. I don't expect you to answer those, but rather if you can point me to the right tutorials I can read to get this knowledge.
I hope I didn't burden you guys too much.
thx in advance
I'm one of the authors of Zulu, a product we built specifically to sync FileMaker to Google Calendar, using a bi-directional sync. You can also turn Zulu into your own CalDAV server if you want to go that route.
Good luck!
Don't take this wrong but you may be biting off too much. I have been programming for 30 years and it took me a couple of days to gather the information needed to interact with the Google APIs (the OAuth2 authentication can be really confusing at first).
My sugestion would be to look at importing calendars into Google Calendars using either CSV (https://support.google.com/calendar/answer/45656) or ICS (https://support.google.com/calendar/answer/45656) format. You should be able to generate those formats with a little bit of Filemaker scripting.
But since you asked:
You need the OAUTH2 offline access, with a refresh token you would
store somewhere.
You will use the refresh token to get an auth token
You will make requests using HTTPS GETS or POSTS (see the Calendar
API explorer), with the auth token in the Authorization header.
Since there is no Google Calendar API for FileMaker :-), you would
have to know some details of the HTTP protocol to send a properly
formatted request, you will be working at a lower level than you
would be if using a Python, Java or .NET library.
You will get back
JSON responses which you will have to parse.
There are a couple of ways you can try to do this quickly:
Use Zapier (http://zpr.io/VhK - affiliate link) to create a webhook, then use a hidden webviewer in FileMaker to create the event. Try this as an example: http://zpr.io/fqg7
Use a plug-in, like this one https://www.feedzon.com/products/fmgcal/. I've never used that particular one before, but it looks fairly straightforward.
If you want to go whole-hog, it is also possible to use scripts in FileMaker to write to the Google Calendar API, but it's a lot more work. The plugin is probably the easiest route to go.
If you don't want to use a plugin, I would recommend starting with a Zapier webhook, as it greatly simplifies the work needed to hook into the Google Calendar API.

Determine whether a user is a developer of a facebook app

I'm looking at ways to secure the admin section of my (cakephp powered) Facebook application. To avoid duplicating functionality, I thought it'd be neat to allow access to people who have been flagged as developers in the app settings.
The question could then be: How do I determine whether a user of my Facebook application is a developer?
Alternatively: How do I obtain an array of developer user IDs for my Facebook app?
I tried looking for your answer myself, and the only thing I found that you could possibly do is to make a group private and invite-only to developers and then use the fb:if-is-group-member tag. http://wiki.developers.facebook.com/index.php/Fb:if-is-group-member
OK, so I found out how to do it by myself. Props to Samuel for giving me the idea.
Basically, the way to do it is to run an FQL query that establishes whether a user is an admin of the applications page (page_admin).
SELECT uid FROM page_admin WHERE uid = 286302657 AND page_id = 31290624157
In the PHP client, this returns an array for developers and an empty string for anyone else.
I decided to use the FQL rather than the API call because it is possible to preload the FQL to reduce calls to the Facebook servers.
Hope this is useful to somebody.

Resources