SMS senden leicht gemacht (Orange)
Gibt es was mühsameres, als die unsäglichen Browser-SMS-Versende-Dienste unserer Mobilfunkanbieter? Naja, wahrscheinlich gibt es schlimmeres, aber verbessern kann man es ja trotzdem. Das Ziel ist, möglichst einfach SMS zu versenden, also schreiben wir doch ein Script, welches als Parameter Nummer und Text entgegennimmt und versendet.
Ist eigentlich ganz einfach, Mechanize mimt einen Browser und macht genau das, was auch ein Mensch tun würde, also anmelden, Formularfelder ausfüllen und abschicken:
#!/usr/bin/ruby require 'mechanize' username = 'mirkostocker' password = 'XXXXXXXXXXXX' number = ARGV.shift message = ARGV * " " if message.length > 144 || message.length < 1 $stderr.puts "Nachricht zu lang oder zu kurz.." exit 1 end def find_form_with_field(page, fieldname) page.forms.each do |form| if form.fields.find{|f| f.name == fieldname} yield form end end end WWW::Mechanize.new do |agent| agent.get('https://www.orange.ch/footer/login') do |page| find_form_with_field(page, 'username') do |f| f.username = username f.password = password f.submit end end agent.get('https://www.orange.ch/myorange/sms') do |page| find_form_with_field(page, 'messageInput') do |f| f.destinationNumberInput = number f.messageInput = message f.wui_target_id = 'sendButton' f.wui_event_id = 'onclick' f.submit end end end
find_form_with_field musste ich schreiben, da die Formulare keine Namen besitzen, und fragt mich nicht, weshalb ich wui_target_id und wui_event_id setzen muss, im echten Browser wird das per Javascript gemacht und ist anscheinend wichtig. Hat auch gleich die Projektdauer um 50% verlängert, auf rund 1.5 Stunden.
So, und wer kümmert sich um die Swisscom und Sunrise?
Guido: Wie du siehst habe ich einen netten Weg gefunden, bunten Code zu bloggen, der beste Editor der Welt hat nämlich eine TOhtml Funktion.


