10 use URI::Escape qw(uri_escape);
11 use HTTP::Request::Common;
14 use DBD::Pg qw(:pg_types);
17 use lib "$FindBin::Bin/../lib";
20 my $dbh = ND::DB::DB();
22 my $ua = LWP::UserAgent->new(agent => 'NDWebbie' );
24 my $click = $dbh->selectrow_hashref(q{
25 SELECT api_id,username,password FROM clickatell LIMIT 1
29 api_id => $click->{api_id},
30 user => $click->{username},
31 password => $click->{password},
36 my $sms = $dbh->prepare(q{
37 SELECT * FROM sms WHERE msgid IS NULL AND status = 'Waiting' FOR UPDATE
40 my $update = $dbh->prepare(q{
41 UPDATE sms SET msgid = $2, status = $3, time = NOW() WHERE id = $1
46 $dbh->pg_savepoint('sms') or die "Couldn't save";
47 while(my $msg = $sms->fetchrow_hashref){
48 $dbh->pg_release('sms') or die "Couldn't save";
49 $dbh->pg_savepoint('sms') or die "Couldn't save";
53 text => encode("latin1",$msg->{message}),
56 my $res = $ua->request(
57 POST 'http://api.clickatell.com/http/sendmsg',
58 Content_Type => 'application/x-www-form-urlencoded',
62 given ($res->content){
64 $update->execute($msg->{id},$1,'Sent');
66 when(/^ERR: (?:302|128|114|113|105),(.*)/){
67 $update->execute($msg->{id},undef,$1);
78 $dbh->pg_rollback_to('sms') or die "rollback didn't work";