]> ruin.nu Git - ndwebbie.git/blob - scripts/sms.pl
Use local::lib properly
[ndwebbie.git] / scripts / sms.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use feature ':5.10';
6
7 use local::lib;
8
9 use Encode;
10
11 use LWP::UserAgent;
12 use URI::Escape qw(uri_escape);
13 use HTTP::Request::Common;
14
15 use DBI;
16 use DBD::Pg qw(:pg_types);
17
18 use FindBin;
19 use lib "$FindBin::Bin/../lib";
20
21 use ND::DB;
22 my $dbh = ND::DB::DB();
23
24 my $ua = LWP::UserAgent->new(agent => 'NDWebbie' );
25
26 my $click = $dbh->selectrow_hashref(q{
27 SELECT api_id,username,password FROM clickatell LIMIT 1
28 });
29
30 my %tags = (
31         api_id => $click->{api_id},
32         user => $click->{username},
33         password => $click->{password},
34         callback => 3,
35 );
36
37 $dbh->begin_work;
38 my $sms = $dbh->prepare(q{
39 SELECT * FROM sms WHERE msgid IS NULL AND status = 'Waiting' FOR UPDATE
40 });
41
42 my $update = $dbh->prepare(q{
43 UPDATE sms SET msgid = $2, status = $3, time = NOW() WHERE id = $1
44 });
45
46 $sms->execute;
47 eval{
48         $dbh->pg_savepoint('sms') or die "Couldn't save";
49         while(my $msg = $sms->fetchrow_hashref){
50                 $dbh->pg_release('sms') or die "Couldn't save";
51                 $dbh->pg_savepoint('sms') or die "Couldn't save";
52
53                 my %tags = (%tags,
54                         to => $msg->{number},
55                         text => encode("latin1",$msg->{message}),
56                 );
57
58                 my $res = $ua->request(
59                         POST 'http://api.clickatell.com/http/sendmsg',
60                         Content_Type  => 'application/x-www-form-urlencoded',
61                         Content       => [ %tags ]
62                 );
63
64                 given ($res->content){
65                         when(/^ID: (\S+)/){
66                                 $update->execute($msg->{id},$1,'Sent');
67                         }
68                         when(/^ERR: (?:302|128|114|113|105),(.*)/){
69                                 $update->execute($msg->{id},undef,$1);
70                         }
71                         default {
72                                 die $_;
73                         }
74                 }
75         }
76 };
77
78 if ($@){
79         warn $@;
80         $dbh->pg_rollback_to('sms') or die "rollback didn't work";
81 }
82
83 $dbh->commit;