Kiedy korzystasz z biblioteki open-uri, wystarczy, że wpiszesz instrukcję open() z adresem URL, a skrypt zwróci odpowiednią stronę WWW...

Linki


» Dzieci to nie książeczki do kolorowania. Nie da się wypełnić ich naszymi ulubionymi kolorami.
»
wszystkim, dał mu przeto taką kurę, na którą, kiedy zawołać: – Kurko, kurko! znieś mi złote jajko! – w istocie złote znosiła jajko...
»
16|98|Kiedy recytujesz Koran, to szukaj ucieczki u Boga przed szatanem przekletym!16|99|Nie ma on bowiem zadnej wladzy nad tymi, którzy uwierzyli i którzy ufaja...
»
TPC /IC:\KATALOG PROGRAM /$A+/$B+i odpowiadaTPC -IC:\KATALOG PROGRAM -$A+ -$B+***; * Moemy take przy wypisywaniu opcji uy zapisu skrconego, kt* *t...
»
Przez większą część następnego miesiąca — czyli od końca września, kiedy ucie- kłyśmy, do końca października — moja pani wahała się...
»
3|51|Zaprawde, Bóg jest moim i waszym Panem! Przeto czcijcie Go! To jest droga prosta!"3|52|A kiedy Jezus poczul w nich niewiare, powiedzial: "Kto jest moim...
»
"PPP (point-to-point) support"Tutaj odpowiedz yes, bedziesz mol laczyc sie za pomoca PPP z providerem...
»
Tak zatem, kiedy następna grupa żałobników weszła do kościoła, myśli inspektora Sloana odbiegły jeszcze dalej w przeszłość niż myśli Cynthii Paterson...
»
Niezawiadomienie przez sąd o terminie rozprawy oskarżonego, kiedy obecność jego nie jest obowiązkowa, jest uchybieniem naruszającym jego prawa do obrony (art...
»
Trudno było pojąć opowieść na wpół szalonego ślepca, lecz kiedy Guthwulf mówił, Simon wyobraził sobie, jak hrabia wędruje tunelami, kuszony przez coś, co...
»
Dzwoniono na Angelus, kiedy zjawił się obok mnie wieśniak włoski na ośle swoim i obadwa zdjęliśmy kapelusze, po krótkiej modlitwie wraz przez toż uczestnictwo w...

Dzieci to nie książeczki do kolorowania. Nie da się wypełnić ich naszymi ulubionymi kolorami.

Pobieranie stron za pomocą tej metody jest tak proste, że zawsze kiedy jej używam, na mojej twarzy gości uśmiech.
Po metodzie open następuje blok, który przetwarza kod źródłowy zwrócony przez serwer sieciowy. Ponieważ chcemy pobrać specyficzny wiersz (definicję słowa), w następnym bloku skrypt dzieli kod źródłowy na wiersze. Jeśli serwis Dictionary.com nie znajdzie danego słowa, wyświetli komunikat No results found.
Gdy skrypt w czasie analizowania kodu źródłowego wykryje podany wyraz, ale już nie jego definicję, wyświetli wskazówkę w postaci prośby o sprawdzenie pisowni słowa, a następnie zakończy działanie . Jeżeli jednak definicja jest dostępna, skrypt stara się wyodrębnić ją z kodu źródłowego. Do pobrania jej tekstu służy wyrażenie regularne.
Ważną częścią użytego w skrypcie wyrażenia regularnego jest cyfra 1. Witryna Dictionary.com używa jej jako wskaźnika pierwszej definicji, którą program ma pobrać. Użycie w wyrażeniu regularnym nawiasów umożliwia skryptowi pogrupo-wanie określonych fragmentów dowolnego wiersza, które pasują do wyrażenia .
Te grupy są zapisywane w zmiennych o nazwach od $1 do $n. Wiersz pod wyra-
żeniem regularnym wyświetla definicję. Jeśli program nie znajdzie w kodzie źródłowym ani definicji, ani tekstu No results found, zwróci inny komunikat, który S e r we r y i w y d o b y w a ni e da n yc h
145
informuje użytkownika o tym, że nie można znaleźć wyjaśnienia słowa . Jeśli w czasie przetwarzania definicji pojawią się problemy, program uruchomi blok rescue i poinformuje, jaki błąd wystąpił.
Modyfikowanie skryptu
Jednym ze sposobów na zmodyfikowanie skryptu jest dodanie obsługi pośrednika między użytkownikiem a żądaniem do serwera sieciowego. Jeśli korzystasz z takiego pośrednika, musisz zastosować to rozwiązanie. Jeżeli interesuje Cię ruch w sieci generowany przez skrypt w języku Ruby, pośrednik pomoże Ci uzyskać dodatkowe informacje. Aby dowiedzieć się, jak je uzyskać, zajrzyj do doku-mentacji biblioteki open-uri. Potrzebna składnia wygląda następująco: open(url,
:proxy => "http://127.0.0.1:8080"). Zwykle nie korzystam z pośrednika przy przeglądaniu sieci WWW, jednak jeśli w trakcie tworzenia stron wykryję błędy, często pomocne jest przyjrzenie się ruchowi w sieci.
Do diagnozowania problemów używam bezpłatnego sieciowego pośrednika
Paros ( http://www.parosproxy.org/). Narzędzie to należy zainstalować lokalnie na własnej maszynie, a następnie można obserwować zgłaszane żądania sieciowe i odbierane odpowiedzi. Dzięki wykorzystaniu przy programowaniu narzędzia Paros zaoszczędziłem sobie wielu godzin diagnozowania. Jestem bardzo przywią-
zany do tego pośrednika, jednak istnieje też wiele innych podobnych programów, dlatego warto poszukać czegoś dla siebie.
43. Automatyczne wysyłanie SMS-ów
sms.rb Ten skrypt wysyła wiadomość SMS pod podany numer telefonu komórkowego.
Ostrzegam przed nadużywaniem tej funkcji, jednak musisz wypróbować ten pro-gram1. Skrypt ma automatyzować korzystanie z witryny, która służy do wysyłania wiadomości SMS. Zamiast pobierać statyczną zawartość strony, skrypt ten auto-matyzuje wypełnianie i przesyłanie formularza.
Kod
require 'win32ole'
ie = WIN32OLE.new('InternetExplorer.Application')
ie.navigate("http://toolbar.google.com/send/sms/index.php")
ie.visible = true
sleep 1 until ie.readyState() == 4
ie.document.all["mobile_user_id"].value ="5712013623"
1 Serwis użyty w tym skrypcie zakończył działalność, jednak za pomocą tej samej techniki możesz przesyłać wiadomości w innych bramkach SMS — przyp. tłum.
146 Rozdział 7
ie.document.all["carrier"].value ="TMOBILE"
ie.document.all["subject"].value ="***Ruby rządzi***"
ie.document.all.tags("textarea").each do |i|
i.value = "Dzięki za dobrą robotę, Matz!"
end
ie.document.all.send_button.click
Uruchamianie kodu
Aby uruchomić ten skrypt, wpisz następujące polecenie:
ruby sms.rb
Dane wyjściowe
Ten skrypt nie generuje żadnych danych, jednak jeśli udanie zakończy działanie, telefon o podanym numerze powiadomi Cię o odebraniu wiadomości. W przykładzie użyłem fikcyjnych danych, jednak możesz je zmienić, aby wypróbować program.
Jak działa ten skrypt?
Jeśli korzystasz z komputera z systemem Windows i nigdy nie używałeś biblioteki win32ole, powinieneś poświęcić trochę czasu na jej opanowanie, ponieważ auto-matyzowanie wykonywania zadań w tym systemie jest ciekawe i daje dużo satysfak-cji. Możesz nie tylko manipulować przeglądarką Internet Explorer, co ilustruje ten skrypt, ale też dowolnym produktem z pakietu Microsoft Office i innymi aplikacjami systemu Windows.
UWAGA Dostępnych jest też kilka bibliotek przeznaczonych do automatyzacji witryn. Narzę-
dzia te są niezwykle przydatne do testów regresji i jakości aplikacji sieciowych.
Jedną z popularnych bibliotek tego typu jest Watir. Szczegółowe informacje na jej temat znajdziesz na stronie http://wtr.rubyforge.org/ .
Skrypt tworzy nowy obiekt typu win32ole na podstawie argumentu w postaci uchwytu przeglądarki IE . Uchwyt ten informuje bibliotekę win32ole, którą aplikację ma kontrolować. Przy użyciu wbudowanej w przeglądarkę IE metody navigate skrypt przechodzi pod określony adres URL — http://toolbar.google.com/
send/sms/index.php . Następny wiersz ustawia atrybut okna przeglądarki. Jeśli nie chcesz widzieć, jak skrypt wykonuje swe zadania, możesz użyć w tym wierszu wartości false, a okno przeglądarki będzie działać w tle. Wtedy jego obecność będziesz mógł wykryć tylko na liście zadań. Ponieważ lubię widzieć działanie programu, ustawiłem wspomniany atrybut na true. Aplikacja Internet Explorer pojawi się i zniknie w krótkim czasie, dlatego bacznie przyglądaj się ekranowi.
S e r we r y i w y d o b y w a ni e da n yc h
147
Następnie skrypt uruchamia pętlę, która warunkowo wczytuje stronę. Jak
pewnie wiesz, strony witryn nie pojawiają się natychmiast. Aby skrypt nie przesłał informacji przedwcześnie, należy „uśpić” program na sekundę, a następnie sprawdzić, czy kod readyState ma właściwą wartość (4) . Przedwczesne działania nigdy nie są korzystne, a w tym przypadku spowodują, że skrypt przestanie działać.
Po zakończeniu wczytywania dokumentu przez przeglądarkę IE skrypt może wypełnić odpowiednie pola.
Program wykrywa odpowiednie pola na podstawie nazw atrybutów. Jeśli zaj-rzysz do kodu źródłowego witryny, znajdziesz obiekty o nazwach mobile_user_id, carrier, subject i tak dalej. Te informacje służą do określenia, gdzie skrypt ma zapisać poszczególne dane wejściowe . Większość kodu HTML z omawianej

Powered by MyScript