Hatori Kibble

Jo eh…

Zotero und Perl II

leave a comment »

Im ersten Teil bin ich auf den Zugriff zu den lokalen Daten eingegangen. Man kann aber auch auf den Sync Server unter https://sync.zotero.org zugreifen.

Um zu verstehen was beim Synchronisationsprozess vor sich geht kann man das debugging für Zotero einschalten.

Dazu einfach im Firefox unter about:config den Wert für extensions.zotero.debug.log auf true setzen.

Hier ein Beispiel für das Login und das Abholen einer Session:




package Zotero::Sync;
use warnings;
use strict;
=head1 NAME
Zotero::Sync - The great new Zotero::Sync!
=head1 VERSION
Version 0.01
=cut
our $VERSION = '0.01';
use Log::Log4perl qw(get_logger);
use Readonly;
use LWP::UserAgent;
Readonly my $SyncServer => 'https://sync.zotero.org';
=head1 SYNOPSIS
Quick summary of what the module does.
Perhaps a little code snippet.
use Zotero::Sync;
my $foo = Zotero::Sync->new();
...
=head1 FUNCTIONS
=head2 new
Constructor
=cut
sub new {
my $Type = shift;
my $Self = {};
bless( $Self, $Type );
my $logconf = q(
log4perl.logger.Sync=DEBUG, A1
log4perl.appender.A1=Log::Log4perl::Appender::File
log4perl.appender.A1.filename=/tmp/sync.log
log4perl.appender.A1.layout=Log::Log4perl::Layout::PatternLayout
log4perl.appender.A1.layout.ConversionPattern = %d %p> %F{1}:%L %M - %m%n
log4perl.appender.A1.mode=append
);
Log::Log4perl->init( \$logconf );
$Self->{Logger} = get_logger('Sync');
$Self->{Logger}->debug("Started..");
return $Self;
}
=head2 login(UserName=>'', Password=>'');
=cut
sub login {
my $Self      = shift;
my %p         = @_;
my $useragent = LWP::UserAgent->new(agent=>'Zotero::Sync/at.peter.mayr@gmail.com');
my $query = undef;
my $response = undef;
my $content = undef;
unless ( defined( $p{UserName} ) ) {
$Self->{Logger}->logcroak("No UserName defined!");
}
unless ( defined( $p{Password} ) ) {
$Self->{Logger}->logcroak("No Password defined!");
}
$useragent->timeout(10);
$query =
$SyncServer
. "/login?version=3&username="
. $p{UserName}
. "&password=";
$Self->{Logger}->debug( "query: " . $query . "XXXX" );
$query .= $p{Password};
$response = $useragent->get($query);
if ( $response->is_success ) {
$content = $response->decoded_content();
if ( $content =~ /(.*?)<\/sessionID>/){
$Self->{SessionID} = $1;
$Self->{Status} = "OK";
}else{
$Self->{Status} = "Error";
$Self->{Logger}->logcroak( "Could not login:" . $content );
}
}
else {
$Self->{Logger}->logcroak( "Error sending data:" . $response->status_line );
}
}

Den Code gibt’s auch als Perl-Distribution.

Written by Peter

Januar 29, 2009 um 8:05 pm

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: