Improving Instapaper support in Fever°

I recently switched from Google Reader to Fever°. I am happy I switched, but I quickly missed the ease with which I could save articles to Instapaper. The Instapaper bookmarklet has some way of divining which article you’re focused on in Google Reader, so you can add the article right from the feed page, instead of opening the article itself, then adding it to Instapaper. It’s very convenient, and fast.

Fever° also has Instapaper support, but it works a little differently. When focused on an article, you tap i to open a new window containing a pre-filled Instapaper form, then click the Add button. The item is added, and you’re left with a window showing your Instapaper unread items.

That’s not bad, but I didn’t want that window hanging around. I had to wait for it to load, then get rid of it. I had to take my hand off the keyboard to click the Add button. It worked, but was less graceful than what I had before.

I spent a few minutes with PHP and came up with a solution. It’s not as pretty as what I had with Google Reader, but it’s just as fast, and works without any mousing, clicking, or lingering windows. I tap i on an article, and a window pops up, says ‘Saved,’ and disappears on its own after a second or so. (If there’s a problem, you see an error instead and the window does not go away.)

First, create a script on your site. I named mine instapaper.php and put it at the root of my Fever° site. But you can put it anywhere, including on another domain entirely. You just need to know the URL to configure Fever° later.

instapaper.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php

$api = 'https://www.instapaper.com/api/add';
$close_timer = 750; // how many ms to display 'Saved!'

// Your instapaper.com credentials
$user = 'my_username';
$pass = 'my_password';

$u = urlencode($_GET['url']);
$t = urlencode($_GET['title']);
$s = urlencode($_GET['selection']);

$curl_url = "$api?username=$user&password=$pass&url=$u&title=$t&selection=$s";

$ch = curl_init($curl_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$ret = curl_exec($ch);
curl_close($ch);

if ($ret == '201'):
?>

<h2>Saved!</h2>
<script language="javascript">
setTimeout("self.close();",<?php echo $close_timer ?>) 
</script>

<?php else: ?>

<p>ERROR: instead of response code 201, we got:<br />
<?php echo $ret ?></p>

<?php endif ?>

Now, go into your Fever° preferences and click the Sharing tab. I suggest removing the i key from the Instapaper item, and changing its name (I used ‘ORIGINAL Instapaper’). That way it’s still there if you ever want to switch back.

Click the + icon to add a new service. Name it ‘Instapaper,’ set the key to i or whatever you prefer, and set the URL as follows. You’ll need to substitute the path to your script.

1
http://mysite.com/fever/instapaper.php?url=%u&title=%t&selection=%e

Click Save and you’re done.

(I’ll write more about Fever° itself after I’ve used it for a while longer.)