Хотел уточнить: есть ли в Discourse способ показывать внутренние объявления в зависимости от местоположения текущего пользователя? Я понимаю, что у нас есть: House Ads in the official Ad Plugin, готовая для показа объявлений, но мне просто нужно знать, можно ли как-то получить местоположение текущего пользователя через Discourse.
Если такого способа в Discourse нет (например, требуется сторонний инструмент), я знаю, что у нас есть IP-адреса при регистрации. Можно ли использовать их для определения местоположения пользователя?
Независимо от контекста существующего или гипотетического плагина рекламы, в Discourse есть встроенная функция для этого, доступная из административного представления профиля пользователя:
Я попытался написать короткий скрипт на Python для этого, но он возвращает мне веб-страницу, а не JSON. Когда я добавил .json к GET-URL, он возвращал просто {}. Однако, когда я делаю запрос с использованием ID пользователя (https://your-discourse.com/admin/users/{user_id}/ip-info.json?ip={user_ip}), информация о пользователе с IP-адресом отображается.
Я даже попытался открыть этот URL в браузере, но получил сообщение: Oops! That page doesn’t exist or is private.
Кстати, наш Discourse сейчас работает на стабильной версии (v3.1.1).
Я хотел спросить: нужен ли мне лицензия MaxMind для работы этого функционала? Если нет, возможно ли, что предоставленная конечная точка неверна? Я получаю ответ от /admin/users/{user_id}.json, но по какой-то причине не получаю корректный ответ от /admin/users/ip-info?ip={user_ip}. Вместо этого я получаю пустую веб-страницу в формате HTML с нашего сайта Discourse.
Кроме того, есть ли ссылка на список полезных конечных точек, которые предоставляет Discourse, например, на ту, которую вы поделились?
Это потому, что он возвращает только содержимое https://your-discourse.com/admin/users/{user_id}.json. Он игнорирует часть ip-info, так как это некорректная конечная точка в данном случае.
И да, я не подумал об этом , но да, думаю, вам, вероятно, понадобится ключ Maxmind для получения геолокации.
Итак, подытожим:
Если вы хотите получить IP-адрес пользователя, вам нужно сделать GET-запрос (с учетными данными администратора) к https://your-discourse.com/admin/users/{user_id}.json. Он вернет IP-адрес наряду с другой информацией о пользователе.
Если вы хотите определить местоположение по IP-адресу, вам нужен ключ Maxmind (который нужно добавить в app.yml), и вы должны сделать GET-запрос к этой конечной точке: https://your-discourse.com/admin/users/ip-info.json?ip={user_ip}.
Спасибо, @Canapin, думаю, это именно то, что мне нужно. Я попробую оформить лицензию MaxMind и двигаться дальше. Если мне удастся получить лицензию и повторить попытку, я обновлю эту тему. До связи!
Я получил бесплатную лицензию MaxMind, и API https://your-discourse.com/admin/users/ip-info.json?ip={user_ip} работает отлично, спасибо!
У меня есть ещё один вопрос: поскольку для получения IP-адреса и последующего вызова этого API требуется идентификатор пользователя (user ID), как быть с анонимными пользователями? Что, если мы захотим показывать им рекламу, но у них нет user ID? Это всё ещё возможно, или эта функция предназначена исключительно для авторизованных пользователей?