
Для тих хто не в курсі, це Юкіхіро Мацумото(Yukihiro Matsumoto) також відомий як Matz, творець мови програмування Ruby.
>>> Подробиці
def save_cookie(cookie_file)
@a.cookie_jar.save_as(cookie_file, format = :cookiestxt)
end
if login_force(id, email, pass)
puts "Successfully Authentication"
save_cookie('cookie.txt')
else
puts "Authentication Error"
end
def login_auto(uid, cookie_file)
@a.cookie_jar.load(cookie_file, format = :cookiestxt)
login_page = @a.get('http://vkontakte.ru/')
return /http:\/\/vkontakte\.ru\/id(\d+)/ === login_page.uri.to_s ? ($1 == uid ? true : false) : false
end
if login_auto(id, 'cookie.txt')
puts "Successfully Authentication"
else
puts "Authentication Error"
end
Це перша стаття на Розробці опублікована мною, проба пера так сказати. Прошу не судити строго. Можливо комусь вона буде цікавою. Ця стаття була написана мною у цьому блозі ще у вересні 2007 року. Хоча і досі не втратила своєї актуальності.
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.google.com/search?q=ruby-ua'))
doc.css('h3.r a.l').each{|link| puts link.content}
doc.xpath('//h3/a[@class="l"]').each {|link| puts link.content}
node.xpath('.//tr[mess(., "mess\d+")]', Class.new {
def mess node_set, regex
node_set.find_all { |node| node['id'] =~ /#{regex}/ }
end
}.new)
<tr id="mess127">[...]</tr>
<tr id="mess128">[...]</tr>
<tr id="mess129">[...]</tr>
# -*- encoding: utf-8 -*-
require 'mechanize' # recommended 0.9.2
@a = WWW::Mechanize.new{|agent|
agent.user_agent_alias = 'Linux Konqueror'
agent.follow_meta_refresh = true
}
# Authorisation by submitting email and password (Login)
#
def login_force(uid, email, pass)
login_page = @a.get('http://vkontakte.ru/login.php')
login_form = login_page.form_with(:name => "login")
login_form.email = email
login_form.pass = pass
user_page = login_form.submit
return /http:\/\/vkontakte\.ru\/id(\d+)/ === user_page.uri.to_s ? ($1 == uid ? true : false) : false
end
# Getting private messages list for current user
#
# Structure of each entry of resulting array
# [0] - message from
# [1] - message date
# [2] - message title
# [3] - message_body
#
def get_messages
url = 'http://vkontakte.ru/mail.php'
messages_page = @a.get(url)
node = Nokogiri::HTML(messages_page.body)
message = node.xpath('.//tr[mess(., "mess\d+")]', Class.new {
def mess node_set, regex
node_set.find_all { |node| node['id'] =~ /#{regex}/ }
end
}.new)
message_from = message.xpath('//td[@class="messageFrom"]/div[@class="name"]/a').map {|link| /\/id(\d+)/.match(link['href'])[1]}
message_date = message.xpath('//td[@class="messageFrom"]/div[@class="date"]').map {|link| link.content}
message_title = message.xpath('//a[@class="new messageSubject"]/span').map {|link| link.content}
message_body = message.xpath('//a[@class="new messageBody"]').map {|link| link.content}
messages = Array.new
messages = [message_from, message_date, message_title, message_body].transpose
return messages
end
id = "12345678"
email = "username@example.com"
pass = "secret"
if login_force(id, email, pass)
puts "Successfully Authentication"
get_messages.each {|message|
puts "[#{message[1]}]: #{message[0]}"
puts message[2]
puts message[3]
puts "==="
}
else
puts "Authentication Error"
end
Вітаємо!
Ваш блог на: http://ruby-ua.blogspot.com/ ідентифіковано як блог із потенційним спамом. Для вирішення цієї проблеми надішліть запит на перегляд, заповнивши форму на http://www.blogger.com/unlock-blog.g?lockedBlogID=4152168096498110483
Якщо ваш блог не буде переглянуто, його буде видалено через 20 днів, а впродовж цього періоду вашим читачам відображатиметься сторінка попередження. Після отримання запиту ми переглянемо ваш блог і розблокуємо його протягом двох робочих днів. Після того як ваш буде розглянуто та буде виявлено, що він не є спамом, блог буде розблоковано, а повідомлення на вашій панелі керування Blogger більше не відображатиметься. Якщо цей блог не належить вам, нічого робити не потрібно. Це не вплине на будь-які інші ваші блоги.
Ми шукаємо спам, використовуючи автоматичний класифікатор. Автоматичне виявлення спаму є неточним, і час від часу блоги, схожі на ваш, позначаються неправильно. Ми просимо вибачення за цю помилку. Однак за допомогою такої системи ми можемо забезпечити більше місця для зберігання, вищу пропускну здатність і більше технічних ресурсів для таких авторів блогів, як ви, а не для спамерів. Для отримання додаткової інформації див. довідку Blogger: http://help.blogger.com/bin/answer.py?answer=42577
Дякуємо за розуміння та допомогу в боротьбі зі спамом.
Із повагою,
команда Blogger
P.S. Ще одне нагадування: якщо ви не надішлете запит на перегляд вашого блогу, через 20 днів його буде видалено. Перейдіть за цим посиланням, щоб надіслати запит на перегляд: http://www.blogger.com/unlock-blog.g?lockedBlogID=4152168096498110483
#!/usr/bin/env ruby1.9
# -*- encoding: utf8 -*-
def quote_for_bash(text)
text = text.dup
text.gsub!( /(?<backslash>\\)/, '\\\\\k<backslash>' )
text.gsub!( /(?<space>\s)/, '\\\\\k<space>' )
text.gsub!( /(?<double-quotes>")/, '\\\\\k<double-quotes>' )
text.gsub!( /(?<single-quotes>')/, '\\\\\k<single-quotes>' )
text.gsub!( /(?<apostrophe>`)/, '\\\\\k<apostrophe>' )
text.gsub!( /(?<brackets>[()<>])/, '\\\\\k<brackets>' )
text.gsub!( /(?<semicolon>;)/, '\\\\\k<semicolon>' )
text.gsub!( /(?<exclamation-mark>!)/, '\\\\\k<exclamation-mark>')
text.gsub!( /(?<ampersand>&)/, '\\\\\k<ampersand>' )
text.gsub!( /(?<dollar-sign>\$)/, '\\\\\k<dollar-sign>' )
text.gsub!( /(?<number-sign>#)/, '\\\\\k<number-sign>' )
text.gsub!( /(?<vertical>\|)/, '\\\\\k<vertical>' )
return text
end
text = %{#<b>$a;say "hello" & |Profit!| - (`1$)</b>}
puts text
#<b>$a;say "hello" & |Profit!| - (`1$)</b>
puts quote_for_bash(text)
\#\<b\>\$a\;say\ \"hello\"\ \&\ \|Profit\!\|\ \ -\ \ \(\`2\$\)\</b\>