summaryrefslogtreecommitdiff
path: root/localmarkdown2sms
diff options
context:
space:
mode:
authorroot <root@jones.dk>2009-10-27 03:21:21 +0100
committerroot <root@jones.dk>2009-10-27 03:21:21 +0100
commit225d65b2fd31b793fb74feb90587f1fefd183169 (patch)
tree6b6b00c8d5462157ce0ec95bcc4f16fdf31bab4a /localmarkdown2sms
parent3287001c6fe552cd190bdfcbe35b4a6670647a78 (diff)
Add env flag SMS_CP, and transliterate too complex characters.
Diffstat (limited to 'localmarkdown2sms')
-rwxr-xr-xlocalmarkdown2sms19
1 files changed, 17 insertions, 2 deletions
diff --git a/localmarkdown2sms b/localmarkdown2sms
index 896b34f..7293583 100755
--- a/localmarkdown2sms
+++ b/localmarkdown2sms
@@ -28,7 +28,8 @@ use Log::Log4perl qw(:easy);
use File::Spec;
use File::Slurp;
use Time::Duration::Parse;
-use Encode;
+use Text::Unidecode;
+use Encode 2.12 qw(encode decode_utf8 _utf8_off); # need v2.12 to support coderef
use LWP::UserAgent;
use URI::Escape;
use Proc::Daemon;
@@ -41,6 +42,7 @@ my $sms_pw = $ENV{SMS_PW} || "foobar";
my $sms_phone = $ENV{SMS_PHONE};
my $sms_smsc = $ENV{SMS_SMSC};
my $sms_msgtag = $ENV{SMS_MSGTAG} || "text";
+my $sms_cp = $ENV{SMS_CP} || "utf8";
my $path = $ENV{mdpath};
my (%file, %delay, %reply);
@@ -172,6 +174,19 @@ sub tidymsg {
return $msg;
}
+# based on Text::Unidecode bug#8017: http://rt.cpan.org/Ticket/Display.html?id=8017#txn-322351
+sub transliterate {
+ my ($tocharset, $string) = @_;
+
+ my $res = encode($tocharset, decode_utf8($string), sub {
+ my $ascii = unidecode(chr $_[0]);
+ _utf8_off($ascii);
+ $ascii;
+ });
+
+ return $res;
+}
+
sub sendmsg {
my ($phone, $desc, $msg) = @_;
@@ -184,7 +199,7 @@ sub sendmsg {
. '&to=' . uri_escape($phone);
$url .= '&from=' . uri_escape($sms_phone) if ($sms_phone);
$url .= '&smsc=' . uri_escape($sms_smsc) if ($sms_smsc);
- $url .= '&' . $sms_msgtag . '=' . uri_escape(encode("cp1252", $msg));
+ $url .= '&' . $sms_msgtag . '=' . uri_escape(transliterate($sms_cp, $msg));
my $response = $ua->request(HTTP::Request->new('GET', $url));
unless ($response->is_success) {
ERROR $response->status_line;