Дмитрий Сергеевич (axshavan) wrote,
Дмитрий Сергеевич
axshavan

  • Location:
  • Mood:
  • Music:

Twitter - Xet - Narod - Doc

Некоторое время тому назад Юля elve рассказала у себя в жж в подзамочной записи об одной организации, которая, хоть и должна иметь крутой сайт и выкладывать новости на нём в разделе новостей, крутого сайта с разделом новостей не имеет, и выкладывает новости очень-очень хитрым и коварным способом, чтоб враги не проссали и новости не прочитали. Но это в то же время затрудняет чтение новостей и обычным пользователям.

Итак, эта конспирирующаяся организация делает следующее: пишет новость в доковском файле. Файл выкладывает на файлохостинг на narod.ru (а там для скачивания надо вводить капчу), ссылку на файл "укорачивает" через сервис коротких ссылок xet.ru, и короткую ссылку выкладывает в твиттере. Охуенно.

Я загорелся идеей чисто из спортивного интереса эту идею автоматизировать. Для себя я разбил её на три части:
1) пройтись по ссылкам из твиттера через ксет на народ,
2) обойти капчу на народе и скачать файл,
3) достать текст из файла.

1. Твиттер.
Можно было по-тупому парсить html страницы, можно было по-умному брать RSS, но я решил выпендриться и воспользовался Twitter API, заодно узнал, что это такое. Это очень простая штука - работает через GET или POST, как, в принципе, все запросы из браузера. Запрос на специфический адрес с параметрами означает то, что хочется получить или сделать. Кроме того, можно авторизоваться, и воротить в автоматическом режиме вообще всё. Но меня интересовала лента, или, по терминологии твиттера, timeline одного пользователя. Итак, я её получаю в xml, загружаю в SimpleXLMElement, и пробегаюсь по нему в цикле foreach, перебирая запись за записью. У каждой записи есть айдишник, список обработанных я храню в файлике рядом со скриптом, ну, это вместо базы данных. Если есть необработанный айдишник, то я беру текст записи и парсю его регулярным выражением на предмет наличия ссылки на xet.ru. Достаю гетом текст страницы на ксете, там в хедере есть редирект. Его я нахожу опять регулярным выражением. Редирект этот ведёт на страницу на narod.ru, откуда можно скачать файл.

2. Капча на народе.
Если вы зайдёта на страницу для скачивания файла на файлохостинге narod.ru/disk, вас попросят ввести капчу. Следовательно, для автоматизации процесса скачивания файлов капчу надо обойти. Пытаться сломать её в лоб я не могу - интеллект не тот, я и так-то её с трудом разбираю. Но есть пусть обходной.

Прямо на той странице написано, что можно установить себе Яндекс.Бар, и капчу можно будет не вводить. Интересно, подумал я, как же narod.ru определяет, что установлен Яндекс.Бар? Самым плохим случаем было бы послание какого-нибудь дополнительного двоичного пакета с намешанными хэшами логина и пароля от почты на Яндексе и какого-нибудь секретного слова. Но всё оказалось горадо проще - Яндекс.Бар не на всех страницах, а только на тех, что надо, подставляет себя в UserAgent, то есть он выглядит следующим образом (в моём случае):
Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.14) Gecko/2009090216 Ubuntu/9.04 (jaunty) Firefox/3.0.14 YB/4.2.1
И если подставить его в cURL, то капча при скачивании не предлагается. Правда, количество запросов или их частота всё равно ограничены, так как через некоторое время отладки narod.ru перестал отдавать файлы. Дальше просто - регулярным выражением найти ссылку на файл и скачать его.

3. Достать текст из .doc файла.
Эта задача представлялась для меня очень сложной - достать текст из проприетарного мудацкого формата. Но типовой - неужели, думал я, никто ещё не пытался так сделать? - и принялся гуглить в поисках готовых решений. Одни из них использовали COM, то есть подразумевали работу только под виндами. Но я нашёл вариант, который работает без дополнительных расширений на любой операционной системе, но, правда, сложные конструкции вёрстки и хранящиеся внутри доковского файла картинки вытаскивать не умеет, по признанию самого автора. Тем не менее, для моих целей этот способ подходил вполне. И работал, кстати.

Автор - некий Max Brown из славного города Обнинска
http://obninsk.name/mx/index.php
Честь ему и хвала! Я написал ему благодарственное письмо, не знаю, дойдёт ли.

Вот так-то.
Tags: web
Subscribe

  • Плёнка 193

    Плёнка: Kodak Gold 200 Фотоаппарат и объектив: Zenit-B + Гелис 44-М 2/58 Проявитель: CineStill Cs-41 Сканер: FilmScan35 II В этот раз мне удалось…

  • Ещё пара фотографий со вчера

    Первая снята на мобильный телефон рядом с лужей. А вторая - на обычный цифровой фотоаппарат, но через густо-красный светофильтр. Оригинал…

  • Пар

    Оригинал записи http://blog.axshavan.cz/2021/06/steam.html

  • Post a new comment

    Error

    Comments allowed for friends only

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 7 comments