Popularity
6.1
Declining
Activity
5.3
-
8
11
2
Programming language: Crystal
License: MIT License
Tags:
Third-party APIs
Latest version: v1.2.1
office365 alternatives and similar shards
Based on the "Third-party APIs" category.
Alternatively, view office365 alternatives based on common mentions on social networks and blogs.
-
discordcr
Minimalist Discord library for Crystal. (Still WIP, but usable) -
TelegramBot
(deprecated) see https://github.com/protoncr/tourmaline instead -
twitter-crystal
A library to access the Twitter API using Crystal -
crystal_slack
Parse Slack slash commands or send incoming web hooks from Crystal -
crystal-consul
Crystal client for Consul (http://www.consul.io/) -
mollie.cr
Mollie Payments API client for Crystal http://www.mollie.com -
GDAX
📈 GDAX REST and WebSocket API wrapper to trade blockchain cryptocurrencies like bitcoin, Litecoin and Ethereum. -
soundcloud-crystal
A library to access the SoundCloud API using Crystal -
bugsnag.cr
bugsnag exception notifier written in crystal. Supports sidekiq.cr, kemal, HTTP::Server. -
web_finger
A WebFinger (https://tools.ietf.org/html/rfc7033) client for Crystal. -
crystal-connpass
:anchor: A Crystal wrapper for the Connpass API -
fantasy_football_nerd_api
Crystal library for Fantasy Football Nerd API
Less time debugging, more time building
Scout APM allows you to find and fix performance issues with no hassle. Now with error monitoring and external services monitoring, Scout is a developer's best friend when it comes to application development.
Promo
scoutapm.com
Do you think we are missing an alternative of office365 or a related project?
README
office365
Implements the Microsoft Office365 Graph API for the follow
- OAuth Token Generation
- By providing credentials via argument
- User
- list Users
- get User
- Groups
- get a group
- list group members
- list a members groups
- Calendar
- list Calendars
- list Calendar Groups
- create Calendar
- create Calendar Group
- delete Calendar
- delete Calendar Group
- availability
- Events
- list Events
- create Event
- get Event
- update Event
- delete Event
- Attachments
- list Attachments
- create Attachment
- get Attachment
- delete Attachment
- Mail
- send mail
Installation
- Add the dependency to your
shard.yml
:
dependencies:
office365:
github: PlaceOS/office365
- Run
shards install
Usage
require "office365"
Authentication
Office365::Client
client = Office365::Client.new(
tenant: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
client_id: "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
client_secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
)
Users
# id can be either user id, or email
user = client.get_user(id: "[email protected])
# get all users
users = client.list_users
# get top 25 users
users = client.list_users(limit: 25)
# get top 100 users whose email or display name starts with "foo"
users = client.list_users(q: "foo", limit: 100)
Calendars
# fetch all [email protected]'s calendars
calendars = client.list_calendars(mailbox: "[email protected]")
# fetch all [email protected]'s calendar from default calendar group
calendars = client.list_calendars(mailbox: "[email protected]", calendar_group_id: "default")
# fetch all [email protected]'s calendars from a specific calendar group id
calendars = client.list_calendars(mailbox: "[email protected]", calendar_group_id: "xxxx-xxxx...")
# fetch [email protected]'s calendars whose name exactly matches "garys calendar"
calendars = client.list_calendars(mailbox: "[email protected]", match: "garys calendar")
# fetch [email protected]'s calendars whose name starts with "gary"
calendars = client.list_calendars(mailbox: "[email protected]", search: "gary")
# fetch all [email protected] calendar groups, limit is optional
groups = client.list_calendar_groups(mailbox: "[email protected]", limit: 25)
# create a new calendar, returns an Office365::Calendar objectj
calendar = client.create(
mailbox: "[email protected]", # required
name: "My New Calendar", # required
calendar_group_id: "..." # optional
)
# create a calendar group
group = client.create_calendar_group(mailbox: "[email protected]", name: "A Whole New Calendar Group!")
# deleting a calendar
client.delete_calendar(
mailbox: "[email protected]", # required
id: "...", # required
calendar_group_id: "..." # optional
)
# deleting a calendar group
client.delete_calendar_group(
mailbox: "[email protected]", # required
id: "...", # required
)
# fetching availability for a list of calendars
client.get_availability(
mailbox: "[email protected]", # required
mailboxes: ["[email protected]", "[email protected]"], # required
starts_at: Time.local(location: Time::Location.build("Australia/Sydney")), # required query time starting from
ends_at: Time.local(location: Time::Location.build("Australia/Sydney")) + 30.minutes, # required query time ending at
)
Events
# list events, returns Office365::EventQuery
list = client.list_events(
mailbox: "[email protected]", # required
calendar_id: "...", # optional
calendar_group_id: "..." # optional
)
# create an event
event = client.create_event(
mailbox: "[email protected]",
starts_at: Time.local(location: Time::Location.build("Australia/Sydney")),
ends_at: Time.local(location: Time::Location.build("Australia/Sydney")) + 30.minutes,
calendar_id: "...",
calendar_group_id: "...",
subject: "My Meeting",
description: "A description of my meeting",
# attendee's can be either a string, EmailAddress, or Attendee
attendees[
"[email protected]",
EmailAddress.new("David Bowie", "[email protected]"),
Attendee.new(
email: "[email protected]",
type: Office365::AttendeeType::Optional
)
],
# adds an attendee of type AttendeeType::Resource
location: "The Red Room",
# adds recurrence
recurrence: RecurrenceParam.new(pattern: "daily", range_end: Time.local(location: Time::Location.build("Australia/Sydney")).at_beginning_of_day + 5.days),
# specify sensitivity
sensitivity: Office365::Sensitivity::Normal,
# adds attendees of type AttendeeType::Resource, string or email address will work
rooms:[
"[email protected]",
EmailAddress.new("David Bowie", "[email protected]"),
]
)
# get an event
event = client.get_event(mailbox: "[email protected]", id: "...")
# update an event
event.description = "Updated: Something new" # update description
event.set_recurrence(RecurrenceParam.new(pattern: "daily", range_end: Time.local(location: Time::Location.build("Australia/Sydney")).at_beginning_of_day + 7.days)) # update recurrence
updated_event = client.update_event(event: event, mailbox: "[email protected]")
# delete event
client.delete_event(mailbox: "[email protected]", id: "...")
Attachments
# list attachments, returns Office365::AttachmentQuery
list = client.list_attachments(
mailbox: "[email protected]", # required
event_id: "1234", # required
calendar_id: "...", # optional
calendar_group_id: "..." # optional
)
# create an attachment for an event
attachment = client.create_attachment(
mailbox: "[email protected]",
event_id: "1234",
name: "test.txt",
content_bytes: "hello worlds" # file contents as string
)
# get an attachment
attachment = client.get_attachment(mailbox: "[email protected]", event_id: "1234", id: "...")
# delete attachment
client.delete_attachment(mailbox: "[email protected]", event_id: "1234", id: "...")
Development
To run specs crystal spec
Contributing
- Fork it (https://github.com/PlaceOS/google/fork)
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request