12 use URI::Escape qw(uri_escape);
13 use HTTP::Request::Common;
16 use DBD::Pg qw(:pg_types);
19 use lib "$FindBin::Bin/../lib";
22 my $dbh = ND::DB::DB();
24 my $ua = LWP::UserAgent->new(agent => 'NDWebbie' );
26 my $click = $dbh->selectrow_hashref(q{
27 SELECT api_id,username,password FROM clickatell LIMIT 1
31 api_id => $click->{api_id},
32 user => $click->{username},
33 password => $click->{password},
38 my $sms = $dbh->prepare(q{
39 SELECT * FROM sms WHERE msgid IS NULL AND status = 'Waiting' FOR UPDATE
42 my $update = $dbh->prepare(q{
43 UPDATE sms SET msgid = $2, status = $3, time = NOW() WHERE id = $1
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";
55 text => encode("latin1",$msg->{message}),
58 my $res = $ua->request(
59 POST 'http://api.clickatell.com/http/sendmsg',
60 Content_Type => 'application/x-www-form-urlencoded',
64 given ($res->content){
66 $update->execute($msg->{id},$1,'Sent');
68 when(/^ERR: (?:302|128|114|113|105),(.*)/){
69 $update->execute($msg->{id},undef,$1);
80 $dbh->pg_rollback_to('sms') or die "rollback didn't work";