Персональный webscrapping или приучаем внутреннего Плюшкина к порядку

29 июль, 2014 - 19:26Андрей Зубинский

Не берусь утверждать, что выскажу нечто справедливое «для всех и всегда», но одним из важных факторов взрывного роста популярности планшетов (именно планшетов, не смартфонов, независимо от диагонали экрана) стала заложенная в каждом привычка «складывать [не]нужное в кучки». Этакое web-плюшкинство.

Интересные и полезные страницы, «весёлые картинки», фрагменты страниц – всё это в вебдванолье имеет свойство появляться, и, увы, исчезать. Иногда попадаются настоящие маленькие шедевры, которых не найти вообще нигде (особенно это касается персональных блогов узкой профессиональной деятельности или хобби), в них – опыт человека, уже «нагулявшегося по граблям» там, где мало кто ходит вообще. Иногда просто что-то, что хочется сохранить «на память».

Есть тысячи способов удовлетворения web-плюшкинства, у каждого «страдающего» (или наслаждающегося) – свой. Есть множество поддерживающих эту забавную, социально безвредную и персонально полезную девиацию, сервисов (потому ранее и было смело сказано об этом явлении как о важном факторе). Есть уже свои маленькие трагикомедии в этой области – например, первопроходцы в ней теперь не совсем понятно где вообще (не будем забывать, что де-факто первую и для своих времён очень хорошую поддержку web-плюшкинства реализовала Microsoft в составе Office – OneNote, но путём мудрых и проницательных решений настолько затянула пребывание реально хорошей программы в большом дорогом пакете и настолько запоздала с реально хорошими её реализациями для альтернативных платформ, что в середине 2014 года OneNote уже даже не нишевый продукт, он разве что для тех, у кого большой опыт его использования и большие накопленные в нём коллекции «всего»).

Ещё забавнее, что в этой области далеко не всегда и не для всего хороши «полностью готовые решения», даже самые лучшие. Это область сплошных неопределённостей, и в ней всякое реально работающее синергетическое решение «для того-то и при таких-то условиях» совершенно законно и представляет самостоятельную ценность.

У меня таких персональных решений два. Оба отработаны и оба хороши для своих целей и в своих условиях.

Оба решения довольно неочевидны, и, если можно так сказать, многоступенчатые. Но перейдём к конкретике, без лишнего многословия.

Давно и очень уважаю замечательный сервис Pocket. Но при всех достоинствах (особенно при оффлайн-хранении всего «накопленного» на мобильных устройствах) у него есть абсолютно очевидные ограничения. Главное из которых – отсутствие высокоуровневой иерархии сохранённого «всего». Да, есть тэги. Но они, ещё сравнительно недавно очень модные (не совсем понимаю почему), никак не заменяют иерархии, сокращающей время поиска даже согласно алгоритмической теории. К тому же, кто помнит «облако тэгов», которое раздувается по мере использования тэговой системы ускоренного поиска? Никто. Кто со звериной серьёзностью проверяет «граммотность» вводимых тэгов, кто следит за «очепятками» и прочим? Суть тэгов – быстрый ввод их при формировании новых записей, а скорость и точность, по классике, взаимоисключающие критерии. Мой личный более чем годичный опыт использования тэговой системы «внезапно» показал, что у меня в «завалах» для одного и того же есть тэги:
embedded
embeded
eembedded

и даже eemmbedede

Так как визуализация «облака тэгов» далека от совершенства (кто-то знает совершенный в смысле наглядности и возможностей «визуальной навигации» способ 2D-отображения сразу N больших графов?, кто знает – спешите публиковаться с ACM, вас там заждались), обнаружить эти «мелкие неприятные детали» можно только «глубоко закопавшись в завалы накопленного». Но мы накапливаем что-то вовсе не затем, чтобы потом мучительно копошиться в накопленном, такие уж мы, люди.

В общем, ничего лучше привычного визуального представления иерархий – одного дерева, – пока никто не придумал, всё остальное требует специальной подготовки к «трактованию» увиденного. И в этом смысле механизмы визуализации «накопленного всего» Pocket далеки от совершенства ровно настолько, насколько возможно. Но. Сервис мегапопулярен в своей нише, он позволяет оперативно и с минимальными усилиями на любой платформе «отложить на потом» что-то, что хочется затем прочитать очищенным, без вебдванольных красот. Иногда (идеального ничего не бывает), Pocket «ломает» оригинальную разметку нужного фрагмента (особенно печально – при сохранении фрагментов кода с подсветкой синтаксиса, слишком много всяких вычурных решений этой задачи, чтобы сделать один механизм, идеально работающий всегда), но этот недостаток компенсируется главным, о котором повторюсь – ни один механизм не позволяет проще, чем Pocket, «отложить на потом очищенное» при обеспечиваемом уровне качества. Эта особенность определяет и логику использования Pocket – в нём сохраняется всё, вызвавшее сиюминутный интерес. Чтобы по-человечески почитать буквально «сегодня же». Позавчерашнее в Pocket уже не так полезно, а полуторамесячной давности – так и вовсе бывает вредным.

С другой стороны, есть знаменитый сервис Evernote. В нём уже далеко не так просто что-то «сохранить на потом», особенно из разных операционных систем. Но. Evernote обеспечивает отменное управление иерархиями, совмещая его с облаками тэгов и локальным поиском в накопленном (для Premium-подписчиков).

Из особенностей двух сервисов напрашивается некоторая логика их использования - сохранять в Evernote только то, что уже "отобрано" чтением в Pocket. Механизмы её реализации есть, но придётся добавить нечто третье.

Есть такой сервис IFTTT. По сути - забавная макро-IDE (среда разработки), прячущая под очень высокоуровневыми правилами «если – то» операции с API разных сервисов.

В IFTTT есть уже готовые «рецепты» (макропрограммы) для связки Pocket – Evernote, создать собственный – дело буквально двух минут, но смысла особого в этом нет (если, конечно, готовые "рецепты" вас устраивают), потому что выбор инициирующих событий (IF) одного сервиса, вызывающих события в другом сервисе (THEN), довольно ограничен (но самым разумным и целесообразным).

Об IFTTT много рассказывать нечего, в этом «синергетическом» сервисе важно понять больше терминологию, чем детали работы с ним.

«Каналы» (Channels) IFTTT – просто другое название для сторонних сервисов, каждый канал-сервис может инициировать события («нажимать на спусковой крючок», trigger), этим событиям можно назначать реакции в каком-то другом сервисе.

В контексте обсуждаемого «web-плюшкинства» и упомянутого уже сервиса Pocket попробуем сделать простейшую «учётную книгу» в Google Drive, один файл, пополняющийся короткими записями о том, когда и что мы сохраняли в Pocket. Мой опыт показал, что такой простой «автомат» – очень полезное дополнение, а сам принцип позволяет применить приём ко всему, к чему возможно с помощью IFTTT (зачем это может понадобиться -  позже). Очевидное (создание аккаунта в IFTTT и первый логин) опускаем, вы выбираете в основном меню сервиса «Мои рецепты» (My Recipes) и получаете примерно такую картину:

Персональный webscrapping или приучаем внутреннего Плюшкина к порядку

 
Выбираете создание нового «рецепта» (Create a Reciepe), получается такая «содержательная» страница (ну, я не виноват, модно сейчас так):

 

Персональный webscrapping или приучаем внутреннего Плюшкина к порядку

«Тырцаем» (извините за жаргон, иначе будет очень уж утомительно) в подсвеченное «this» и переходим к выбору «канала» (сервиса), который будет «нажимать на спусковой крючок». В этом примере источник событий – сервис Pocket, выбираем его, страница «прокатывается» до выбора конкретного «спускового крючка» этого сервиса, он не очень богат:

Персональный webscrapping или приучаем внутреннего Плюшкина к порядку
 
Теперь мы выбираем, какое именно действие в сервисе Pocket нас интересует – добавление чего-то, назначение тэга чему-то, отметка чего-то «понравившимся» и, наконец, архивация чего-то (что доступно премиум-подписчикам Pocket). Мы делаем независимый «журнал» обновлений нашего Pocket, поэтому выбираем «Any new item» (что-то вроде «любое новое добавленное»), что «прокатывает» страницу дальше:

Персональный webscrapping или приучаем внутреннего Плюшкина к порядку
 
Создаём «спусковой крючок», и половина «формулы» готова:

Персональный webscrapping или приучаем внутреннего Плюшкина к порядку
 
Здесь уже всё расписано «по-человечески» - если в сервисе Pocket добавлено что-то любое новое, то… Осталось детализировать это самое «то», «тырцнув» в «that». Страница «прокатывается» дальше, теперь мы выбираем «канал» (сервис), который будет реагировать на «спуск крючка» в канале Pocket. Выбираем Google Drive и назначаем требуемое действие, мы хотим добавлять в документ Drive записи о произошедшем в Pocket, поэтому выбираем «Append to a Document» (выделено розовым прямоугольником на снимке экрана), это действие в том числе и создаёт документ, если его не существует (что важно для первого «срабатывания» всей системы):

Персональный webscrapping или приучаем внутреннего Плюшкина к порядку


Осталось последнее – описать в мелких деталях суть действия с помощью следующего «конструктора»:

Персональный webscrapping или приучаем внутреннего Плюшкина к порядку


Здесь можно изменить имя документа (не думаю, что предложенное готовое вас устроит) на нечто подходящее, например, на «Pocket History», и в поле «содержания» изменить ImageUrl (он нам не нужен, сгенерированная Pocket картинка нам бесполезна) на оригинальный URL. Задача, требующая минимального знания HTML – удаляем фрагмент <img src=”{{ImageUrl}}”> и вместо него с помощью кнопки «+» и появляющегося меню добавляем «ингредиент» - просто Url:

Персональный webscrapping или приучаем внутреннего Плюшкина к порядку
 
В последнем поле «конструктора» выбираем каталог Google Drive, в котором будет создан и обновляться наш документ. Нажимаем «Create Action» - и, собственно, всё. Выжидаем где-то 15 минут (время «обзора» событий сервисом IFTTT) – и готово. Каждая запись в Pocket, с любого вашего устройства, будет «журналирована» в документе Google Drive, и будет выглядеть примерно так:

Персональный webscrapping или приучаем внутреннего Плюшкина к порядку
 
И пусть себе этот документ растёт. Это история. Удалённое вами из Pocket, из этой истории никуда не денется.

Только этот механизм «журналирования» выручал меня много раз, потому что я часто чищу Pocket от не представляющего «из сейчас» ценности хлама, а потом, из-за каких-то косвенных причин, вспоминаю, что «пробегало» нечто в новом контексте важное, но где оно и что… А сокращённые аннотации и поиск по документу, как оказалось, очень даже помогают (как и просто поиск по диапазонам дат).

После этого примера очевидны и варианты решения задачи переноса отмеченного важным из Pocket в Evernote, это особенно полезно премиум-подписчикам Evernote.

Можно, например, с помощью IFTTT сделать правило, сразу «забрасывающее» в Evernote что-то, помеченное «favorite» в Pocket. Но полученное в итоге – сводная информация, а не копия оригинала страницы. Можно (и я выбрал именно этот вариант) сделать второй «журнал» в Google Drive для favorites из Pocket, а уж полноценное добавление оффлайн-копий в Evernote делать «руками» (ну, к сожалению, чудес не бывает, да и работа по сохранению чего-то представляющего ценность, ответственная, полностью на программы её лучше не перекладывать).

И теперь в этой части последнее.

IFTTT даёт доступ ко всяким «каналам» (сервисам). Естественно, к очень популярным. Многие, насколько я знаю, в реальной работе придерживаются принципа «отдельный проект – отдельные аккаунты в некоторых сервисах». В таком случае IFTTT в части «то» формируемых правил даёт одновременно и гибкость, и очень забавные интегративные возможности.

Например, при минимальном опыте на разовое создание целой системы, формирующей «интегративный персональный сборник всего, что относится к проекту», уходит минут 10-15. В итоге – или документ Google Drive, или фрагмент иерархии Evernote, в котором собрано всё оперативное из всех «если-каналов» - твиттера, эл.почты, календарей, новостей, документов, GitHub etc. Это «живая история», не требующая копошения в куче сервисов. Абсолютно новый «продукт», который создан без всяких усилий, именно вами и сугубо в ваших целях.

В следующей записи – о ещё одном крайне забавном, отработанном и используемом мной способе «web-плюшкинства», но уже о синергетике больших web-документов со сложной разметкой (они имеют свойство исчезать именно тогда, когда они особенно нужны). Совершенно не «web-кэш», оффлайновое хранение, с большими возможностями пост-комментирования и управления накопленным контентом.

Надеюсь, этот подход кому-то поможет, особенно тем, кто, как я, использует «персональное гетерогенное» - Windows, Linux, Andorid, iOS, всё сразу и всё – для своих целей. Потому что всё это работает практически независимо от операционной среды.

 

 

Хотелось бы ещё чего-то нового рассказать, но, увы. Новости всё больше или очевидны, или унылы, или заурядны, или крайне специфичны.

Разве что наблюдались кой-какие полезные мелочи. В контекст этой записи удачно попадает оставшееся практически без внимания сообщение из недр Google – если вы переносите в Drive .docx файл с предысторией комментирований и изменений, в том числе и при групповой работе над файлом, Drive теперь может их импортировать и делать доступными. В общем, результаты групповой работы теперь переносятся из одного мира в другой, и это очевидно хорошо, особенно для не-Windows пользователей.

На этом на сегодня всё.
Откланиваюсь.