[Koha] Post recently catalogued books to a Facebook page

Witoszynskyj Stephan stephan at wito.org
Fri Feb 6 08:40:36 NZDT 2015


Hi,

I recently wrote on this list that I’m about to develop a script that posts recently catalogued books to a Facebook page. Well, I found some time faster then I thought, so here’s my simple script. I’ll run it using koha-foreach in a cronjob.

It does nothing fancy it just posts a list of recently catalogued books in the form 

author: title
http://yourlibrary.org/bib/number

in the time line of a Facebook page. I also tried uploading cover images, but that didn’t work that well.

Actually, the whole script is rather trivial. Figuring out how to get access tokens for Facebook having the correct permissions took much longer then developing the script. So, I tried to summarize the steps necessary to get the tokens in the script’s comments. I hope they are helpful.

Cheers,
  Stephan

#!/usr/bin/perl

use utf8;
use Modern::Perl;
use C4::Context;
use Facebook::Graph;

# This program posts a list of recently catalogued books to Facebook "Page". 
# To be able to get the required access tokens you have to have administrator
# rights for the page.
#
# 1. Register as developer on Facebook's developer site: 
#    https://developers.facebook.com
# 2. Add an app on Facebook's developer site. Use "advanced Setup", choose a 
#    name and the category "Apps for pages". You'll get an app id and an app 
#    secret
# 3. get an user access token on https://developers.facebook.com/tools/explorer 
#    by clicking "Get Access Token", set the "Extended Permissions" manage_pages and publish_actions (make sure that you do that for your app and not for Graph Explorer)
# 4. extend the expiration date of the access token by submitting the following
#    GET request: 
#    /oauth/access_token?grant_type=fb_exchange_token&client_id={app-id}&client_secret={app-secret}&fb_exchange_token={short-lived-token} 
#    You can this using wget:
#    wget -O token "https://graph.facebook.com/wget -O token "https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id={app-id}&client_secret={app-secret}&fb_exchange_token={short-lived-token} 
#    the file token will then contain your token
# 5. determine your user id e.g. by http://graph.facebook.com/yourusername
# 6. get the page access token by submitting the following GET request in 
#    Graph API explorer:
#      /{user-id}/accounts
#    You will get a data structure containing a number of key
#    value pairs for each page you administrate. Get the page id and page 
#    access token for the page you want to post to


my $fb_access_token = „"; # your page access token goes here

my $maxdays = 7;
my $base_url = 'http://yourlibrary.org';


my $fb = Facebook::Graph->new;
$fb->access_token($fb_access_token);

my $tmpdir = File::Temp->newdir();
my $dirname = $tmpdir->dirname;

my $dbh   = C4::Context->dbh;

my $query = "SELECT b.biblionumber,b.author,b.title,i.itemcallnumber FROM biblio b, items i WHERE b.biblionumber = i.biblionumber AND DATEDIFF(CURRENT_DATE,b.datecreated) < ? GROUP BY b.biblionumber,b.author,b.title,i.itemcallnumber ORDER BY i.itemcallnumber,b.author COLLATE utf8_unicode_ci";

my $sth   = $dbh->prepare($query);
$sth->execute($maxdays);

my @data;
my $message = "Recently catalogued books\n\n";
my $rows_returned = 0;

while (@data = $sth->fetchrow_array()) {
  my $biblionumber   = $data[0];
  my $author         = $data[1];
  my $title          = $data[2];
  my $itemcallnumber = $data[3];
   
  if ($author) {
    $message .= $author.": ";
  }
  $message .= $title."\n";
  $message .= $base_url.'/bib/.$biblionumber."\n\n";
  
  $rows_returned++;
}

if ($rows_returned) {
  my $response = $fb->add_post
    ->set_message($message)
    ->publish;

  # print $response->as_string()."\n";
  # my $msg_id = $response->as_hashref()->{id};
}



More information about the Koha mailing list