Joind.in's API
I speak at many conferences and more and more of those conferences are using a service called joind.in. The joind.in website allows attendees of conferences to leave feedback for the speakers, organisers and sponsors. For me as a speaker this feedback by attendees is very important (as long as the comments are constructive). I use those comments to tweak and improve my presentations if I give them at a later moment.
The joind.in website also provides an API that allows you to talk to the service from other applications and sites. I've now integrated this in my site (at the talks page). It uses JQuery's ajax functionality to talk to the backend which queries (and caches) the joind.in API requests. In order to make API calls, you need to make POST requests to a specific URL. The URL depends on what type of object you want to use. For example, there is http://joind.in/api/talk for requesting information about talks, and http://joind.in/api/user for fetching information about users.
Requests can be either made in XML, or with JSON. A simple example to request all comments for a specific talk can be done with something like:
<?php
$id = 1240;
$requestData = <<<ENDD
{"request":{
"action":{
"type":"getcomments",
"data":{"talk_id":$id}
}
}}
ENDD;
$data = do_post_request(
'http://joind.in/api/talk',
$requestData,
'Content-type: application/json'
);
foreach( json_decode( $data ) as $comment )
{
/* ... */
}
?>
The do_post_request() code I lifted from Wez' page, and looks like:
<?php
function do_post_request($url, $data, $optional_headers = null)
{
$params = array(
'http' => array(
'method' => 'POST',
'content' => $data
)
);
if ( $optional_headers !== null) {
$params['http']['header'] = $optional_headers;
}
$ctx = stream_context_create( $params );
$fp = fopen( $url, 'rb', false, $ctx );
$response = stream_get_contents( $fp );
return $response;
}
?>
I am also fetching the full name for each user. Because this could mean that I have to do a lot of requests I am caching them with eZ Components' Cache component.
You can see the code operational on the talks page, by clicking on the little joind.in logo after each talk that is on the site. If JavaScript is disabled, the logo turns into a link that takes you to the joind.in site with all the comments.
Comments
From an application design perspective; given the update ratio of those talks after the event is over, why would you want to do this with ajax (even though you cache things). Wouldn't it be better to do this asynchronously and fetch them regularly using a cron script, and have them available on the spot? Saves the 'fetching from joind.in...' wait time.
@Ivo: I suppose I could. I think there will be so little people actually checking this, that in the current form there will actually be less calls to the joind.in API. It was also a little experiment with JQuery :-)
I didn't even know that joind.in had an API. How long ago was this API introduced?
@Anna: I've no idea really... it's been there for a while. I suppose that makes integrating it easier? :-)
Well I'm glad to see that joind.in has one. I needed it for my event but never got an answer from Chris on that subject. Then I saw your blog post. Thanks!
Interesting that you created a JSON object by hand; why not create it as a normal PHP data structure and then convert it to JSON with json_encode()?
@Ken: No real reason except that it is a bit more clear what happens here. In the most idea case, I should simply have to request (with GET) http://joind.in/api/talk/getcomments/<id> though.
Life Line
Updated an estate_agent office
My First Lapwing!
I went to the London Wetland Centre yesterday, for a day out in nature.
While hiding in a hide, this chap and a friend showed up starting to forage for grubs.
#BirdPhotography #BirdsOfMastodon #Photography #Birds #London #Nature
Created a waste_basket; Updated a cafe and a restaurant; Confirmed an estate_agent office
@bennuttall Are you at the Crucible this year again?
I walked 9.7km in 5h29m12s
Updated a gate
Staring Contest with a Squirrel
On my walk on the weekend, I sat down on a tree branch of a tree that had fallen over some time ago. Just listening to the birds.
Then after hearing rustling in the foliage above me, I looked up, and saw this chap staring at me.
I walked 3.0km in 41m38s
I walked 1.1km in 12m20s
Bluebell Carpet
I had a lovely walk on Hampstead Heath yesterday, finding all the nooks and crannies away from the busy paths.
This field of bluebells under the colourful tree was a stand-out quiet spot.
I walked 2.3km in 21m51s
Fix paths
Created a memorial
Created a bench
@Edent Seems like my Android stopped sending coordinates to @openbenches as well, which is surprising as I haven't updated anything as far as I'm aware. Could it be a problem with the reader in your side after the latest changes and the addition of the warning?
I walked 5.8km in 2h15m45s
I walked 1.7km in 17m46s
I walked 4.8km in 1h39m40s
Add the new Queen Elizabeth II garden.
Updated a bench and a crossing; Deleted 2 kerbs
Created 3 gates and a waste_basket
Created 6 benches
Created a bench; Updated 4 benches
Created 2 benches and a bicycle_parking; Updated a telephone and a waste_basket
I walked 10.3km in 2h34m24s




Shortlink
This article has a short URL available: https://drck.me/joind.ins-api-7rl