Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 18

Необходимо получить последнии транзакции WEB интерфейса :(((

19.12.2011, 19:27. Показов 5250. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста.
Не могу разобраться как написать shell-программу :(((
Задание звучит так: Используя WEB интерфейс yandex почта получить список последних 5ти транзакций (т.е. последние 5 писем).

Зарание спасибо :)))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.12.2011, 19:27
Ответы с готовыми решениями:

Получить данные по каждой транзакции
написал программу по данному заданию: Вычислительная система состоит из четырех компьютеров. Задания на обработку поступают в среднем...

Получить из строк новую строку, содержащюю первые N1 символов строки S1 и последнии N2 символов строки S2
помогите написать программу на двух разных классах! 2) Даны целые положительные числа N1 и N2 и строки S1 и S2. Получить из этих строк...

Получить ответ от успешного завершения транзакции
Используя Begin ***code** commit В дальнейшем хочу получить ответ, завершилась операция удачно или нет, операясь на не создам...

34
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 18
13.01.2012, 21:42  [ТС]
Студворк — интернет-сервис помощи студентам
ну мне надо список последних пяти писем, сейчас попробую посмотреть bokunopico

Добавлено через 30 минут
bokunopico, спасибо большое это наверно то что мне и надо было, хотя думала что не так все это выглядеть будет можно комнтарии еще, а то я в целом понимаю, что происходит, но некоторые команды не знаю, т.к. с этим не встречалась

Добавлено через 7 часов 12 минут
посмотрите пожалуйста правильность коментариев, которые я сделала и дополните пожалуйста то-что я не очень поняла
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import urllib.request       #подключаем необходимые библиотеки
import http.cookiejar
import re
 
server = 'http://passport.yandex.ru/passport?mode=auth'     #адрес yandex:паспорт
user = 'Lenusik-kam@yandex.ru'              #свой логин            
password = 'B1a2L3et'                   #пароль
 
r = urllib.request.Request(server, {'method': 'post'})          
r.add_data(urllib.parse.urlencode({'login': user,
                                   'passwd': password,
                                   'from': 'mail'}).encode('utf-8'))
 
cj = http.cookiejar.CookieJar()
 
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj),
                                     urllib.request.HTTPRedirectHandler,
                                     urllib.request.HTTPHandler,
                                     urllib.request.HTTPSHandler)
urllib.request.install_opener(opener)
 
with urllib.request.urlopen(r) as u, \
     open('file.html', 'w', encoding='utf-8') as f:         #открываем файл file.html для записи
    s = u.read()                        #в s записываем полученную страницу паспарта
    print(s.decode('utf-8'), file=f)                #в файл file.html записываем s
    print('ok')                     #печатаем ok для проверки
        
r = urllib.request.Request('https://mail.yandex.ru/lite/inbox') #заходим на почту в легкой версии
with urllib.request.urlopen(r) as u, \
     open('file2.html', 'w', encoding='utf-8') as f2:       #открываем файл file2.html для записи
    s = u.read()                        #в s записываем  полученную страницу входящих писем 
    print(s.decode('utf-8'), file=f2)               #в файл file2.html записываем s
    print('ok')                     #печатаем ok для проверки
 
pattern = re.compile(r'class="b-form-checkbox" value="(\d*)"')
result = pattern.finditer(s.decode('utf-8'))
onetofive = range(1,6)
for i in onetofive:                     #цикл для чтения писем от 1 до 6 т.к нам нужно последние 5 писам
        match = result.__next__()
        r = urllib.request.Request('https://mail.yandex.ru/lite/message/' + (match).groups()[0])    #заходим в i-е письмо
        with urllib.request.urlopen(r) as u, \
             open('message%d.html' % i, 'w', encoding='utf-8') as tmp:  #открываем файл message(номер i).html для записи
                s = u.read()                        #в s записываем полученную страницу i-го письма
                print(s.decode('utf-8'), file=tmp)              #в файл message(номер i).html записываем s 
                print('message %d received' % i)                #печатаем message (номер i) received для проверки
0
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
14.01.2012, 04:32
accept объяснит (наверное, и доделает даже ), я не так хорошо знаю Python, как он. Мне больше интересно, почему вы не используете wget для этих же целей?
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
 
wget --keep-session-cookies \
     --save-cookies=cookies.txt \
     --post-data='login=Lenusik-kam&passwd=B1a2L3et' \
     --output-document='file1.html' \
     'http://passport.yandex.ru/passport?mode=auth'
 
wget --keep-session-cookies \
     --load-cookies=cookies.txt \
     --no-check-certificate \
     --output-document='file2.html' \
     'https://mail.yandex.ru/lite/inbox'
В файле file2.html будут входящие сообщения, разумеется, с кучей тегов, но номера транзакций, которые я вытаскивал в Пайтоне через регулярные выражения, здесь также можно вытащить grep-ом (тем же механизмом). Почему бы не так?

Добавлено через 13 минут
Наверное, я всё же неправильно понимаю задание.
1
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.01.2012, 07:34
ну вот, с curl'ом то же самое сработает, скорее всего
разницы, конечно, нет - главное, скачать

Цитата Сообщение от bokunopico Посмотреть сообщение
я не так хорошо знаю Python, как он
регулярные я ещё не учил
там есть модуль html, который может из тегов доставать

Добавлено через 8 минут
раньше на yandex'е писали, что вход осуществлён неправильно
сейчас, видно, исправили
и ящик, вроде, не открывался
0
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
14.01.2012, 10:05
Делает то же самое, что и код на Python, только на этот раз имеет хоть какое-то отношение к shell.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash
 
wget --keep-session-cookies \
     --save-cookies=cookies.txt \
     --post-data='login=Lenusik-kam&passwd=B1a2L3et' \
     --output-document='file1.html' \
     'http://passport.yandex.ru/passport?mode=auth'
 
wget --keep-session-cookies \
     --load-cookies=cookies.txt \
     --no-check-certificate \
     --output-document='file2.html' \
     'https://mail.yandex.ru/lite/inbox'
 
messages=( $(grep --perl-regexp --only-matching \
                 '(?<=class="b-form-checkbox" value=")\d+(?=")' file2.html) )
count=${#messages[@]}
if [ $count -gt 5 ]; then
    count=5
fi
 
for i in `seq 1 $count`;
do
    wget --keep-session-cookies \
         --load-cookies=cookies.txt \
         --no-check-certificate \
         --output-document="message$i.html" \
         "https://mail.yandex.ru/lite/message/${messages[$((i-1))]}"
done
Ещё бы сами сообщения распарсить, выделив тему письма, отправителя, содержание, было бы отлично.
1
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 18
14.01.2012, 10:14  [ТС]
при первом варианте там где только wget выдает:

ubuntu@ubuntu:~$ bash /22
--2012-01-14 17:02:23-- http://passport.yandex.ru/passport?mode=auth
Преобразование адреса passport.yandex.ru... ошибка: Имя или служба не известны.
wget: не могу получить адрес хоста «passport.yandex.ru»
--2012-01-14 17:02:23-- https://mail.yandex.ru/lite/inbox
Преобразование адреса mail.yandex.ru... ошибка: Имя или служба не известны.
wget: не могу получить адрес хоста «mail.yandex.ru»
как-то так
0
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
14.01.2012, 10:22
Прокси, например.
0
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 18
14.01.2012, 14:14  [ТС]
я поняла в чем проблема была

Добавлено через 3 часа 42 минуты
можно объяснить:
Python
1
2
messages=( $(grep --perl-regexp --only-matching \
                                 '(?<=class="b-form-checkbox" value=")\d+(?=")' file2.html)
и еще `seq 1 $count`; почему так, а не просто $count???
0
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
14.01.2012, 20:19
Я не очень хорошо умею объяснять.

Предположим, у нас есть текст такого содержания:
Code
1
2
3
4
Elena likes bash!
Elena likes Ubuntu!
Elena hates Windows!
Elena likes Python!
Сохраним в файл 1.txt и выведем лишь те строки, в которых Елена признаётся в симпатии к чему-нибудь.
Code
1
2
3
4
$ grep likes 1.txt
Elena likes bash!
Elena likes Ubuntu!
Elena likes Python!
Для этого мы лишь искали подстроку "likes" в файле. Попытаемся добавить хоть что-то из механизма регулярных выражений. Допустим, будем выводить только имя объекта симпатии. Для этого:
Code
1
2
3
4
$ grep -P "likes \w+" 1.txt
Elena likes bash!
Elena likes Ubuntu!
Elena likes Python!
Я использовал опцию -P (или --perl-regexp), чтобы формат регулярных выражений был похож на перловский. Образец тоже поменялся. Были добавлены две существенные детали:
1) \w - символьный набор (в нашем случае соответствует любому буквенному символу, цифровому и знаку подчеркивания).
2) + - квантификатор, который определяет, сколько раз предшествующее выражение может встречаться.
Вместе \w+ означают последовательность из 1 или более символов из набора. Кстати, по умолчанию квантификация жадная, то есть \w+ будет соответствовать bash, а не b.
Дальше добавляем опцию -o (или --only-matching), будем выводить не всю строку, а только соответствие:
Code
1
2
3
4
$ grep -Po "likes \w+" 1.txt
likes bash
likes Ubuntu
likes Python
Осталось убрать "likes ". Для этого воспользуемся positive lookbehind (позитивный просмотр назад): добавим (?<=шаблон).
Code
1
2
3
4
$ grep -Po "(?<=likes )\w+" 1.txt
bash
Ubuntu
Python
Строка "likes " должна присутствовать в том выражении, которое мы ищем, но в результат поиска она не включается.
Так вот:
Code
1
grep --perl-regexp --only-matching '(?<=class="b-form-checkbox" value=")\d+(?=")' file2.html
ищет в файле строки вида:
Code
1
class="b-form-checkbox" value="цифры"
и вытаскивает только цифры.
1) \d - символьный набор из цифр от 0 до 9, т.е. ТОЛЬКО цифры.
2) (?=шаблон) - positive lookahead, аналог behind, я забыл, что квантификация жадная, можно без него обойтись.
Засовываем выход grep в массив messages:
Code
1
2
messages=( $(grep --perl-regexp --only-matching \
                 '(?<=class="b-form-checkbox" value=")\d+(?=")' file2.html) )
Кстати, в Python я вытаскивал номера транзакций через группы (поэтому \d* (0 или более символов) взято в скобки), не знаю можно ли в grep также сделать.

Bash
1
2
3
4
5
count=5
for i in `seq 1 $count`;
do
    echo $i
done
Вывод:
Code
1
2
3
4
5
6
$ bash 123.sh
1
2
3
4
5
Bash
1
2
3
4
5
count=5
for i in $count;
do
    echo $i
done
Вывод:
Code
1
2
$ bash 321.sh
5
0
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 18
14.01.2012, 21:24  [ТС]
bokunopico, так подробно даже в книжках не написанно, спасибо огромное
accept,bokunopico, благодарю вас, что помогли мне решить такую задачку, оказывается все намного проще, чем я ожидала
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
15.01.2012, 09:03
Bash
1
2
3
4
5
6
7
8
curl "http://passport.yandex.ru/passport?mode=auth" \
     -d "login=Lenusik-kam&passwd=B1a2L3et" \
     -c cookies.txt \
     -o enter.html
    
curl "https://mail.yandex.ru/lite/inbox" \
     -b cookies.txt \
     -o list.html
enter.html не создаётся почему-то, а list.html содержит список писем

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
 
curl "http://passport.yandex.ru/passport?mode=auth" \
     -d "login=Lenusik-kam&passwd=B1a2L3et" \
     -c cookies.txt \
     -o enter.html 2>/dev/null
    
curl "https://mail.yandex.ru/lite/inbox" \
     -b cookies.txt \
     -o list.html 2>/dev/null
 
echo "Entered"
 
n=1
for s in $(cat list.html); do
    if echo $s | grep -q '/lite/message/[[:digit:]]\+"><a'; then
        msgno=$(echo $s | sed -r 's/^[^[:digit:]]+([[:digit:]]+)"><a$/\1/')
        echo "Saving message #$n..."
        curl "https://mail.yandex.ru/lite/message/$msgno" \
             -b cookies.txt \
             -o msg$n.html 2>/dev/null
        ((n++))
    fi
    [ $n -gt 5 ] && break
done
 
exit 0
Code
1
2
3
4
5
6
7
8
[guest@localhost sh]$ ./t.sh
Entered
Saving message #1...
Saving message #2...
Saving message #3...
Saving message #4...
Saving message #5...
[guest@localhost sh]$
2
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
15.01.2012, 09:10
Да, что-то я нашёл, откуда выдирать номер сообщения (из чекбоксов, лол).
К тому же с перенаправлениями выглядит всё гораздо аккуратнее.
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
15.01.2012, 09:33
главное, что там массива нет
массив - это bash, а shell - это не всегда bash
1
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
15.01.2012, 09:46
Спасибо, не знал. Я просто пару дней назад установил Ubuntu (раньше была под виртуалкой) и начал активно угорать по shell. Но пока не очень получается, судя по лихорадочным отступам и беспорядочным ' и ".
0
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 18
15.01.2012, 11:55  [ТС]
спасибо, спасибо спасибо за помошь accept, bokunopico, Я вам очень благодарна
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
16.01.2012, 02:51
Цитата Сообщение от bokunopico Посмотреть сообщение
начал активно угорать по shell
они разные бывают
просто много раз переписывал коды, которые были с массивами, потому что препод запускал в какой-нибудь простой оболочке
посмотри dash в репозиториях (и это ещё не самая простая)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.01.2012, 02:51

Как получить Транзакции VK COIN в VKNET?
Здравствуйте,не пойму как написать функцию чтобы получить транзакции, тоесть человек перевел мне vkcoin {} Мне нужно получить его ид,...

Возможно ли получить данные из БД во время выполнения транзакции
Добрый день. Ситуация такая: в коде я объявляю транзакцию и начинаю создавать запросы для обновления данных. Но в процессе, мне нужно так...

Проверка доступности web-интерфейса в Zabbix
Добрый день! В Zabbix (версия 2.2.6) создаю проверку доступности web-интерфейса, URL следующий: https://10.20.30.143/. Создал узел,...

Выбор СУБД для web интерфейса
Добрый день! На работе необходимо сделать интерфейс к базе данных на WEB. База данных уже создана, но не заполнена. И дело в том, что...

Sams не загружает левый фрейм web-интерфейса
всем привет есть проблема, при открытии sams'а браузер предлагает скачать файлик iframe.php причем правая сторона открывается ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru