Судя по всему, снимать бан с rss-proxy в ближайшее время никто не собирается. Но небольшая шумика произвела и положительный эффект — один из разработчиков SUP сказал мне примерно следующее: «В мире много несчастий и нестандартных интерфейсов. Один из них — XML-RPC API livejournal.com. Документация устаревшая — но всегда можно погуглить, погуглить и найти код, который и есть лучшая документация».
Так я и поступил, на выходе получил скприт ljfeed.py, который одним запросом выгребает 50 последних записей с френденты и форматирует из них Atom-поток. Скрипт лежит на github, если кто-то хочет превратить его в вебсервис — помните про User-Agent, если кто-то хочет поставить его на свой сервер — помните о политике livejournal относительно ботов.
Полагаю, страждущим может помочь kalan, предлагавший помощь в виде некоего сервера. Инициатива, как говорится, наказуема — незнакомых мне желающих к нему и направляю, у меня же на сервере в crontab пока только одна строчка такого вида:
Также, в сообществе changelogпоявилисьзаписипро OAuth — возможно, через некоторое время политика livejournal относительно внешних вебсервисов будет более определённой, а до тех пор тратить больше часа-другого на возню с френдлентой в Google Reader смысла я не вижу.
Google appengine — чудесная штука для бомж-проектов. Например, мой сервис для чтения френдленты в онлайн-агрегаторах без каких-либо проблем обслуживает 100'000 хитов в сутки. Конечно, 99% этих хитов — боты Яндекс.Ленты, Google Reader и других подобных web-приложений, но всё равно цифра сама по себе остаётся забавной. Огорчает лишь тот факт, что rss-proxy уже отъедает 35% от бесплатной квоты в 657'084 запросов к внешним сервисам в день. Рано или поздно придётся что-то с этим делать.
10% HTTP ответов в логе — это «200 Ok», 80% — «304 Not modified», еще 6% — «502 Bad gateway» из-за проблем сети и/или backend'а, таким образом кэшированием неверных паролей и/или удалённых журналов можно выиграть всего около 3% квоты. Не густо. С другой стороны, если верить User-Agent'у бота гуглеридера, то порядка 40% запросов идут к фидам, на которые никто не подписан, то есть User-Agent имеет следующий вид:
Знает ли кто, насколько можно полагаться на данную информацию от гуглебота? Увы, дискуссии в посвященной Google Reader группе на эту тему как-то игнорируются представителями Google. Вопроса «почему Feedfetcher проверяет rss-поток, на который никто не подписан?» тоже в FAQ до сих пор нет.
То там, то здесь в течение последнего полугода возникают сообщения о том, что люди не могут подключить к их jabber-аккаунту на Google Talk новые транспорты. Как показал анализ трафика и несколькообсуждений в списке рассылки jabber-operators, дело в том, что GTalk «не любит» JIDы в формате srv.example.org, а предпочитает исключительно node@example.org и поэтому честные транспорты не могут запросить у пользователя авторизацию.
Если количество ссылок вас еще не утомило, то ниже я в двух словах расскажу, что с этим можно сделать, пока инженеры Google полгода чинят этот лютый баг.
Просыпаясь почти неделю в час дня я задумал вернуть режим дня в более привычное русло и в рамках перевода биологического нейротаймера часа на три-четыре назад решил себе устроить своеобразный суточный hackathon и докрутить rss-proxy, о котором я писал месяц назад. После очередных трех-четырех часов стучания по клавиатуре помимо чуть более приятного дизайна добавлены следующие фичи:
Можно вырезать контент подзамочных записей из ленты, оставляя только заголовки (для параноиков)
Вся лента теперь при импорте в Google Reader появится в одной папке «livejournal.com»
Самоудалившиеся из ЖЖ френды теперь игнорируются при создании OPML-файла
(для уменьшения лага) по-умолчанию проксируются только взаимные френды...
...но все эти настройки можно поменять галочками при создании OPML-фалйа
Вообщем, смотрите, критикуйте. Из пожеланий не хватает сейчас только rss-ленты новых френдов, может быть в следующий hackathon сделаю и её.
Вообщем, потратил я пару-тройку часов и набросал простенькое django-приложение, которое позволяет читать в google reader подзамочные записи из френдленты.
Сервис в настоящий момент простой как топор — вводите логин и пароль от ЖЖ, они шифруются секретным ключем сервера и записываются в URL-ы RSS-потоков. На выходе из предоставленных ЖЖ данных генерируется OPML-файл, который уже можно скормить Google Reader или другой онлайновой читалке.
К вопросу о безопасности. Пароль на сервере не хранится, он зашифрован в URL-е потока. В качестве шифрования используется SHA1-OFB, который считается относительно надежным. Влияют ли найденные в SHA-1 коллизии на стойкость шифра — мне до конца не ясно, и без дополнительного анализа менять шифр на SHA2-OFB я не считаю хорошей идеей. Более подробно про SHA1-OFB можно посмотреть в ChangeLog. Конечно, это не AES и не RSA, но в GAE на настоящий момент этот функционал не доступен.
При авторизации сервера rss-proxy в ЖЖ пароль также открытым текстом не передается, т.к. используется digest-аутентификация. Т.е. пароль хранится только в памяти сервера во время обработки запроса. Кто не верит — может посмотреть исходники.
Кстати, некоторые подобные сервисы (например, http://lj.abnib.co.uk/) хранят пароль на стороне сервера, некоторые — не хранят, но закрывают свой код. Например, FAQ freemyfeed говорит, что они используют сдвиговый алгоритм, к которому имеет доступ только главный разработчик сайта. Напоминает чертовски безопасныйROT-13.
Таким образом, худшее, что может случится — вы куда-нибудь «опубликуете» URL фида, подставив этим своих френдов. В настоящий момент механизма «закрытия» засвеченных фидов нет, но его не сложно сделать.
Согласно информации по Google Reader, он сам фиды не индексирует, всей индексацией занимается GoogleBot, который ходит по ссылкам. Файл robots.txt на сайте лежит и индексирование фидов GoogleBot-ом «запрещает».
Как видно, дизайном сервис не блещет, если у кого-то есть желание это исправить — welcome.
Думаю, всем известно, что язык python был назван не в честь толстой зеленой змеюки, а в честь мэтров британской комедии — труппы Monty Python. Также, уверен, почти все слышали о таком языке как Perl, который уже больше восьми лет не может обзавестись новой версией (Perl6) с совершенно новой виртуальной машиной... названной Parrot.
Так вот. Думаю, судьба Perl6 и Parrot была предрешена еще на этапе выбора названий в этом противостоянии, «Parrot» появилось в результате шутки, обычной первоапрельской шутки как симбиоз питона и верблюда, но автор, судя по всему, забыл, что еще в 1969-м году Monty Python записали чудесный скетч Dead Parrot:
> Я пробовал CSipSimple — он как-то не понравился, не помню уже, почему. > У него есть какие-нибудь киллер-фичи по сравнению с sipdroid? В силу того, что первым я попробовал сипдроид, киллер-фичами я…
Занятно. Но она говорит, что нет у меня таких программ. А другая, которую рекомендуют в описании этой, нашла горы тулкитов, но все сравнительно невинные.
Комментарии
fox@aiur:~$ cat ~/bin/str2qr.sh
#!/bin/bash
string=$@
tmpdir="$HOME/tmp"
qrfile="$tmpdir/qrcode.$$"
viewer="/usr/bin/gwenview"
qrencode -o "$qrfile" "$string"
$viewer…
> У него есть какие-нибудь киллер-фичи по сравнению с sipdroid?
В силу того, что первым я попробовал сипдроид, киллер-фичами я…
Но она говорит, что нет у меня таких программ. А другая, которую рекомендуют в описании этой, нашла горы тулкитов, но все сравнительно невинные.
Мне бы какой-то логгер системных событий. С…