Букмаркерство - 2

Nov 12, 2009 13:13

Не прошло и полгода ( с 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()

выглядит оно так:



(кликабельно - видны складки, видна "блоговая раскраска")

заметки себе, системные соображения интересные мне, фичи, foss forever, идеи, программизм, питонство, all_АБТФ, память, vim, рецепты, софт, здравый смысл, инфотех, нот, me, мысли, интересно_в_основном_мне

Previous post Next post
Up