Łatwiejsze drukowanie z klp.pl
07 września 2008Serwis klp.pl znają chyba wszyscy uczniowie. Portal nie raz ratował życie mojej klasie (liceum, mat-fiz-inf :p). Posiada jednak jedną wadę - nie można wydrukować na raz całego artykułu tylko trzeba odwiedzić każdą strone po kolei.
Tak było do dziś! Postanowiłem umilić sobie i innym drukowanie, a wynikiem tego postanowienia jest 40 linijek kodu w Ruby. Smacznego.
Sposób użycia:
ruby klp.rb http://ludzie-bezdomni.klp.pl/a-8239.html > ludzie-bezdomni.html
Dla zainteresowanych jeszcze którki opis. Program pobiera wersje do druku (pierwszą stronę) sprawdza ilość stron, pobiera je wszystkie i łączy.
require 'net/http' require 'iconv' class Klp def initialize(url) @http = Net::HTTP.new('klp.pl') match = url.match(%r[http://(.+).klp.pl/a-(\d+).html]) @name = match[1] @id = match[2] @content = [] end def fetch_page(page) resp, body = @http.get "/doda.php?akcja=druk&ida=#{@id}&strona=#{page}" Iconv.iconv('utf-8', 'iso-8859-2', body).first end def parse_content(body) body[%r[</h1>(.+)strona: ]um, 1] end def join page = fetch_page(1) @title = page[%r[<h1>(.+?)</h1>], 1] pages_count = page.scan(%r[<a href=\?akcja=druk&ida=\d+&strona=(\d+)>]u).flatten.map {|e| e.to_i}.max @content << parse_content(page) if pages_count > 1 (2..pages_count).each do |p| @content << parse_content(fetch_page(p)) end end puts @title puts "----" puts @content end end Klp.new(ARGV[0]).join
P.S. Czytajcie lektury!
P.S. 2 Wersja online: http://radiowezel.net