{"id":545,"date":"2011-07-28T21:52:00","date_gmt":"2011-07-28T21:52:00","guid":{"rendered":"http:\/\/zensonic.dk\/?p=545"},"modified":"2017-04-09T10:03:43","modified_gmt":"2017-04-09T10:03:43","slug":"small-perl-mechanize-script-to-send-sms-from-danish-telco-provider-bibob","status":"publish","type":"post","link":"https:\/\/zensonic.dk\/?p=545","title":{"rendered":"Small perl mechanize script to send sms from danish telco provider Bibob"},"content":{"rendered":"<p>It can be handy to send sms&#8217;es from scripts. In old time you could do that in Telia by sending a mail to &lt;mobile number&gt;@gsm1800.telia.dk. But that service was closed. Now that I am leaving Telia in favor of Bibob I saw that they had a websms service.<\/p>\n<p>And so I combined their fine web service with my perl scripting skillz. The script can be <a title=\"bibob_sms.pl\" href=\"https:\/\/zensonic.dk\/media\/bibob_sms.pl\">downloaded here<\/a><\/p>\n<p>Do not forget the agreement between you and bibob. You are only allowed to use the websms service (and thus this script) for personal use. I am not to blame if bibob closes your bibob account because you spam-smsed a lot of people.<\/p>\n<p>The code is also included here:<\/p>\n<p>&nbsp;<\/p>\n<div class=\"codesnip-container\" >\n<div class=\"perl codesnip\" style=\"font-family:monospace;\"><span class=\"co1\">#!\/usr\/bin\/perl -w<\/span><\/p>\n<p><span class=\"co1\">#####################################################################<\/span><br \/>\n<span class=\"co1\">#<\/span><br \/>\n<span class=\"co1\"># File:\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 bibob_sms.pl<\/span><br \/>\n<span class=\"co1\"># Type:\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 bot<\/span><br \/>\n<span class=\"co1\"># Description:\u00c2\u00a0 Send an SMS using bibob websms and perl mechanize<\/span><br \/>\n<span class=\"co1\"># Language:\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 Perl<\/span><br \/>\n<span class=\"co1\"># Version:\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 1.0<\/span><br \/>\n<span class=\"co1\"># License:\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 BeerWare &#8211; Thomas S. Iversen wrote this file.<\/span><br \/>\n<span class=\"co1\">#\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 As long as you retain this notice you can<\/span><br \/>\n<span class=\"co1\">#\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 do whatever you want with this stuff.<\/span><br \/>\n<span class=\"co1\">#\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 If we meet some day, and you think this stuff is<\/span><br \/>\n<span class=\"co1\">#\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 worth it, you can buy me a beer in return. Thomas<\/span><br \/>\n<span class=\"co1\">#<\/span><br \/>\n<span class=\"co1\"># History:<\/span><br \/>\n<span class=\"co1\">#\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 1.0 &#8211; 2011.07.28 &#8211; Intial version<\/span><br \/>\n<span class=\"co1\">#<\/span><br \/>\n<span class=\"co1\"># (C) 2011 Thomas S. Iversen (zensonic@zensonic.dk)<\/span><br \/>\n<span class=\"co1\">#<\/span><br \/>\n<span class=\"co1\">#####################################################################<\/span><\/p>\n<p><span class=\"kw2\">use<\/span> strict<span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw2\">use<\/span> WWW<span class=\"sy0\">::<\/span><span class=\"me2\">Mechanize<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw2\">use<\/span> File<span class=\"sy0\">::<\/span><span class=\"me2\">Basename<\/span><span class=\"sy0\">;<\/span><\/p>\n<p><span class=\"co1\"># Variables controlling bot behaviour<\/span><\/p>\n<p><span class=\"kw1\">my<\/span> <span class=\"re0\">$sms_url<\/span><span class=\"sy0\">=<\/span><span class=\"st_h\">&#8216;https:\/\/www.bibob.dk\/bibob\/bibob?cmd=websmssender&#8217;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">my<\/span> <span class=\"re0\">$login_url<\/span><span class=\"sy0\">=<\/span><span class=\"st_h\">&#8216;https:\/\/www.bibob.dk\/bibob\/bibob?cmd=loginFrame&#8217;<\/span><span class=\"sy0\">;<\/span><\/p>\n<p><span class=\"kw1\">my<\/span> <span class=\"re0\">$script<\/span><span class=\"sy0\">=<\/span>basename<span class=\"br0\">&#40;<\/span><span class=\"co3\">$0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<a href=\"http:\/\/perldoc.perl.org\/functions\/die.html\"><span class=\"kw3\">die<\/span><\/a> <span class=\"st0\">&quot;$script &lt;bibob mobile number&gt; &lt;bibob password&gt; &lt;recipeient number&gt; &lt;message&gt;&quot;<\/span> <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$#ARGV<\/span><span class=\"sy0\">+<\/span>1 <span class=\"sy0\">==<\/span> 4<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/p>\n<p><span class=\"kw1\">my<\/span> <span class=\"re0\">$username<\/span><span class=\"sy0\">=<\/span><span class=\"re0\">$ARGV<\/span><span class=\"br0\">&#91;<\/span>0<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">my<\/span> <span class=\"re0\">$password<\/span><span class=\"sy0\">=<\/span><span class=\"re0\">$ARGV<\/span><span class=\"br0\">&#91;<\/span>1<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">my<\/span> <span class=\"re0\">$recipients<\/span><span class=\"sy0\">=<\/span><span class=\"re0\">$ARGV<\/span><span class=\"br0\">&#91;<\/span>2<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">my<\/span> <span class=\"re0\">$message<\/span><span class=\"sy0\">=<\/span><span class=\"re0\">$ARGV<\/span><span class=\"br0\">&#91;<\/span>3<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><\/p>\n<p><span class=\"co1\">#<\/span><br \/>\n<span class=\"co1\"># You should not need to alter anything below this line<\/span><br \/>\n<span class=\"co1\">#<\/span><\/p>\n<p><span class=\"co1\">#<\/span><br \/>\n<span class=\"co1\"># Main code.<\/span><br \/>\n<span class=\"co1\">#<\/span><\/p>\n<p><span class=\"co1\"># Create mechanize instance<\/span><br \/>\n<span class=\"kw1\">my<\/span> <span class=\"re0\">$mech<\/span> <span class=\"sy0\">=<\/span> WWW<span class=\"sy0\">::<\/span><span class=\"me2\">Mechanize<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">new<\/span><span class=\"br0\">&#40;<\/span> autocheck <span class=\"sy0\">=&gt;<\/span> 1 <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">#Create new browser object<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">agent_alias<\/span><span class=\"br0\">&#40;<\/span> <span class=\"st_h\">&#8216;Windows IE 6&#8242;<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">#Create fake headers just in case<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">add_header<\/span><span class=\"br0\">&#40;<\/span> <span class=\"st_h\">&#8216;Accept&#8217;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">&#8216;text\/xml,application\/xml,application\/xhtml\\+xml,text\/html,text\/plain,image\/png&#8217;<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">add_header<\/span><span class=\"br0\">&#40;<\/span> <span class=\"st_h\">&#8216;Accept-Language&#8217;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">&#8216;en-us,en&#8217;<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">add_header<\/span><span class=\"br0\">&#40;<\/span> <span class=\"st_h\">&#8216;Accept-Charset&#8217;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">&#8216;ISO-8859-1,utf-8&#8242;<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">add_header<\/span><span class=\"br0\">&#40;<\/span> <span class=\"st_h\">&#8216;Accept-Language&#8217;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">&#8216;en-us,en&#8217;<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">add_header<\/span><span class=\"br0\">&#40;<\/span> <span class=\"st_h\">&#8216;Keep-Alive&#8217;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">&#8217;300&#8242;<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">add_header<\/span><span class=\"br0\">&#40;<\/span> <span class=\"st_h\">&#8216;Connection&#8217;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">&#8216;keep-alive&#8217;<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/p>\n<p><span class=\"co1\"># Get login page<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">get<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$login_url<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">success<\/span> <span class=\"kw1\">or<\/span> <a href=\"http:\/\/perldoc.perl.org\/functions\/die.html\"><span class=\"kw3\">die<\/span><\/a> <span class=\"st0\">&quot;Can&#8217;t get the login page&quot;<\/span><span class=\"sy0\">;<\/span><\/p>\n<p><span class=\"co1\"># Submit the login form with username (mobilnumber) and password<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">submit_form<\/span><span class=\"br0\">&#40;<\/span>with_fields <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"st_h\">&#8216;loginmsisdn&#8217;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$username<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">&#8216;login-password&#8217;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$password<\/span> <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">success<\/span> <span class=\"kw1\">or<\/span> <a href=\"http:\/\/perldoc.perl.org\/functions\/die.html\"><span class=\"kw3\">die<\/span><\/a> <span class=\"st0\">&quot;Could not login&quot;<\/span><span class=\"sy0\">;<\/span><\/p>\n<p><span class=\"co1\"># Get sms page<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">get<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$sms_url<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">success<\/span> <span class=\"kw1\">or<\/span> <a href=\"http:\/\/perldoc.perl.org\/functions\/die.html\"><span class=\"kw3\">die<\/span><\/a> <span class=\"st0\">&quot;Could not get sms page&quot;<\/span><span class=\"sy0\">;<\/span><\/p>\n<p><span class=\"co1\"># Send sms by submitting sms form<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">submit_form<\/span><span class=\"br0\">&#40;<\/span>with_fields <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"st_h\">&#8216;recipients&#8217;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$recipients<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">&#8216;message&#8217;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$message<\/span> <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">success<\/span> <span class=\"kw1\">or<\/span> <a href=\"http:\/\/perldoc.perl.org\/functions\/die.html\"><span class=\"kw3\">die<\/span><\/a> <span class=\"st0\">&quot;Could not send sms&quot;<\/span><span class=\"sy0\">;<\/span><\/p>\n<p><span class=\"co1\"># Figure out status<\/span><br \/>\n<span class=\"kw1\">my<\/span> <span class=\"re0\">$html<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$mech<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">content<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<a href=\"http:\/\/perldoc.perl.org\/functions\/die.html\"><span class=\"kw3\">die<\/span><\/a> <span class=\"st0\">&quot;Form submitted, but message does not appear to be sent&quot;<\/span> <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span><span class=\"re0\">$html<\/span><span class=\"sy0\">=~\/<\/span>Beskeden blev afsendt<span class=\"sy0\">\/<\/span>ig<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/p>\n<p><a href=\"http:\/\/perldoc.perl.org\/functions\/exit.html\"><span class=\"kw3\">exit<\/span><\/a> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>It can be handy to send sms&#8217;es from scripts. In old time you could do that in Telia by sending a mail to &lt;mobile number&gt;@gsm1800.telia.dk. But that service was closed. Now that I am leaving Telia in favor of Bibob I saw that they had a websms service. And so I combined their fine web [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,8,5,6],"tags":[],"class_list":["post-545","post","type-post","status-publish","format-standard","hentry","category-fun-projects","category-mobile-phone","category-personal-ramblings","category-unix"],"_links":{"self":[{"href":"https:\/\/zensonic.dk\/index.php?rest_route=\/wp\/v2\/posts\/545"}],"collection":[{"href":"https:\/\/zensonic.dk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zensonic.dk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zensonic.dk\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/zensonic.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=545"}],"version-history":[{"count":0,"href":"https:\/\/zensonic.dk\/index.php?rest_route=\/wp\/v2\/posts\/545\/revisions"}],"wp:attachment":[{"href":"https:\/\/zensonic.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=545"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zensonic.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=545"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zensonic.dk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}