Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти

 
Расширенный поиск

800737 Сообщений в 11248 Тем- от 88235 Пользователей - Последний пользователь: elait

25 Август 2019, 09:03:43
ADSL.Kirov.RuСообществаПрограммирование (Модератор: Ivanidze)Тема: [request] автооповещалка о результатах егэ
Страниц: [1]   Вниз
Печать
Автор Тема: [request] автооповещалка о результатах егэ  (Прочитано 501 раз)
sofmu
Пользователь
**
Пол: Мужской
Сообщений: 53


« : 30 Май 2010, 20:04:00 »

В общем-то, результаты вроде как вывешиваются на сайт edu-43.kirov.ru.
Рабочий код уже есть, только вот он не user-friendly нифига. Если кому не влом, перепишите на C# (или что там сейчас модно под win), прикрутив нормальный интерфейс. (Увы, я не мастер GUI'ню всякую писать...)

Суть в том, что программа периодически прётся на сайт (мне для этого cron'а хватает) и, если есть изменения, оповещает юзера смской (используется бесплатно предоставляемая операторами услуга email2sms).

(Ruby 1.9)
Код:
<?php # этой строки нет, чисто для подсветки синтаксиса, а то читать невозможно
# coding: utf-8
require 'rubygems'
require 'httpclient'
require 'iconv'
require 'xml'
require 'net/smtp'


# --- CONFIGURATION ---
PASSPORT_SER '3305'   # серия паспорта 
PASSPORT_NUM 'xxxxxx' # и его номер
PROPUSK_NUM  'xxxxx'  # номер пропуска
SMTP_SERVER  'smtp.yandex.ru' # mail.ru почти всё за спам считает, а с yandex всё ОК
MAIL_DOMAIN  'yandex.ru'    
USERNAME     'username'
PASSWORD     'password'
EMAIL_FROM   'username.yandex.ru'
EMAIL_TO     '7962xxxxxxx@sms.beemail.ru' # для подключения почты на Билайне надо
# позвонить на 06849909 (это бесплатно, через минуту-две придёт смска)
# ---------------------

def send_email(opts={})
  
opts[:body]     ||= ""
  
opts[:port]     ||= 25
  opts
[:server]   ||= SMTP_SERVER
  opts
[:domain]   ||= MAIL_DOMAIN
  opts
[:username] ||= USERNAME
  opts
[:password] ||= PASSWORD
  opts
[:from]     ||= EMAIL_FROM
  opts
[:to]       ||= EMAIL_TO
  opts
[:subject]  ||= "EGE results"
 
  
msg = <<END_OF_MESSAGE
From
#{opts[:from]}
To#{opts[:to]}
Subject#{opts[:subject]}
 
#{opts[:body]}
END_OF_MESSAGE

  Net
::SMTP.start(opts[:server],
                  
opts[:port],
                  
opts[:domain],
                  
opts[:username],
                  
opts[:password]
                  ) do |
smtp|
    
smtp.send_message msgopts[:from], opts[:to]
  
end
end


def get_results_page
  c 
HTTPClient.new
  
header = { 'Referer' => 'http://edu-43.kirov.ru/to_pupils/'
             
'User-Agent' => 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.9) Gecko/20100414 Iceweasel/3.5.9 (like Firefox/3.5.9)' ,
             
'Accept' => 'text/html',
             }

  
data = { 'passport_ser' => PASSPORT_SER,
           
'passport_num' => PASSPORT_NUM,
           
'propusk_num'  => PROPUSK_NUM,
           
'sv'           => Iconv.iconv('cp1251','utf-8','Запрос')
         }

  
message c.post('http://edu-43.kirov.ru/to_pupils/pupils_statistics/'dataheader)
  
page Iconv.conv('utf-8''cp1251'message.content)
  
page page.gsub( /<spacer[^>]*>[^<]*</spacer>/, "")
  
File.open('page.html',"w"){ |filefile.puts page }
end

def last_message
  
if File.exists"last_message.txt"
    
return IO.read "last_message.txt"
  
else
    return 
""
  
end
end

def new_message
  parser 
XML::HTMLParser.string((IO.read 'page.html'),:encoding => XML::Encoding::UTF_8)
  
doc parser.parse
  obj 
doc.find('//tr/td/font[@color="#cc0000"]')
  
content obj.first.content.force_encoding("UTF-8")
  if (
not obj.empty?) and (content.index "не найден")
    return 
""
  
else
    return 
parse_document(doc)
  
end
end

def parse_document
(doc)
  
# Поскольку пока что я понятия не имею, как выглядит страница
  # с результатами, просто оповестим об их появлении.
  # Понятно, что здесь надо распарсить страницу и выслать уже
  # баллы за предмет(ы).
  
return "Please visit edu-43.kirov.ru to view your results!"
end

get_results_page
()
msg new_message()
if 
msg != last_message()
  
send_email({:body => msg })
  
File.open("last_message.txt","w"){ |ff.puts msg }
end
Записан
Страниц: [1]   Вверх
Печать
ADSL.Kirov.RuСообществаПрограммирование (Модератор: Ivanidze)Тема: [request] автооповещалка о результатах егэ
Перейти в: