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

Не прошло и полгода (с 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 -
	а с ним и отступ
 
	это происходит каждый раз, когда попадается тег <DL>
	который отвечает за вложенные списки
	'''
 
	dller = stroka.find('<DL>')
	if dller >=0:
		tabber += 1
 
	dller2 = stroka.find('</DL>')
	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()

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

bookmaker
(кликабельно — видны складки, видна «блоговая раскраска»)

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: