Не прошло и полгода (
с 19 июня), после того как я перешел на новую систему работы с закладками. Возникла потребность сделать систему удобнее. И я написал небольшой скрипт на Питоне, который переводит Яндексовые закладки в текстовый вид.
Напомню суть
системы. Большая часть закладок лежит в разделе "СборникЛинков" моего АффигительноБольшогоТексовогоФайла - это база данных, которая нужна не ежедневно, а в режиме "по запросу". Они легко находятся поиском по файлу и легко открываются в браузере по F3.
Те линки, которые нужны ежедневно, хранятся на Яндекс.Закладках - всегда под рукой и все такое прочее.
Практика внесла свои коррективы.
Выяснилось, что Tab URL Copier это не совсем то, чего мне хочется. Еще выяснилось, что ткнуть в звездочку на панели Яндекс.Бара куда проще, чем, копировать в файл ссылку из браузера. Кроме того, добавление в закладках Яндекс.Бара очень умно и хорошо реализовано - можно самому проставлять теги, делать записи етс. А АффигительноБольшой файл не всегда под руками - часто возникает необходимость добавить закладку с рабочего компьютера, когда флэшка отмонтирована.
Все это, помноженное на мою лень, привело к тому, что в корневой директории моих Яндекс.Закладок начали скапливаться совсем не-оперативные ссылки. Когда я это заметил - организовал папку "место хаоса", куда скидывал все, что нужно было зафиксировать и, раз в неделю во время недельной точки сбора, разгребал образовавшиеся завалы. В принципе получилось удобно. При разгребании есть возможность пересортировать, профильтровать и упорядочить закладки. Но. Но переводить закладки из "закладочного" формата в текстовый - жутко утомительно. Скопировать ссылку, потом скопировать описание... Мне это надоело.
В результате сегодня сел и написал небольшой скрипт на Питоне. Технология такая. Экспортируем закладки из Яндекс.Закладок в файл bookmarks.html, который кладем рядом со скриптом. Запускаем скрипт. Получаем bookmarks.txt - где все уже в текстовом виде. Дальше - дело техники. Благодаря тому, что Яндекс.Закладки удобно комментировать - почти ничего дописывать в заметки не приходится. Просто выбираются нужные ссылки и раскидываются по разделам большого файла.
В принципе можно заморочиться и сделать обратное преобразование - чтобы после разбора и переформирования можно было бы получить html-файл из текстового и залить его обратно на Яндекс, но пока у меня не доходят до этого руки. Может дойдут у кого-нибудь еще :)
Скрипт написан "на коленке" за полчаса или около того. Прошу сильно не пинать :) Хотя за конструктивную критику буду благодарен. Намеренно ушел от использования регэкспов (согласно заветам IBM-овцев, не рекомендующих злоупотреблять ими в Питоне) и от использования парсеров (хочется чтобы скрипт работал независимо от библиотек).
И - чисто виммерский выпендреж - сверху добавлен моделайн, который сворачивает все разделы в фолдеры, ориентируясь на отступы (знающие люди оценят). Если не знаете что такое фолды - уберите коммент со строки вставляющий разделитель из многих равно :)
# -*- coding: cp1251 -*-
# 2009-11-12 13:57
# перевод букмарков в текстовый формат
# by tengu-crow.livejournal.com
import string
import shutil
import sys
'''
2009-11-12 11:03
Цель - получая из яндекс.закладок
(или любого другого совместимого сервиса)
файл bookmark.html перевести его в
текстовый формат, пригодный для разбора
в блоге.
'''
tm = 'bookmarks.html'
fh = open(tm,'rb') # открываем файл с букмарками
line = fh.readlines() # считываем информацию
fh.close() # закрываем файл
fi = open('bookmark.txt','wb') # открываем файл для записи букмарков
tabber = 0
fi.write('// vim:ft=blog fdm=indent\n')
for i in range(len(line)):
stroka = line[i]
'''
обрабатываем списки - в зависимости от глубины
вложения получается так, что меняется tabber -
а с ним и отступ
это происходит каждый раз, когда попадается тег
который отвечает за вложенные списки
'''
dller = stroka.find('')
if dller >=0:
tabber += 1
dller2 = stroka.find('')
if dller2 >=0:
tabber -= 1
# находим и обрабатываем раздел в букмарках
razr = stroka.find('H3 FOLDED="')
if razr >= 0:
razer_b = stroka.find('>',razr)+1
razer_e = stroka.find('<',razer_b)
lraze = stroka[razer_b:razer_e]
t2 = '\t' * (tabber-1)
# разделитель из многих равно :
# fi.write('=====================================================')
fi.write('\n'+t2+lraze+'\n')
href = stroka.find('HREF="')
if href >= 0:
# обрабатываем ссылку
# находим и фиксируем линк
href_b = stroka.find('"',href)+1
href_e = stroka.find('"',href_b)
lhref = stroka[href_b:href_e]
# находим и фиксируем дату
dater = stroka.find(' ADD_DATE="')
if dater >= 0:
dater_b = stroka.find('"',dater)+1
dater_e = stroka.find('"',dater_b)
ldate = stroka[dater_b:dater_e]
ldate = ldate[:10]+' '+ldate[11:] # убираем из даты букву T
ldate = ldate[:16] # обрезаем секунды - чтобы не засоряли текст
# находим и фиксируем название ссылки
namer_b = stroka.find('>',href_e)+1
namer_e = stroka.find('<',namer_b)
lname = stroka[namer_b:namer_e]
# сбрасываем готовый линк в файл, попутно подгоняя его в
# удобный текстовый формат
t = '\t' * tabber
fi.write(t+lhref+'\n'+t+lname+'\n'+t+ldate+'\n')
fi.close()
выглядит оно так:
(кликабельно - видны складки, видна "блоговая раскраска")