Blog

Just dropping some knowledge on y’all.

Events

Rapture
There are a number of sites that offer event planning services. Embedly got a request to add start and end times to the responses from these sites. As of today Embedly Pro (Preview and Objectify endpoints) will give you event information from PlancastMeetupEventbrite and Facebook. Here are the elements that make up an event and then we will talk timezones:

  • id : The provider id of the event
  • title : Title of the event
  • description : Description of the event. The word count controlled by words and chars
  • start : Start time in milliseconds from epoch
  • end : End time in milliseconds from epoch
  • offset : UTC offset in milliseconds

You'll notice that there is no place information in the event object. This is already rolled up for you in the place object.

Timezones

Each service handles timezone information differently, so we have to standardize the responses across services. If the offset time is null then Embedly was not able to get the event timezone. In this case start and end times are assumed to be in the local timezone. For example Facebook and Plancast do not give timezone information.

On the other hand if the offset is set then the start and end times are in UTC and the offset tells you what timezone the event is in. Meetup and Eventbrite give timezone information.

An offset gives the developer the ability to localize the time to the user's timezone, but is a little extra work. Here is an example in Python:

import time
import datetime
import pytz

start = 1308226500000
offset = -14400000

#get the localtime in seconds
local_time = (start + offset) / 1000

#convert to datetime
dt = datetime.datetime(*time.gmtime(local_time)[:6])

print 'Local Time ', dt

#Say you want to show the time in central time

#epoch to datetime
dt = datetime.datetime(*time.gmtime(start/1000)[:6])

#set the tzinfo on the datetime
utc = pytz.timezone('UTC')
dt = utc.localize(dt)

# Central Time
central = pytz.timezone('US/Central')
dt = central.normalize(dt.astimezone(central))

print 'Central Time ', dt

We will be adding more values like publicnum_attendees or cost, but these values are not standardized across providers. As we get a better handle on how people are using it we will roll out more changes.

We are always looking for ways to improve, so drop feature requests in Convore or submit a support ticket

 

OAuth

We have been pushing out small, incremental features out over the past month and we have another one today. Embedly Pro users can now sign their requests using Two-legged OAuth. We have a few people worried about the safety of their keys and how they could protect them. Instead of creating yet another signing process that a developer has to learn we decided to go with a standard that has great documentation and a number of existing libraries.

Oauth_logo

OAuth generally deals with the shuffle of authenticating a user without making the user give up their password. Twitter, Facebook and Google have all implemented OAuth for developers to make requests on behalf of a user. In Embedly's case there is no user which makes the process simpler. To get started you can read the following:

These documents are generally meant for Three-legged OAuth which is the shuffle mentioned above. To use Two-legged OAuth all a developer needs to do is set the Access Token and Secret to an empty string (""). Here is an example using the python-oauth2 library.

We are going to be updating our libraries over the next few weeks to use OAuth, but in the meantime feel free to take her for a test drive. Pro users head to your dashboard and select "Use OAuth".

 

Introducing Embedly Pro

The veil has come down, the storefront is up and Embedly Pro is open for business.

Logo

Over the last 2 months, we have been beta testing Pro with a number of companies and individual users. We have seen some pretty cool integrations and feel confident enough to open it up to the world. So let's talk users, features, pricing and sign up.

Users

When we started Embedly, our goal was to make it easy for people to embed videos, images and rich media. With over 2 millions embeds served daily, we can confidently say that api.embed.ly is the biggest and best embedding service that exists.

There was a point last summer when it became clear that developers wanted to do more than just embed media. They wanted to submit any URL to Embedly and receive meta data associated with that URL. To address the needs of our users, we began building Embedly Pro.

In August, we slowly rolled Embedly Pro out to some users, and got a lot of great feedback. In December we rolled it out to a larger audience and it's now in use in a lot of fantastic projects.

Features

api.embed.ly can be restrictive for a number of reasons. URLs have to validate against a large Reg Ex, there are a limited number of providers and it's a shared resource. We wanted to fix all that with Pro.

Pro lets you request any URL and will return the relevant meta data associated with that URL. It may be a video, image, PDF, rich media, RSS entry or just an excerpt and thumbnail. The important thing is that you can provide a preview for any URL, giving context to your users and creating a richer experience. Let's outline a few of these features.

New Endpoints

We added two new endpoints: Preview and Objectify.

The Preview endpoint was built to allow users to customize embeds. This endpoint is for you if you are building something similar to the Facebook Share preview functionality. It gives the user multiple images, objects and embeds to choose from when creating an embed.

The Objectify endpoint is the kitchen sink. This endpoint will pass back everything we know about a URL. It is not as well structured as the previous endpoints and is only available to supplement those with desires we could not imagine. Enjoy!

RSS Entries

Embedly Pro ingests hundreds of RSS feeds each day. Don't just show your users previews, show them full text articles. We use PubHubSubBub and the canonical meta tags to match a blog post RSS entry with a URL. We don't poll. PubHubSubBub allows us to take in content from feeds and add it to our meta data.

Malware and Phishing Detection

For Pro we've implemented Google's Safe Browsing API. Google is constantly updating their blacklisted URLs and we wanted to harness that information for our customers. With Safe Browsing integration we can inform a user that the URL they are about to click on is potentially dangerous.

Analytics

What are the most popular URLs on my site? What domains are my users linking to the most? Embedly tracks every URL that you request and breaks them down by day, hour and minute. Embedly gives you insight into what your users are watching, listening to and interested in.

Pro_analytics

Pricing

Developers can start using Embedly Pro now for just $20 a month. We have a tiered pricing structure that can accommodate any developer or company.

If we weren't using Embedly we'd have had to spend probably around a week of an engineer's time to build something that gets the basic job done. It wouldn't be nearly as good, we'd have to deal with constant bug fixes and we'd be paying Amazon $200-$300 a month to host it anyway. Using Embedly is a no-brainer.

James Patterson Platform Lead at Yammer

Let Embedly handle your preview infrastructure, you worry about building your site. You can view the plans and sign up at embed.ly/pricing

Going Forward

Over the next week we will be doing a series of blog posts that outline how to use Embedly Pro. We will be talking about client libraries and a bunch of cool little apps that we have built.

You should follow us @embedly to learn more.

 

RSS isn't dead, it just needs to be repurposed.

Today there has been a flurry of activity concerning whether or not RSS is dead, making it the perfect day to launch our latest addition to our suite of tools.  We, for one, don't think it's dead. It just needs to be repurposed.

Legacy dictates a lot of what we do as developers. Once something has caught hold and become the norm, we build on it and try our hardest not to let it die. Because with it dies all the apps and services that rely on it.

One such legacy, the RSS Reader, has been used since the age of dinosaurs to poll blogs for their latest articles and pull them into one organized place for you to consume. No context switching. No remembering to check 50 blogs a day for any new updates.  Just content. It's time consuming, however, and after a while it becomes unmanageable. There is just too much unfiltered news streaming into one place. For many people, like me, Twitter has replaced most of the functionality of a reader. I still get the same information, but it's pushed to me, nicely curated, by people I follow. But oh how I miss the content sometimes. 

When we boil these two technologies down, we are really looking at a bunch of links that the end user can choose to view however they want. RSS isn't new and at this point, neither is Twitter. What's innovative these days is how that content is being displayed. Flipboard is a prime example here. Mobile devices are changing how we think about content anyhow. Why not follow their lead?

So wouldn't it be great if we could take the best parts of RSS (i.e. the content) and repurpose it so we could embed the post anywhere the link appeared? 

Well, we did. Embedly Pro now supports embedded RSS entries. This allows the publisher to dictate what part of their content is consumed. We aren't guessing what image to pull or what the excerpt should be. The publisher has already made that decision for us.

To see what we are talking about download the Parrotfish extension available on Chrome, Firefox, and Safari (via twitter.com). You will be able to read RSS articles in the right hand detail panel for sites like Techcrunch, Read Write Web, Lifehacker and Mashable.

(download)

On the technical side, we use pubhubsubbub and the canonical meta tags to match a blog post RSS entry with a URL. We don't poll. Pubhubsubbub allows us to take in content from feeds and go from there. We are starting small, with a few feeds, but we hope to expand to many more soon. In the future we will allow any blog with an RSS feed to be added.