середа, 16 березня 2011 р.

Встановлення QtRuby з Ruby 1.9.2 на Ubuntu

Я використовую(і вам рекомендую) RVM (інструкція по встановленню на Ubuntu) і останню стабільну версію Ruby 1.9.2p180.

Спочатку встановлюємо необхідні пакети з репозиторію:
$ sudo apt-get install cmake libqt4-dev

Тоді переходимо до встановлення самого QtRuby:
$ sudo gem install qtbindings

Проект qtbindings - це набір "прив’язок" графічного фреймворку Qt4 для мови програмування Ruby, виконаний у вигляді пакету gem. У цілому він є перепакуванням підмножини Qt4 прив’язок до Ruby у формат, який добре піддається пакуванню в gem, що дозволяє легко встановити Qt "прив’язки" для Ruby на всіх платформах використовуючи RubyGems, і для забезпечення кращої сумісності між платформами.

Щоб побачити версію QtRuby, виконайте наступну команда:
$ rbqtapi -v
QtRuby 2.0.5 using Qt-4.7.0

Приклади додатків на QtRuby: /usr/local/rvm/rubies/ruby-1.9.2-p180/lib/ruby/gems/1.9/gems/qtbindings-4.6.3.2/examples

вівторок, 15 березня 2011 р.

Nokogiri і XPath для розбору HTML таблиць

Вже третій місяць користуюся "Домашнім Інтернетом" від "Київстар". Система "Мій Київстар" дає змогу самостійно керувати своїми витратами в режимі онлайн. І звісно ж це вже потрібно автоматизувати. Для цього я буду використовувати наступні інструменти: Ruby, Mechanize, Nokogiri.

Аторизація на сайті Мій Київстар:

# -*- encoding: utf-8 -*-

require 'mechanize'
require 'nokogiri'

login    = '0010390***'
password = '***'

agent = Mechanize.new
agent.follow_meta_refresh = true

page = agent.get('https://my.kyivstar.ua/tbmb/login/perform.do')

login_form = page.form_with(:name => 'loginForm')
login_form.user     = login
login_form.password = password
show_page = agent.submit(login_form)

if show_page.uri.to_s == "https://my.kyivstar.ua/tbmb/disclaimer/show.do"
  puts "Login successful"
else
  puts "Login failure"
  exit
end

show_page_html = show_page.body.encode('utf-8', 'cp1251')

Розбір HTML таблиці використовуючи XPath:

doc = Nokogiri::HTML(show_page_html)
details = doc.search("//td[@id='mainContentBlock']/table/tr").collect do |row|
  title = row.at('td[1]').text.strip rescue ''
  data  = row.at('td[2]').text.strip.gsub("\n", " ") rescue ''
  {
    :title => title,
    :data  => data
  }
end

Вивід розпарсеної таблиці і поточного балансу:

pp details

balance = details.find {|e| e[:title] == "Поточний баланс:"}
puts "#{balance[:title]} #{balance[:data]}"

[{:title=>"Прізвище, ім'я, по-батькові:", :data=>"Іван Іванович"},
 {:title=>"Номер договору:", :data=>"0010390***"},
 {:title=>"Адреса підключення:", :data=>", Україна, Тернопіль"},
 {:title=>"Номер мобільного телефону:", :data=>"+38063*******"},
 {:title=>"Адреса електронної пошти:", :data=>"ivan.ivanovichlinux@gmail.com"},
 {:title=>nil, :data=>"Активуйте Вашу електронну адресу"},
 {:title=>nil, :data=>"Надіслати код активації"},
 {:title=>nil, :data=>nil},
 {:title=>"Особовий рахунок:", :data=>"0010390***"},
 {:title=>"Статус особового рахунка:", :data=>"Діючий"},
 {:title=>"Поточний баланс:", :data=>"55.09 грн."},
 {:title=>"Поріг відключення:", :data=>"0.0 грн."},
 {:title=>"Тарифний пакет:", :data=>"Турбо"},
 {:title=>"Статус послуги:", :data=>"Підключена"},
 {:title=>"Дата підключення:", :data=>"18.12.2010"}]
Поточний баланс: 55.09 грн.

неділя, 13 березня 2011 р.

Наскільки добре ви знаєте Ruby?

Відповідь на це питання можна отримати скориставшись сайтом rexaminator.com - онлайн симулятор іспиту, який допоможе вам перевірити і поліпшити свої знання мови програмування Ruby.