Art of Mobile
Home GeneralHardwareJavaMMSPerlPHPSMSWAP

Archive for the ‘Perl’ Category

Perl Module to access Clickatell HTTP API

Posted in MMS, Perl, SMS, WAP by artofmobile

I’ve written a perl module to access to Clickatell HTTP API. This module supports the API from Clickatell’s HTTP API Specification v.2.2.7.

The following are all the available APIs and whether they are supported or not:

Basic Commands

  • http://api.clickatell.com/http/auth
    • Yes (But session Not support)
  • http://api.clickatell.com/http/ping
    • Yes (But session Not support)
  • http://api.clickatell.com/http/querymsg
    • Yes
  • http://api.clickatell.com/http/sendmsg
    • Yes

Additional Commands

  • http://api.clickatell.com/http/delmsg
    • No
  • http://api.clickatell.com/http/getbalance
    • Yes
  • http://api.clickatell.com/http/routeCoverage.php
    • Yes
  • http://api.clickatell.com/mms/ind_push.php
    • Yes
  • http://api.clickatell.com/mms/si_push.php
    • Yes
  • http://api.clickatell.com/http/getmsgcharge
    • Yes
  • http://api.clickatell.com/http/token_pay
    • No

Batch Messaging

  • http://api.clickatell.com/http_batch/startbatch
    • No
  • http://api.clickatell.com/http_batch/senditem
    • No
  • http://api.clickatell.com/http_batch/quicksend
    • No
  • http://api.clickatell.com/http_batch/endbatch
    • No

I tested this module on perl v5.8.5.

INSTALL

To install the module, perform the usual perl module installation procedures. The following is the steps:

        perl Makefile.PL
        make
        make install

Read the rest of this entry »

Check Device’s User-Agent using Perl

Posted in Perl, WAP by artofmobile

There is a CPAN library that helps to parse the User-Agent. You can download the Perl library at:

http://search.cpan.org/~cmanley/Mobile-UserAgent-1.05/lib/Mobile/UserAgent.pm

After you download the library, perform the usual installation procedures:

perl Makefile.PL
make
make install

The following is the source code:

#!/usr/local/bin/perl
use strict;

use Mobile::UserAgent;
my $uaobj = new Mobile::UserAgent();

The codes above is the standard declaration so that you can call “Mobile::UserAgent” library. The following 3 lines are used for testing purposes. Uncomment the following 3 lines and comment the above 1 line to do some testing.

#my $useragent = 'Nokia6600/1.0 (4.09.1) SymbianOS/7.0s Series60/2.0 '.
#   'Profile/MIDP-2.0 Configuration/CLDC-1.0';
#my $uaobj = new Mobile::UserAgent($useragent);

The following lines check the User-Agent string and pass the output to the subroutine “printWml” if the device suppose WML or the subroutine “printHtml” if the device doesn’t.

if ($uaobj->success()) {
   my $out='Vendor: ' . $uaobj->vendor()     . "<br />\\n";
   $out.='Model:    ' . $uaobj->model()      . "<br />\\n";
   $out.='Version:  ' . $uaobj->version()    . "<br />\\n";
   $out.='Series60: ' . $uaobj->isSeries60() . "<br />\\n";
   &printWml($out);
} else {
   &printHtml("Connecting Client is not a mobile user-agent \\n");
}

Read the rest of this entry »

Example to read MMS message and write to a file in Perl

Posted in MMS, Perl by artofmobile

This example is a simple subroutine to check whether the content is a MMS and write to a file. Combine the example in “Detect WAP browser and redirect to different url in Perl”, you can route the URL request to another URL if it is not a MMS content.

The subroutine “doRedirrect” is meant to do that, or you can do a simple print message to state that this requested URL is for MMS.

The following is the code for this:

sub doMMSC {
   my $class=shift;

   my $length = $ENV{'CONTENT_LENGTH'};

   if ($ENV{'CONTENT_TYPE'} ne "application/vnd.wap.mms-message") {
      &doRedirrect;
      return;
   }

   my $count = read(STDIN, $body, $length);
   if ($count == $length) {
      open ER, ">incoming.mms";
      print ER $body;
      close ER;
   }

}

Detect WAP browser and redirect to different url in Perl

Posted in Perl, WAP by artofmobile

Do you want to have the same url for your Web and Wap broswer? The following is the code to do so in Perl:

#!/usr/local/bin/perl
use CGI;

my $query = new CGI;

my @list=$query->Accept();

my $htmlsite="http://www.artofmobile.com/index.html";
my $wmlsite="http://www.artofmobile.com/index.wml";

my $wml=0;
my $html=0;

foreach (@list) {
   $html=1 if /text\\\\/html/i;
   $wml=1 if  /wap/;
}

print $query->redirect($wmlsite)  if $wml==1;
print $query->redirect($htmlsite) if $html==1;
print $query->redirect($wmlsite);

How to create a WAP push service in Perl

Posted in Perl, WAP by artofmobile

To push a service (or commonly a URL) to a mobile phone from a Push Initiator (PI), normally a web server, WAP defines a protocol to do so in Push Access Protocol (PAP).

This Push Message can be sent either as Service Indication (SI) or Service Loading (SL) kind of service push.

SI signals an event on which the client should get informed when a message is pushed to the mobile device. The user can base of the text message to decide whether to retrieve it or not. SL push service was specified so that a PI can push a URL to the mobile device which is automatically loaded and executed.

The following covers Perl code to do both SI and SL service. The Perl code is the same, you just need to load different raw file to achieve the different kind of Push Message.

#!/usr/local/bin/perl

use LWP::UserAgent;

my $ua = LWP::UserAgent->new;
$ua->agent("MyApp/0.1 ");

my $req = HTTP::Request->new(
   POST => 'http://127.0.0.1:9004/pushservice');

$req->content_type('multipart/related; type="application/xml"; '.
   'boundary="boundary0123456789"');

open(FILE, "raw") or die "$!";
my $content=<FILE>;
close FILE;

$req->content($content);
print "----Header-----\\n";
$hash=$req->headers;
# print $hash->as_string;
print "\\n----Body-------\\n";
print $req->content;

my $res = $ua->request($req);
if ($res) {
   # Check the outcome of the response
   if ($res->is_success) {
      my $ret= $res->content;
      print "$ret\\n";
   } else {
      print "\\n".$res->status_line, "\\n";
      print $res->content;
      print "\\n";
   }
} else {
   print "No pointer assigned\\n";
}

print "\\n\\n";

Input file for SI push (raw_si):

--boundary0123456789
Content-Type: application/xml

<?xml version="1.0"?>
<!DOCTYPE pap PUBLIC "-//WAPFORUM//DTD PAP 1.0//EN"
   "http://www.wapforum.org/DTD/pap_1.0.dtd">
<pap>
<push-message push-id="ABC_1092049461_push">
<address address-value="WAPPUSH=6591234567/TYPE=user@mytelco.artofmobile.com"/>
<quality-of-service delivery-method="unconfirmed" priority="medium" network="gsm"
   network-required="false" bearer="sms" bearer-required="false"/>
</push-message>
</pap>

--boundary0123456789
Content-Type: text/vnd.wap.si

<?xml version="1.0"?>
<!DOCTYPE si PUBLIC "-//WAPFORUM//DTD SI 1.0//EN"
   "http://www.wapforum.org/DTD/si.dtd">
<si>
<indication si-id="61412077449" href="http://www.artofmobile.com/">
Welcome to Art of Mobile!
</indication>
</si>
--boundary0123456789--

Input file for SL push (raw_sl):

--boundary0123456789
Content-Type: application/xml

<?xml version="1.0"?>
<!DOCTYPE pap PUBLIC "-//WAPFORUM//DTD PAP 1.0//EN"
   "http://www.wapforum.org/DTD/pap_1.0.dtd">
<pap>
<push-message push-id="ABC_1092049461_push">
<address address-value="WAPPUSH=6591234567/TYPE=user@mytelco.artofmobile.com"/>
<quality-of-service delivery-method="unconfirmed" priority="medium" network="gsm"
    network-required="false" bearer="sms" bearer-required="false"/>
</push-message>
</pap>

--boundary0123456789
Content-Type: text/vnd.wap.sl

<?xml version="1.0"?>
<!DOCTYPE sl PUBLIC "-//WAPFORUM//DTD SL 1.0//EN"
   "http://www.wapforum.org/DTD/sl.dtd">
<sl href="http://www.artofmobile.com/" action="execute-high" />
--boundary0123456789--
Powered by WordPress. Theme created by Art Of Mobile