7 no if $] >= 5.018, warnings => "experimental::smartmatch";
14 use URI::Escape qw(uri_escape);
15 use HTTP::Request::Common;
18 use DBD::Pg qw(:pg_types);
21 use lib "$FindBin::Bin/../lib";
24 my $dbh = ND::DB::DB();
26 my $ua = LWP::UserAgent->new(agent => 'NDWebbie' );
28 my $click = $dbh->selectrow_hashref(q{
29 SELECT api_id,username,password FROM clickatell LIMIT 1
33 api_id => $click->{api_id},
34 user => $click->{username},
35 password => $click->{password},
40 my $sms = $dbh->prepare(q{
41 SELECT * FROM sms WHERE msgid IS NULL AND status = 'Waiting' FOR UPDATE
44 my $update = $dbh->prepare(q{
45 UPDATE sms SET msgid = $2, status = $3, time = NOW() WHERE id = $1
50 $dbh->pg_savepoint('sms') or die "Couldn't save";
51 while(my $msg = $sms->fetchrow_hashref){
52 $dbh->pg_release('sms') or die "Couldn't save";
53 $dbh->pg_savepoint('sms') or die "Couldn't save";
57 text => encode("latin1",$msg->{message}),
60 my $res = $ua->request(
61 POST 'http://api.clickatell.com/http/sendmsg',
62 Content_Type => 'application/x-www-form-urlencoded',
66 given ($res->content){
68 $update->execute($msg->{id},$1,'Sent');
70 when(/^ERR: (?:301|302|128|114|113|105),(.*)/){
71 $update->execute($msg->{id},undef,$1);
82 $dbh->pg_rollback_to('sms') or die "rollback didn't work";