/[koha-facebook]/koha-facebook.cgi
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /koha-facebook.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4 - (hide annotations)
Sat Jun 27 16:44:51 2009 UTC (14 years, 11 months ago) by dpavlin
File size: 3883 byte(s)
select some details about users

1 dpavlin 1 #!/usr/bin/perl
2     # Copyright David Leadbeater 2007 <http://dgl.cx>.
3     # Licensed under the same terms as Perl itself.
4    
5     # A simple example of using WWW::Facebook::API within a facebook canvas.
6     # You will need to change the api_key, secret and app_path below to match your
7     # account. To get an api_key and secret, go to
8     # http://www.facebook.com/developers/editapp.php?new, choose "Use FBML" and
9     # enter a unique name for the canvas which you should put into app_path.
10    
11     use strict;
12     use CGI;
13     use WWW::Facebook::API;
14     use Data::Dump qw/dump/;
15     use XML::FeedPP;
16 dpavlin 2 use Time::HiRes qw/time/;
17 dpavlin 1
18 dpavlin 2 our ($api_key,$secret,$rss_url,$app_path); # XXX configure this in config.pl
19 dpavlin 1 require 'config.pl';
20    
21 dpavlin 2 # UI elements
22    
23 dpavlin 3 my $facebook = WWW::Facebook::API->new(
24     api_key => $api_key,
25     secret => $secret,
26     app_path => $app_path,
27     parse => 1,
28     );
29    
30     warn dump($facebook);
31    
32 dpavlin 2 sub dashboard {
33     print qq|
34     <fb:dashboard>
35     <fb:action href=/$app_path/>Search</fb:action>
36     </fb:dashboard>
37     |;
38     '';
39     }
40    
41     sub form {
42     my $q = shift;
43     my $v = $q->param('search');
44     $v = qq| value="$v"| if defined $v;
45    
46     print qq|
47     <form method="post" action="search">
48     <input name="search" $v>
49     <input type="submit">
50     </form>
51     |;
52     '';
53     }
54    
55 dpavlin 3 # dispatcher
56 dpavlin 2
57 dpavlin 1 our %action_map = (
58     '' => \&index_page,
59     info => \&info_page,
60     search => \&search_page,
61 dpavlin 2 debug => \&debug_page,
62 dpavlin 1 );
63    
64     sub main {
65    
66     # Should also work with FastCGI (via CGI::Fast).
67     my $q = new CGI;
68     print "Content-type: text/html; encoding=utf-8\r\n\r\n";
69    
70     # redirect("Must be called in facebook canvas")
71     # unless $facebook->canvas->in_fb_canvas($q);
72    
73     my $params = $facebook->canvas->validate_sig($q);
74     if ( $params->{user} ) {
75    
76     # Canvas takes care of setting up a session for us, no need to call the
77     # auth methods.
78     $facebook->session_key( $params->{session_key} );
79     }
80     else {
81    
82     # User hasn't added app (could reject/display info/whatever)
83     # (Or handle later when a user is needed).
84     }
85    
86     my ( $action, $param ) = ( $q->path_info =~ m!^/(\w+)/?(.*)! );
87 dpavlin 2
88 dpavlin 3 print dashboard;
89    
90 dpavlin 1 if ( my $s = $action_map{$action} ) {
91 dpavlin 2 print qq|<div style='padding-left: 2em'>|;
92 dpavlin 1 $s->( $q, $params );
93 dpavlin 2 print qq|</div>|;
94 dpavlin 1 }
95     else {
96 dpavlin 3 print "Action <tt>$action</tt> unknown";
97     warn "unknown action $action";
98 dpavlin 1 }
99    
100     # Clear session_key (for if running under FastCGI).
101     $facebook->session_key(undef);
102     }
103    
104     sub index_page {
105 dpavlin 2 my ( $q, $params ) = @_;
106 dpavlin 1
107 dpavlin 3 warn dump($params);
108    
109 dpavlin 2 form($q);
110 dpavlin 1
111     # You could do this easier by using <fb:name>, just showing some API stuff here.
112 dpavlin 4 # http://wiki.developers.facebook.com/index.php/User_(FQL)
113 dpavlin 1 my $name = "You";
114 dpavlin 4 if ( my $uid = $params->{user} ) {
115     my $res = $facebook->fql->query( query => qq|
116     select
117     first_name, last_name,
118     is_app_user,
119     books,
120     locale
121     from user
122     where uid=$uid
123     | );
124     warn "# $uid res = ",dump(@{$res});
125     $name = "Hello $res->[0]->{first_name}, you";
126 dpavlin 1 }
127     print "$name ", ( $params ? "have" : "have't" ),
128 dpavlin 4 " added this application.";
129 dpavlin 3
130 dpavlin 1 if ( !$params ) {
131     print "<a href='", $facebook->get_add_url,
132     "'>Add this application</a>.";
133     }
134    
135    
136    
137     }
138    
139     sub info_page {
140 dpavlin 2 open( my $fh, '<', 'info.html' );
141     print <$fh>;
142     close($fh);
143     }
144 dpavlin 1
145 dpavlin 2 sub debug_page {
146     my ( $q, $params ) = @_;
147     print "<pre>";
148 dpavlin 1 print dump($params);
149 dpavlin 2 print "</pre>";
150 dpavlin 1 }
151    
152     sub search_page {
153     my ( $q, $params ) = @_;
154    
155     my $search = $q->param('search');
156 dpavlin 2
157     my $t = time();
158    
159     my $feed = XML::FeedPP->new( $rss_url . $search );
160    
161     my $t = time() - $t;
162 dpavlin 1
163 dpavlin 2 print form($q), qq|
164 dpavlin 1 <ol>
165     |;
166    
167     foreach my $item ( $feed->get_item ) {
168     print qq|<li><a href="|, $item->link, qq|">|, $item->title, qq|</a><br>|, $item->description;
169     }
170    
171     print qq|
172     </ol>
173 dpavlin 2
174     <div style="color: #ccc;">search took $t sec</div>
175 dpavlin 1 |;
176    
177     }
178    
179     sub redirect {
180 dpavlin 2 print("Please go <a href='"
181 dpavlin 1 . $facebook->get_app_url
182     . "'>to facebook</a>" );
183     exit;
184     }
185    
186     main();

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26