У меня нет LiveJournal и он мне не нравится. Но вот Лена отчего-то странного к нему прикипела и пользуется.
А зато мне нравится Windows Live Writer для написания блог-постов. Удобненько всё, визуально. Я и сейчас в нём пишу.
В отличие от того же LiveJournal, в котором Лена периодически руками вставляет какие-то теги, отдельно заливает фотографии и потом вставляет адреса, опять же руками… Она, мне кажется, больше с HTML работает, чем я и скоро знать его будет лучше…
LiveJournal имеет “стандартный” интерфейс, который имеют большинство блог-платформ и который поддерживается Live Writer’ом, но, к сожалению, феномен “was not invented here” добрался и до LJ и развитие поддержки стардартных протоколов они остановили, а вместо этого придумали свой собственный интерфейс, которого не понимает никто.
Таким образом Live Writer хоть и может работать с LJ, но на очень базовом уровне (сколько ребята осилили от общепринятого протокола): нет возможности управлять видимостью постингов, нет возможности добавить теги и т.д.
Поэтому мне пришла идея попробовать написать расширение для Live Writer, которое бы позволило работать с этой платформой более полно. Ниже я напишу что получилось, а ещё ниже – как это получилось.
Что.
Итак, после установки расширения в списке расширений появляется следующий пункт:

При нажатии на него пользователь увидит вот такое вот окошечко, во время показа которого система подключится к LJ и получит сведенния об имеющихся тегах и пользовательских группах:

Естественно, ничего подобного не произойдёт в том случае, если текущий выбраный блог в Live Writer не LJ. В этом случае вообще ничего не произойдёт :)
После этого в текущий пост будет вставлен невзрачного вида блок со специфичными для LJ параметрами:

Этот блок можно мышкой перетаскивать куда угодно, он информационный и не будет вставлен в постинг. Ещё раз: за пределами Live Writer этого блока не будет и никто его не увидит в LJ, включая автора. Наличие этого блока немного связано со спецификой механизма расширений Live Writer (о которой ниже) и с полным отсутствием каких-либо дизайнерских способностей у меня. Этот блок отображает настройки видимости постинга и ассоциированные с ним теги. Ну и, очевидно, в пост можно вставить только один такой блок.
При клике на этот информационный блок Live Writer (как и в случае других плагинов) сбоку покажет сайдбар, где эти самые специфичные для LJ параметры и редактируются.
В текущей бета-версии можно задавать теги для постинга а так же ограничивать видимость для определённых пользовательских групп. Ещё там можно задать текст для “ката” (тег <lj cut>).
Больше, в общем-то, пока в плагине ничего нет. А, нет, если посмотреть на первую картинку, то там ещё один пунктик есть: Add LJ User (добавить LJ-пользователя), но это мелочи.
Скачать версию плагина (beta1) можно здесь: http://storage.raga.name/Wlw4LJ-beta1.zip
Установить тоже просто: разархивировать и скопировать те два файла, что там есть, в каталог
"c:\Program Files (x86)\Windows Live\Writer\Plugins"
Если такого каталога с “x86” нет, то используется каталог без оного, то есть "c:\Program Files\Windows Live\Writer\Plugins".
Вроде работает, посты-картинки постит, драфты даже уважает…
Как.
Теперь самое весёлое, “для тех кто понимает” ;)
Так как у LJ свой API, то, очевидно, необходимо написать свой провайдер, умеющий работать с этим API. Провайдеры в WLW есть, наследуйся да пиши, а вот возможность подключить собственный провайдер туда добавить отчего-то забыли. Поэтому механизм добавления нового провайдера называется DirtyHack и выглядит (в коде) соотвествующе.
Аналогично в WLW отсутствует возможность (либо я таковой не нашёл) хоть какого-то хука на запуск приложения или на его инициализацию. И никакие хаки тут не помогут. Любой плагин получает управление только в момент его вызова.
Поэтому функциональность добавления LJ-специфичного провайдера (тот самый DirtyHack) срабатывает в момент первого вызова плагина (нажатия на Add LJ Attributes). Это в чём-то лимитирует, так как при наличии хука на стар приложения можно было бы использовать некие имеющиеся, но скрытые для “оригинального” LJ-провайдера элементы управления. А когда пользователь уже нажал – ну, тут уже поздно.
Кроме того в WLW отчего-то невозможно добавить кнопки управления на Ribbon. Этому я не поверил и проверил, потом не поверил снова и проверил опять, но со словами “ну как так можно-то!” отстал. Ну, либо, опять же, не нашёл. Поэтому – только меню Add LJ Attributes. А так бы, конечно, хотелос�� бы Ribbon-панельку добавить.
Про протокол, опять же.
Я поскольку ленив, то писать имплементацию XmlRpc-протокола для общения с LJ мне не хотелось. Я поискал в интернете и обнаружил некую библиотечку с названием lj_net, которая, вроде как, общается с LJ и имеет все нужные мне функции и которую люди в разных поделках типа моей и используют.
Но, видит небо, более ужасного кода я не встречал уже давно. Иногда это смешно, иногда – страшно. Ответа на вопрос почему ЭТО сделано ТАК не существует.
Пришлось рефакторить, конечно, стало куда лучше, хотя и не идеально.
Идеально было бы таки написать уже свой XmlRpc провайдер (благо WLW содержит низкоуровневый набор для работы с XmlRpc), надо только его использовать. Для пользователя, конечно, разницы никакой практически, но тем не менее…
Плюс ещё есть набор фич, которые можно реализовать, от moods и до странной и повергающей меня в ступор функциональности “этот пост могу видеть только я!”. Ведь, если его можешь видеть только ты, зачем ты его в социальную сеть-то постишь, человече?! Положи себе в записную книжку, в файлик, в EverNote какой-нибудь, но в блог-то зачем?!
Ан нет, фича, говорят, страсть как полезна и нужна :)
Планы.
Может быть буду обновлять, если будет хватать рук.