Поиск единомышленников
Jun. 13th, 2010 07:38 pmГораздо лучше, чем (не)указанные в профиле интересы, об интересах ЖЖ-юзера говорит его френдлента. По крайней мере для таких, как я, которые добавляют в друзья в основном тех, кого им интересно читать. А значит, для почти всякого ЖЖ-юзера Х можно автоматически найти его единомышленников, людей со схожими интересами: это юзеры, чья френдлента заметно пересекается с лентой Х (можно отсортировать по числу людей в пересечении). Эти люди могут не быть ни френдами Х, ни числить Х в своих френдах, ни френдами френдов Х, но тем не менее найти их очень просто.
Написал для этого дела программку. Исходники, на выбор, Ruby или Haskell. На Руби получилось покороче. В процессе работы программа выводит прогресс на консоль, кэширует ответы сервера в текстовых файлах friends_*.txt и сохраняет результат в файл cothinkers.txt, куда в отсортированном по релевантности виде записывает ники единомышленников (кроме тех, кто уже является френдом) и количество общих френдов (в список попадают те, у кого оно больше 1).
Написал для этого дела программку. Исходники, на выбор, Ruby или Haskell. На Руби получилось покороче. В процессе работы программа выводит прогресс на консоль, кэширует ответы сервера в текстовых файлах friends_*.txt и сохраняет результат в файл cothinkers.txt, куда в отсортированном по релевантности виде записывает ники единомышленников (кроме тех, кто уже является френдом) и количество общих френдов (в список попадают те, у кого оно больше 1).
no subject
Date: 2010-06-13 01:19 pm (UTC)no subject
Date: 2010-06-13 02:01 pm (UTC)+1
Date: 2010-06-13 03:06 pm (UTC)no subject
Date: 2010-06-13 03:37 pm (UTC)no subject
Date: 2010-06-13 02:37 pm (UTC)И эту функцию можно же переписать так же, как и в Руби :)
get_friends user marker = map (drop 2) . filter ((== marker) . take 1) . lines <$> get_friengs_resp user userЭто я скорее для съязвившего выше по треду.
no subject
Date: 2010-06-13 03:04 pm (UTC)no subject
Date: 2010-06-13 05:00 pm (UTC)no subject
Date: 2010-06-13 03:43 pm (UTC)По числу строк решения практически равны, но по размеру раза в полтора отличаются, Руби тут все равно несколько лаконичней. В нем не нужны церемониальные танцы вокруг IO и чистоты.
no subject
Date: 2010-06-13 03:18 pm (UTC)Во первых даже для тех кто предпочитает таки ее читать там могут быть "сверхпопулярные спамеры" которых там держат на случай вдруг они что-нибудь напишут :) Во вторых далеко не все источники в ленте - как минимум еще есть гуглоreader&co, есть делишес и масса подобных ему сервисов. Есть твиттер, правда я его не понимаю.
Вот если попытаться опутать их все - могло бы быть очень интересно тк источники меняются постоянно а гугл увы на уровне словаря или man|msdn или всякой педивикии.
no subject
Date: 2010-06-14 08:22 am (UTC)но идея всё равно хорошая, может высунешь веб-интерфейс какой-нибудь? а то у меня нету ни руби, ни хаскеля.
no subject
Date: 2010-06-14 09:04 am (UTC)Веб-интерфейс соорудить пока негде, и делать этого не хочется - все запросы тогда будут с одного адреса, придется отдельно стараться выполнить все правила ЖЖ для ботов, дабы не быть забаненым. Сейчас выполнена лишь пара основных (кэширование и отсутствие параллельных соединений).
Могу выложить запускабельный виндовый exe-шник.
no subject
Date: 2010-06-14 06:28 pm (UTC)опус про идеальную формулу я, с вашего позволения, не буду комментировать.
no subject
Date: 2010-06-14 01:55 pm (UTC)shell
Date: 2010-06-15 09:37 am (UTC)Re: shell
Date: 2010-06-15 09:47 am (UTC)А как такие штуки отлаживаются?
Re: shell
Date: 2010-06-15 09:49 am (UTC)Re: shell
Date: 2010-06-15 09:55 am (UTC)Многократным просмотром кода и использованием.