1 | NAME |
---|
2 | Facebook.par - Facebook support for BarnOwl |
---|
3 | |
---|
4 | DESCRIPTION |
---|
5 | The Facebook module implements Facebook support for BarnOwl. |
---|
6 | |
---|
7 | SYNOPSIS |
---|
8 | (1) Create an empty file ~/.owl/facebook (you can use the command |
---|
9 | `touch ~/.owl/facebook`), in order to enable the module. |
---|
10 | |
---|
11 | (2) Run ":reload-module Facebook" inside BarnOwl. |
---|
12 | |
---|
13 | (3) Follow the instructions in the admin message. BarnOwl will |
---|
14 | ask you to log in via an OAuth URL, and run ':facebook-auth' |
---|
15 | with the resulting URL. It will then ask you to record the |
---|
16 | resulting access token in your ~/.owl/facebook file, so you do |
---|
17 | not have to login on subsequent BarnOwl sesions. |
---|
18 | |
---|
19 | This token is valid until you change your |
---|
20 | Facebook password or you revoke permissions for Barnowl at: |
---|
21 | http://www.facebook.com/settings/?tab=applications&app_id=235537266461636 |
---|
22 | |
---|
23 | (4) Start receiving wall updates in Barnowl! |
---|
24 | You can post updates with the ":facebook" command. |
---|
25 | |
---|
26 | POLLING |
---|
27 | Facebook.par polls for normal messages once a minute. To disable |
---|
28 | polling, you can unset the 'facebook:poll' variable in BarnOwl. |
---|
29 | |
---|
30 | TODO |
---|
31 | * Polling Facebook is pretty slow (on order of a second or more), |
---|
32 | and blocks the entire BarnOwl interface. We need to confront |
---|
33 | Perl's threading demon. |
---|
34 | * No messaging support. (We'll add it when Facebook makes the new endpoint.) |
---|
35 | * Smarter name de-duplication (see code comments for details.) |
---|
36 | * Grep for XXX and TODO for more work items. |
---|
37 | |
---|
38 | TECHNICAL NOTES |
---|
39 | This module uses 100% undeprecated Facebook Graph API, and should be |
---|
40 | an interesting case study of how to implement a desktop application in |
---|
41 | the new Facebook world order. In particular, we do not use the old |
---|
42 | infinite session keys trick described in |
---|
43 | <http://www.emcro.com/blog/2009/01/facebook-infinite-session-keys-no-more/>, |
---|
44 | instead, we use offline_access to get non-expiring tokens. |
---|
45 | |
---|
46 | If we decide to extend our permissions to include read_friendlists |
---|
47 | (for filtering) and rsvp_event (RSVP from BarnOwl), we will need |
---|
48 | to make sure the UI for upgrading is correct. |
---|
49 | |
---|
50 | We'll be rolling our own version of Facebook::Graph, as the original |
---|
51 | uses the synchronous LWP::UserAgent, and we'd like our web requests |
---|
52 | not to block the user interface. Furthermore, Facebook::Graph doesn't |
---|
53 | actually use any of the features of LWP::UserAgent, so we may be able |
---|
54 | to use a simpler module AnyEvent::HTTP. |
---|