“I just wrote a script to easily download your FULL friendfeed stream. I mean: every post with comments, likes and even images and/or files. Enough for the good news: the bad news is that this a PHP command line script and you have to know how to run it. * can fetch a private stream, giving your remote key * locally downloads images and files (detects already downloaded things) * upon subsequent runs, it tries to get only the newly added posts * the output file is JSON * it scales well! * it’s free software (MIT license)” — https://github.com/caludio... - × × ×
Штука, которая загружает картинки вместе с json-выдачей! Посмотрим, оно их целиком высасывает, или только маленькие копии, но это уже немного праздник. - × × ×
Только вот зря оно всё сливает в один файл, эх. - × × ×
Организация постов:
1) Записи кладутся отдельно по уникальным id юзеров/постов (в посте есть и глобальный и локальный id);
2) В пост сливается всё — и комменты, и лайки, и ссылки на мидии.
3) При апдейтах посты сравниваются на похожесть и если есть различия, старые помечаются архивным флагом, но не удаляются. На странице поста даём возможность посмотреть «предыдущие версии» или удалить всё к чертям. - × × ×
Извлечение:
4) Из стрима пользователя выбираем сначала его дефолтный поток.
5) Потом забираем его комментарии и лайки в чужих стримах, всё-всё это сливаем в базу.
6) Если исчерпали лимит в 10к или мы имеем дело с урбаншипом, начинаем хардкорную магию. - × × ×
Хардкорный пулл:
7) Забираем сохранённые запросы пользователя и по ним делаем выборку его стрима, снова сливаем в базу.
8) Во всех постах пользователя смотрим на варианты поля «сервис», сортируем по частотности, выбираем из френдфида посты с фильтром по сервису, от самых редких к самым частым.
9) Смотрим, сколько постов набралось, и как они распределены по времени. По точке спада определяем, нужно ли рыть дальше (если точка спада уходит в начало 2008 — значит, почти всё выбрали, если позже, то придётся рыть).
10) Строим список лайков и комментаторов, ранжируем по первому появлению (ищем самых старых пользователей и читателей) и активности (число лайков юзера в данном фиде, поделённое на число месяцев, в которых он отметился). Дальше забираем из френдфида выборку с лайками этого пользователя в фиде нашего юзера. Всё новое сливаем в базу. Каждый раз перестраиваем список комментаторов и лайков исходя из того, кто теперь самый старый пользователь. Намыливаем. Споласкиваем. Повторяем. - × × ×
Графомания:
11) Всё сложенное постепенно собираем в безумную базу, которая постепенно через лайки и комменты зеркалит содержимое френдфида, в том числе подзамочные фиды. Понимаем по этому контенту, кто с кем общается и строим красивые графики в стиле Музыки Сфер. Под напором нашей системы френдфид ложится, мы ждём, когда его поднимут. - × × ×
Обновления и поддержка в нормальном состоянии:
12) Всех собранных пользователей мониторим через RSS и сто-элементные выборки раз в пару дней каждого. Если находим обновления, складываем к себе, стек френдфида в 10к обновлённых записей даёт нам шанс всё обновлённое заполучить без пропусков. - × × ×
Важные фичи, которые нужно не забыть у зверька: посты за день, посты по тегу. Которых нет пока в Клио: посты по сервису (архив твиттера и слайдшера, скажем), индексы по сохранённым запросам пользователя (глобальные и локальные), регулярная фиксация списков Best Of по дням-неделям-месяцам и построение собственных рейтингов, пересекая best of от разных пользователей (с ведением истории, понятно). - × × ×
Человечество эпически недооценивает френдфидик, конечно. И хотелось бы, чтобы фейсбук раскупил френдфид обратно, но как-то не факт, что ему бы стало от этого лучше (но судьбы Тамблера я бы пожелал френдфиду с большим удовольствием, и обязательного использования френдфида в качестве академического или нко-инструмента — тоже, для отчётности и рефлексии). - × × ×
+ Нужно автораспознавание тегов с решётками дополнить возможностью вручную выключить ненужные из списка. - × × ×
^ Спасибо! Получил, постараюсь сегодня ответить. (Правильный пинг, кстати, я свой основной ящик не каждый день читаю, как раз потому, что мне редко письма пишут.) - × × ×
+ Фильтр по типам контента нужен: все картинки из моей ленты, все мп3 и файлы — у Вконтакте вот есть «все картинки с моей стены» и отдельно все картинки из моего профиля (фактически — архив юзерпиков). - × × ×
Написал ещё пару писем, потом заметил, что они ушли на dontilook... :) - mindszenty
"Фильтр по типам контента": работает (вчерне, на fé.a.ch ещё не выложил). - mindszenty
+ Hardcore Pull 2: Так как бан-лист нам апи не отдаёт, то посты в открытом фиде пользователя (или хотя бы число комментариев к ним) лучше забирать из-под анонимного пользователя — тогда в тех случаях, когда число комментов при сборе с ключом и сборе без ключа не совпадает, будем знать, что вот тут гражданина забанили, и под апи-ключом его комменты видны не будут. - × × ×