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