VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Продукт:Набор дополнительных функций Версия:1.0 Описание: Продукт представляет собой набор функций связанный с анализом интересов пользователя, мониторингом его местоположения и содержанием страницы темы.
Функции разделены на 3 направления:
Интересы пользователя
Интересы пользователя представляют собой набор слов наиболее часто употребляемых пользователем, что дает возможность определить его круг интересов. Список интересов пользователя формируются в момент отправки пользователем сообщения на форум и хранятся в БД.
При составлении интересов пользователя может быть использован морфологический анализ (рекомендуется), что позволяет приводить слова к нормальной словоформе и ограничить по частям речи. Например только глаголы, существительные, прилагательные и фразеологизмы.
Так же продукт составляет набор интересов всех пользователей.
Набор интересов пользователя представляет из себя массив упорядоченный по частоте использования слов от наиболее часто используемого к наименее. В БД храниться весь набор интересов пользователя, но вывести для работы можно ограниченное количество элементов.
Если формирование интересов пользователя включено, то в массив $vbulletin->userinfo будет добавляться элемент userinterests, куда и будет выводиться набор интересов пользователя в виде массива. Ограничить количество интересов пользователя выводимых в массив $vbulletin->userinfo['userinterests'] можно к настройках продукта в параметрах Количество выводимых интересов пользователя и Количество элементов интересов пользователя, как процент. Функции позволяющие получить интересы пользователя:
$quantity - количество выводимых интересов пользователя от наибольшего к наименьшему (int)
$percent - если указано $quantity, то Вы можете указать, что этот параметр является процентом (bool)
В этом случае функция вычислит удельный вес каждого слова и сформирует массив слов суммарный вес которых составит указанное значение, слова будут добавляться от большего удельного веса к меньшему.
Пример:
funkit_getuserinterests(1)
funkit_getuserinterests(1, 50)
funkit_getuserinterests(1, 10, true)
Использование:
Для использования функции необходимо подключить файл функций в Вашем скрипте.
$quantity - количество выводимых интересов всех пользователей от наибольшего к наименьшему (int)
$percent - если указано $quantity, то Вы можете указать, что этот параметр является процентом (bool)
В этом случае функция вычислит удельный вес каждого слова и сформирует массив слов суммарный вес которых составит указанное значение, слова будут добавляться от большего удельного веса к меньшему.
Пример:
funkit_getalluserinterests()
funkit_getalluserinterests(50)
funkit_getalluserinterests(10, true)
Использование:
Для использования функции необходимо подключить файл функций в Вашем скрипте.
funkit_similaruser($userid, $quantity, $percent=false)
Это экспериментальная функция, которая позволяет определить пользователей с похожими интересами.
Где:
$userid - ID пользователя для которого будем искать пользователей с похожими интересами (int)
$quantity - количество выводимых пользователей с похожими интересами от наиболее к наименее похожему (int)
$percent - если указано $quantity, то Вы можете указать, что этот параметр является процентом (bool)
В этом случае функция всех пользователей, разница между содержанием интересов которых не превысит в процентном отношении, величину указанную в параметре $quantity, в верхнюю и нижнюю сторону.
Пример:
funkit_similaruser(34)
funkit_similaruser(34, 10)
funkit_similaruser(34, 10, true)
Использование:
Для использования функции необходимо подключить файл функций в Вашем скрипте.
Местоположение пользователя
Местоположение пользователя определяется с помощью свободной библиотеки GeoLite City от MaxMind по IP адресу. В продукте используется информация в бинарном формате, последнее обновление Вы сможете получить по ссылке GeoLite City Binary Format (gzip) или GeoLite City Binary Format (xz). Новый файл GeoLiteCity.dat необходимо загрузить на форум в каталог includes/geoip/, обновление выходит ежемесячно.
При включении функции "Определение местоположения пользователя по IP адресу", в БД будет сохраняться история местоположения пользователя при каждом посещении форума, а в массив $vbulletin->userinfo будет добавляться элемент usergeoip, который представляет собой массив следующего вида:
userip - IP адрес пользователя
country_code - Код страны (RU)
country_code3 - Код страны (RUS)
country_name - Название страны (Ukraine)
region - Код региона (12)
region_name - Название региона (Kyyiv)
city - Название города (Kiev)
postal_code - Почтовый индекс (03121)
latitude - Географические координаты
longitude - Географические координаты
metro_code - Коды агломераций (Агломерации США) (Только США)
area_code - Телефонный код территории (Только США)
funkit_geoip_by_date($datestart, $dateend, $userid) - Выводит историю местоположения пользователя по дате или по периоду дат.
Где:
$datestart - Время в формате Unix. Обязательный параметр. Будет определен период с начала до конца суток и выбраны значения истории посещений за этот период.
$dateend - Время в формате Unix. Не обязательный параметр. Будет определен период начиная с начала суток на основании параметра $datestart и оканчивая концом суток на основании параметра $dateend, и выбраны значения истории посещений за этот период.
$userid - ID пользователя. Не обязательный параметр. Будет определен период начиная с начала суток на основании параметра $datestart и оканчивая концом суток на основании параметра $dateend, и выбраны значения истории посещений за этот период по конкретному пользователю.
В продукте предусмотрена возможность собирать информацию о местоположении всех посетителей форума, эта возможность включается в настройках продукта опцией, Включить запись местоположения посетителей по IP адресу. Информация о местоположению будет добавлена в массив $vbulletin->GPC в элемент guestgeoip.
Так же можно получить историю местоположения посетителей, воспользовавшись функцией:
funkit_guestgeoip_by_date($datestart, $dateend) - Выводит историю местоположения пользователя по дате или по периоду дат.
Где:
$datestart - Время в формате Unix. Обязательный параметр. Будет определен период с начала до конца суток и выбраны значения истории посещений за этот период.
$dateend - Время в формате Unix. Не обязательный параметр. Будет определен период начиная с начала суток на основании параметра $datestart и оканчивая концом суток на основании параметра $dateend, и выбраны значения истории посещений за этот период.
Пример:
funkit_guestgeoip_by_date(1326969650)
funkit_guestgeoip_by_date(1326969650, 1326989650)
Использование:
Для использования функции необходимо подключить файл функций в Вашем скрипте.
Список слов по содержанию страницы темы
При включении составления списка слов по содержанию страницы темы, в массив $threadinfo будет добавлен элемент pagecontent, который представляет собой массив слов содержащихся на странице и упорядоченный от наиболее часто встречающихся на странице к наименее часто встречающимся.
При формировании списка слов можно использовать морфологический анализ (рекомендуется) для приведения слов в нормальную словоформу и ограничения по частям речи.
Содержанием массива $threadinfo['pagecontent'] можно управлять в настройках продукта в параметре Количество слов выводимых в списке слов по содержанию страницы темы. Функцию вывода списка слов содержащихся на страницах темы можно использовать в других модулях на форуме, для этого необходимо вызвать функцию:
$ids - Список ID сообщений (string). Формат строки - ", 123, 234, 45". Не требует модификаций, так как эта переменная формируется скриптом showthread.php автоматически для каждой страницы темы.
$quantity - Количество выводимых значимых слов (int). Не обязательный параметр.
Загрузить содержание архива продукта в корневой каталог форума.
Установить продукт.
В разделе административной панели "Дополнительные функции", произвести настройки:
Интересы пользователя
Место размещение файлов словарей для морфологического анализа
По умолчанию файлы словарей находятся в каталоге ../includes/phpmorphy/dicts/, необходимо вести полный путь в вашей системе.
Управление словарями
Включить необходимые словари
Назначение используемых частей речи
Включить необходимые части речи
Содержание страницы темы
Место размещение файлов словарей для морфологического анализа
По умолчанию файлы словарей находятся в каталоге ../includes/phpmorphy/dicts/, необходимо вести полный путь в вашей системе.
Управление словарями
Включить необходимые словари
Назначение используемых частей речи
Включить необходимые части речи
Произвести настройки Основные настройки->[FK] - Дополнительные функции
Проверено на совместимость с vB4. Ошибок при проверке не выявлено.
Любую функциональность набора можно отключить в случае отсутствия необходимости в ее использовании.
Last edited by SMak044 : 03-02-2012 at 04:44 AM.
Reason: Добавлено сообщение
как часто обновляется/добавляется инфа о юзере в таблицах хака?
таблицы "интересов"
таблицы "месторасположения"
и т.д..
==
при каждой отправке поста пользователем?
По ощущению, что-то очень полезное. А как и для чего это можно использовать?
Просто сбор информации о пользователе для админов?
Если да, то есть предложение, на базе этой системы сделать что-то вроде автоматически генерирующегося списка рекомендуемых друзей по интересам, назвать "единомышленники".
Вообще очень интересные перспективы и возможности у данного хака.
Last edited by sejd : 01-30-2012 at 09:29 PM.
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1705
Репутация в разделе: 1190
1
Quote:
Originally Posted by kerk
как часто обновляется/добавляется инфа о юзере в таблицах хака?
таблицы "интересов"
таблицы "месторасположения"
и т.д..
==
при каждой отправке поста пользователем?
Интересы пользователя обновляются при размещении сообщения в тему.
Информация храниться в сериализованом массиве. При добавлении сообщение, оно обрабатывается, находятся слова длинной не меньше указного в настройках, разрешенные в частях речи и сгруппированные. Полученный массив сравнивается с уже имеющийся массивом в БД, который обновляется и записывается снова в БД. Интересы всех пользователей это запись в БД в виде сериализованного массива. С ним происходит тоже самое в тоже время.
Местоположение пользователя заноситься в БД в момент регистрации как ключ использован хеш сессии, если такой хеш су шествует, то ничего не происходит.
Список слов содержания страницы темы, составляется один раз для каждой страницы форума в момент первого захода на эту страницу. Так как ключевым значением является переменная $ids (список id сообщений на странице), то я взял ее за основу для получения md5 и использовать его как ключ в таблице. Если ключ существует, то берется значение из БД, если нет, то обрабатываются все сообщения из списка $ids. Опять таки отсеивается все лишнее и не нужное, группируются слова, сортируются по убыванию и полученный результат сохраняется в БД как сериализованный массив.
@liner
Эксперт
Join Date: Dec 2008
Location: clubvolvo.ru
Награды в конкурсах:
Posts: 3,985
Версия vB: 4.2.х
Пол:
Reputation:
Expert 2939
Репутация в разделе: 665
Аллея Звезд
2
Quote:
Originally Posted by sejd
По ощущению, что-то очень полезное
и масштабное, как и прежде SMak044 пишет эпические вещи
Quote:
Originally Posted by sejd
А как и для чего это можно использовать?
+1
особенно вопрос касается местоположения.
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1705
Репутация в разделе: 1190
2
Quote:
Originally Posted by liner
Местоположение выводится на карту?
Не делал этого, но если присутствует информация latitude и longitude для этого ip адреса, то не вижу причин не прикрутить карту. Просто я не занимался этим вопросом.
SMak044 добавил 30.01.2012 в 20:52
Quote:
Originally Posted by sejd
А как и для чего это можно использовать?
Просто сбор информации о пользователе для админов?
Если да, то есть предложение, на базе этой системы сделать что-то вроде автоматически генерирующегося списка рекомендуемых друзей по интересам, назвать "единомышленники".
Я делал этот хак не как готовый продукт, а именно как набор функций, которые можно применить в других продуктах.
Как его можно использовать:
1. Не помню в какой теме, но поднимался вопрос вывода меток в метатегах, имея спсиcок слов по содержанию страницы их можно вывести в метаданных каждой страницы как keywords.
2. Используя этот список можно вывести объявление, которое будет соответствовать содержанию на странице.
3. Используя интересы пользователя можно оповещать пользователей о создании тем по их интересам...
4. Можно предлагать за деньги информацию о своих пользователях рекламодателям... А объединив с местом расположения можно предоставить рекламодателю, на платной основе, список пользователей для личных сообщений.
5. И конечно можно находить друзей со сходными интересами, но тут уже сложнее, так как надо проводить много сравнений. Хотя я и сделал функции поиска похожих пользователей, но я не уверен. что она будет работать правильно. Вызвать ее можно так:
При формировании списка интересов проводится расчет стоимости 100 наиболее часто встречающихся слов, где каждая буква имеет свою стоимость, они суммируются и это значение вноситься в БД.
Результатом работы этой функции будет массив ID пользователей, ближайших по количеству ($quantity / 2) как в большую так и в меньшую сторону, если указан второй параметр. то будут выведены все ID пользователя сумма интересов пользователя попадет в эти рамки как в большую так и в меньшую сторону.
Я не публиковал информацию про эту функцию по причине того, что проверить правильность ее работы не могу.
Last edited by SMak044 : 01-30-2012 at 10:52 PM.
Reason: Добавлено сообщение
Зачем XenForo, когда столько светлых голов,
не проще свой Vbulletin "с нуля" пересобрать?
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1705
Репутация в разделе: 1190
Для тех кто понимает в php коде
1
Так как весь набор весит много, а многие хотят ознакомиться с самим кодом, выкладываю файл продукта и файл функций.
Все остальные файлы имеют отношение к библиотеке морфологического анализа и к определению местоположения по ip.
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,711
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20257
Репутация в разделе: 8432
2
SMak044,
было бы наверное правильно использовать существующую воблофункцию в запросах, раз уж объект $vbulletin объявлен как глобальный в функциях
вместо:
PHP Code:
addslashes($value)
заменить на это:
PHP Code:
$vbulletin->db->escape_string($value)
и еще
я продукт не смотрел, незнаю структуру таблиц, есть ли в таблице funkit_setting AUTO_INCREMENT ?
там в одной функции заметил добавление данных в эту таблицу с использованием REPLACE INTO
если инкрементного поля нет, данные могут дублироваться, тогда может лучше использовать REPLACE IGNORE INTO, что бы избежать ошибок типа "дупликате ентри"