현재 사용자 위치에 따라 내부 광고를 제공하려면 어떻게 해야 하나요?

안녕하세요!

확인하고 싶은 것이 있어 문의드립니다. 현재 사용자의 위치를 기반으로 내부 광고를 제공하기 위한 Discourse의 방법이 있을까요? 광고를 제공하기 위해 House Ads in the Official Ad Plugin 기능이 이미 준비되어 있다는 것은 알고 있습니다. 다만, Discourse를 통해 현재 사용자의 위치를 조회할 수 있는 방법이 있는지 궁금합니다.

만약 Discourse 자체로 이를 수행할 수 없는 경우(예: 제3자 도구 필요 등), 가입 시 IP 주소를 확보하고 있다는 점을 알고 있습니다. 이 IP 주소를 활용하여 사용자의 위치를 파악할 수 있는 방법이 있을까요?

감사합니다!

하이, hyphalos! :blob_wave:

기존 또는 가상의 광고 플러그인의 맥락과 관계없이, Discourse에는 사용자 프로필의 관리자 뷰에서 이 기능을 사용할 수 있는 내장 기능이 있습니다:

엔드포인트는 https://your-discourse.com/admin/users/ip-info.json?ip={user_ip}이며, GET 요청을 사용합니다.

@Canapin 님,

빠른 답변 주셔서 감사합니다!

이를 위해 짧은 Python 스크립트를 작성해 보았지만, JSON 대신 웹페이지만 반환되고 있습니다. GET URL에 .json을 추가했을 때는 단순히 {}만 반환됩니다. 그러나 사용자 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는 현재 Stable 버전(v3.1.1)을 사용 중입니다.

확인하고 싶은 것이 있는데, 이 기능이 작동하려면 MaxMind 라이선스가 필요한가요? 만약 필요하지 않다면, 제공된 엔드포인트가 잘못된 것일 수도 있나요? /admin/users/{user_id}.json에서는 응답을 받을 수 있지만, /admin/users/ip-info?ip={user_ip}에서는不知道为什么 제대로 된 응답을 받지 못하고 있습니다. Discourse 사이트에서 HTML 형식의 빈 웹페이지만 반환되고 있습니다.

또한, 공유해 주신 것과 같은 Discourse가 제공하는 유용한 엔드포인트 목록에 대한 링크가 있을까요?

감사합니다!

이는 해당 요청이 https://your-discourse.com/admin/users/{user_id}.json의 내용만 반환하기 때문입니다. ip-info 부분은 무시되며, 여기서는 유효한 엔드포인트가 아닙니다.

네, 그 부분은 생각하지 못했습니다 :person_facepalming: 하지만 위치 정보를 반환하려면 Maxmind 키가 필요할 것 같습니다.

정리하면 다음과 같습니다:

  1. 사용자의 IP를 얻으려면 https://your-discourse.com/admin/users/{user_id}.json으로 관리자 자격 증명을 사용하여 GET 요청을 보내야 합니다. 다른 사용자 정보와 함께 IP가 반환됩니다.
  2. IP의 위치를 파악하려면 Maxmind 키(app.yml에 추가)가 필요하며, 다음 엔드포인트로 GET 요청을 보내야 합니다: https://your-discourse.com/admin/users/ip-info.json?ip={user_ip} .

API 문서가 있습니다: https://docs.discourse.org/
하지만 모든 엔드포인트가 여기에 나열되어 있지는 않습니다. 다만 Discourse의 API는 역공학하기가 매우 쉽습니다: Reverse engineer the Discourse API. 제가 여기서 정보를 얻은 방법입니다.

@Canapin 감사합니다. 제가 필요했던 것 같습니다. MaxMind 라이선스를 발급받을 수 있는지 확인해 보고, 가능하면 진행해 보겠습니다. 라이선스를 확보해서 다시 시도하게 되면 이 스레드에 업데이트하겠습니다. 감사합니다!

Canapin 님, 안녕하세요!

무료 MaxMind 라이선스를 확보했고, https://your-discourse.com/admin/users/ip-info.json?ip={user_ip} . API가 잘 작동하고 있습니다. 감사합니다!

추가로 질문이 하나 있습니다. 이 API는 사용자의 IP를 가져오기 위해 사용자 ID가 필요하고, 그 다음에 위의 API를 호출해야 하므로, 익명 사용자의 경우는 어떻게 되나요? 익명 사용자에게도 광고를 제공하려고 하는데, 사용자 ID가 없는 경우에도 이것이 가능한가요, 아니면 로그인한 사용자에게만 엄격하게 적용되는 건가요?