{"id":638,"date":"2012-07-26T08:51:00","date_gmt":"2012-07-26T08:51:00","guid":{"rendered":"http:\/\/zensonic.dk\/?p=638"},"modified":"2017-04-09T10:03:04","modified_gmt":"2017-04-09T10:03:04","slug":"version-2-of-small-perl-mechanize-script-to-send-sms-from-danish-telco-provider-bibob","status":"publish","type":"post","link":"https:\/\/zensonic.dk\/?p=638","title":{"rendered":"Version 2 of small perl mechanize script to send sms from danish telco provider Bibob"},"content":{"rendered":"<p>A year ago <a href=\"https:\/\/zensonic.dk\/?p=545\">I wrote a small perl Mechanize script to send sms<\/a> from the command line (very useful for scripts) utilizing the web-sms service you get as a Bibob customer.<\/p>\n<p>Now a year later I actually found some use for it, but it didn&#8217;t work anymore due to the fact that Bibob had changed their website since then. And not just the graphics and layout, but the whole shebang.<\/p>\n<p>I have made some very small changes to the perl script to make it work again and I appriciate the versatility of perl and that the Bibob webmasters obviously thought a great deal about the upgrade.<\/p>\n<p>The new code can be <a href=\"https:\/\/zensonic.dk\/media\/bibob_sms_v2.pl\">downloaded here<\/a>, hbut is also included verbatim in this post<\/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: &nbsp; &nbsp; &nbsp; &nbsp; bibob_sms.pl<\/span><br \/>\n<span class=\"co1\"># Type: &nbsp; &nbsp; &nbsp; &nbsp; bot<\/span><br \/>\n<span class=\"co1\"># Description: &nbsp;Send an SMS using bibob websms and perl mechanize<\/span><br \/>\n<span class=\"co1\"># Language: &nbsp; &nbsp; Perl<\/span><br \/>\n<span class=\"co1\"># Version: &nbsp; &nbsp; &nbsp;2.0<\/span><br \/>\n<span class=\"co1\"># License: &nbsp; &nbsp; &nbsp;BeerWare &#8211; Thomas S. Iversen wrote this file. As long as you <\/span><br \/>\n<span class=\"co1\"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retain this notice you can do whatever you want with this <\/span><br \/>\n<span class=\"co1\"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stuff. If we meet some day, and you think this stuff is worth<\/span><br \/>\n<span class=\"co1\"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; it, you can buy me a beer in return. Thomas<\/span><br \/>\n<span class=\"co1\"># History:<\/span><br \/>\n<span class=\"co1\"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.0 &#8211; 2011.07.26 &#8211; New version due to total bibob.dk relayout<\/span><br \/>\n<span class=\"co1\"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.0 &#8211; 2011.07.28 &#8211; Intial version<\/span><br \/>\n<span class=\"co1\">#<\/span><br \/>\n<span class=\"co1\"># (C) 2011,2012 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\/min-konto\/web-sms&#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\/&#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>\n<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;phoneNumber&#8217;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"re0\">$username<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">&#8216;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><br \/>\n<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>A year ago I wrote a small perl Mechanize script to send sms from the command line (very useful for scripts) utilizing the web-sms service you get as a Bibob customer. Now a year later I actually found some use for it, but it didn&#8217;t work anymore due to the fact that Bibob had changed [&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,5,6],"tags":[],"class_list":["post-638","post","type-post","status-publish","format-standard","hentry","category-fun-projects","category-personal-ramblings","category-unix"],"_links":{"self":[{"href":"https:\/\/zensonic.dk\/index.php?rest_route=\/wp\/v2\/posts\/638"}],"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=638"}],"version-history":[{"count":0,"href":"https:\/\/zensonic.dk\/index.php?rest_route=\/wp\/v2\/posts\/638\/revisions"}],"wp:attachment":[{"href":"https:\/\/zensonic.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=638"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zensonic.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=638"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zensonic.dk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}