Skip to main content

POSCO Learning Platform Crawling Code Library

Project description

posco-lp

포스코 Learning Platform(LP) 관리자 기능을 자동화하기 위한 파이썬 패키지입니다. 관리자 권한이 있는 계정으로만 정상적인 사용이 가능합니다.

설치

pip install posco-lp

소스 폴더에서 직접 설치하려면 아래와 같이 실행합니다.

pip install .

주요 의존성은 requests, pandas, numpy, bs4, openpyxl입니다. Codex MCP 서버까지 함께 쓰려면 pip install "posco-lp[mcp]" 또는 pip install mcp python-dotenv를 추가로 실행하면 됩니다.

빠른 시작

from poscolp import LP, __version__

print(__version__)  # 1.2.3

lp = LP(lp_id="your_id", lp_pw="your_password")

company_df = lp.getCompanyList()
user_df = lp.getUserList(search_text="홍길동")
cha_df = lp.getChaList(search_text="리더십", start_date="20260101", end_date="20261231")

메시지 출력이 필요한 경우에만 verbose=True를 사용하면 됩니다.

lp = LP(lp_id="your_id", lp_pw="your_password", verbose=True)

# 또는 메서드별로만 출력 활성화
user_df = lp.getUserList(search_text="홍길동", verbose=True)

엑셀 저장이 필요한 경우 filename_to_save 파라미터를 사용하면 되며, 확장자를 생략하면 .xlsx가 자동으로 붙습니다.

1.2.3에서 달라진 점

  • 조회 전용 poscolp.mcp_server를 추가해 Codex에서 LP 데이터를 MCP 툴로 직접 조회할 수 있게 했습니다.
  • MCP 서버가 ~/.codex/.env를 우선 읽도록 해, 사용자별 LP 계정 정보를 저장소 밖에서 전역으로 관리할 수 있게 했습니다.
  • setup.pymcp extra 의존성을 추가해 pip install "posco-lp[mcp]"만으로 MCP 서버 실행에 필요한 mcp, python-dotenv를 함께 설치할 수 있게 했습니다.
  • Codex MCP 설정 방법과 read-only 도구 목록을 README에 정리했습니다.

1.2.2에서 달라진 점

  • getChaList() 요청을 최신 LP 화면 기준 payload로 정리했습니다. 차수명 검색어는 courseCsName으로 전송하고, 기간 구분은 eduPeriodFlag='M'으로 조회합니다.
  • getStudentRegisterList() 요청을 최신 LP 화면 기준 payload로 보강했습니다. 응답에 hpNo가 있으면 휴대폰 컬럼으로 함께 반환합니다.
  • getUserList() 요청을 최신 사용자 검색 화면 기준으로 정리했습니다. stay_type 파라미터로 재직/퇴직 조회를 구분할 수 있고, 퇴직자 응답처럼 일부 컬럼이 축약된 경우에도 안전하게 반환합니다.
  • getUserHistory(search_type="NUM")는 POSCO 고정 필터를 강제로 쓰지 않고, 최신 사용자 검색 결과에서 LP관리ID를 확인한 뒤 교육이력을 조회합니다.

1.2.1에서 달라진 점

  • getLectureRoomInfo() 요청의 searchEduArea, searchEduPlaceCode를 공란으로 전송하도록 수정했습니다.
  • 강의실 예약 조회는 특정 교육지역/교육장 코드에 묶이지 않고 LP 기본 조회 범위를 따릅니다.

1.2.0에서 달라진 점

  • pyautogui 의존성을 제거했습니다.
  • 로그인 정보가 없을 때 더 이상 GUI 입력창을 띄우지 않습니다.
  • 로그인 필요한 메서드는 내부적으로 자동 로그인 시도를 먼저 수행합니다.
  • getUserList()search_textcompany_code를 모두 비우면 최신 LP 화면과 동일하게 전체 조회를 수행합니다. company_code=''는 전체, company_code='0'는 POSCO를 의미합니다.
  • 수료자 조회/일괄 수료 처리에서 LP HTML 파싱 실패 시 안전하게 종료하도록 보강했습니다.
  • getLectureRoomInfo()의 잘못된 요청 코드와 빈 결과 처리 로직을 정리했습니다.
  • print() 기반 안내 메시지는 기본적으로 출력하지 않으며, verbose=True일 때만 출력합니다.
  • 버전 정보는 poscolp/__version__.py를 단일 원본으로 사용하고, setup.py는 그 값을 읽어 배포합니다.

Codex MCP 서버

이 저장소에는 조회 전용 MCP 서버 모듈 poscolp.mcp_server가 포함되어 있습니다. Codex에서 붙이면 LP 회사/사용자/차수/교육생/설문/강의실 조회를 툴 호출 형태로 직접 수행할 수 있습니다. 반대로 updateStudentToPassed(), resetUserPassword()처럼 LP 데이터를 변경하는 메서드는 안전을 위해 MCP에 노출하지 않았습니다.

서버는 시작 시 ~/.codex/.env를 가장 먼저 찾고, 없으면 현재 작업 폴더의 .env, 패키지 루트의 .env 순서로 자격 정보를 찾습니다. 사용자별 전역 설정이 목적이라면 ~/.codex/.env 사용을 권장합니다. 기존 테스트용 .env 키도 계속 지원합니다.

  • 추천 아이디 키: POSCOLP_LP_ID
  • 추천 비밀번호 키: POSCOLP_LP_PW
  • 하위 호환 키: LP_ID, LP_PW, LP_ID_FOR_TEST, LP_PW_FOR_TEST
  • 선택 옵션: POSCOLP_MCP_VERBOSE=true를 주면 내부 verbose 출력을 활성화할 수 있습니다.

권장 ~/.codex/.env 예시는 아래와 같습니다.

POSCOLP_LP_ID=your_lp_id
POSCOLP_LP_PW=your_lp_password

직접 실행 예시는 아래와 같습니다.

python -m poscolp.mcp_server

Codex 설정 예시는 아래와 같습니다. 전역으로 쓰려면 ~/.codex/config.toml에, 특정 프로젝트에만 쓰려면 프로젝트 루트의 .codex/config.toml에 같은 블록을 넣으면 됩니다. ~/.codex/.env를 쓰는 경우에는 cwd가 어디를 가리키든 같은 자격정보를 사용할 수 있습니다.

[mcp_servers.posco_lp]
command = "python"
args = ["-m", "poscolp.mcp_server"]
cwd = "C:\\path\\to\\lp\\package"

기본적으로 목록형 MCP 툴은 row_limit=200까지 반환하며, 응답에는 total_row_counttruncated가 함께 들어갑니다. 더 많이 받고 싶으면 각 툴 호출에서 row_limit 값을 늘리면 됩니다.

지원 툴은 아래와 같습니다.

  • lp_server_status
  • lp_get_company_list
  • lp_get_user_list
  • lp_get_user_history
  • lp_get_cha_list
  • lp_get_cha_detail
  • lp_get_student_register_list
  • lp_get_student_passed_list
  • lp_get_survey_mean_score
  • lp_get_survey_answer_list
  • lp_get_lecture_room_info

로그인 및 메시지 동작

  • LP(lp_id, lp_pw) 형태로 생성하면 인증이 필요한 메서드에서 자동 로그인됩니다.
  • LP()처럼 로그인 정보 없이 객체를 생성할 수는 있지만, 인증이 필요한 메서드는 실패 처리됩니다.
  • 기본 동작은 조용한 모드이며, 안내/경고/오류 메시지는 출력하지 않습니다.
  • 생성자에서 verbose=True를 주면 해당 객체의 메서드 전반에 출력이 활성화됩니다.
  • 특정 호출에서만 메시지가 필요하면 각 메서드의 verbose=True를 사용하면 됩니다.
  • 대부분의 조회 메서드는 로그인 실패 시 False를 반환합니다.
  • getUserHistory()search_text가 비어 있으면 None을 반환합니다.
  • updateStudentToPassed(), resetUserPassword()는 반환값 구조를 바꾸지 않으며 None을 반환합니다. 처리 메시지는 verbose=True일 때만 출력합니다.

메서드 명세

공통

  • login(verbose=False)
    • LP 로그인 세션을 생성합니다.
    • 로그인 진행 및 실패 메시지는 verbose=True일 때만 출력합니다.

회사/사용자 조회

  • getCompanyList(company_cate="그룹사", filename_to_save="", verbose=False)
    • 그룹사, 협력사, 해외법인 목록을 DataFrame으로 반환합니다.
  • getUserList(search_text="", search_type="NAME", company_code="", filename_to_save="", verbose=False, stay_type="N")
    • 사용자 검색 결과를 DataFrame으로 반환합니다.
    • search_typeNAME, ID, NUM을 지원합니다.
    • stay_typeN/재직, Y/퇴사/퇴직을 지원합니다.
    • 최신 LP 화면 기준으로 searchCompType, searchDepartText, searchPiumTagtCdText, searchStayType를 포함한 요청을 사용합니다.
    • search_textcompany_code를 모두 비우면 전체 조회를 수행합니다. company_code=''는 전체, company_code='0'는 POSCO를 의미합니다.
    • 퇴직자 조회 응답은 일부 상세 컬럼이 없을 수 있으며, retrDt가 있으면 퇴직일 컬럼으로 함께 반환합니다.
  • getUserHistory(search_type="LP_USER_ID", search_text="", filename_to_save="", verbose=False)
    • 특정 사용자의 교육 이력을 반환합니다.
    • search_type="NUM"일 때는 최신 사용자 검색 결과에서 LP관리ID를 먼저 확인한 뒤 조회하며, POSCO 고정 필터를 강제로 사용하지 않습니다.
    • search_text가 비어 있으면 조회를 수행하지 않고 None을 반환합니다.
  • resetUserPassword(lp_user_id, verbose=False)
    • 특정 사용자의 LP 비밀번호를 초기화합니다.
    • 처리 결과 메시지는 verbose=True일 때만 출력합니다.

과정/차수/교육생

  • getChaList(group_name="", search_text="", start_date="", end_date="", simple=True, filename_to_save="", verbose=False)
    • 차수 목록을 반환합니다.
    • 최신 LP 화면 기준으로 courseCsName, eduMngtDeptName, searchStartDt/searchEndDt, eduPeriodFlag='M' 형태의 조회 요청을 사용합니다.
  • getChaDetail(courseId, chaId, verbose=False)
    • 차수 상세 정보를 dict로 반환합니다.
  • getStudentRegisterList(courseId, chaId, filename_to_save="", verbose=False)
    • 차수 등록자 목록을 반환합니다.
    • 최신 LP 화면 기준으로 draw, search[value], searchPropStatCode, searchClassSeq, companyInfo, keyword, courseOpenScope, eduMngtDept, showOthGrpYn을 포함한 조회 요청을 사용합니다.
    • 반복되는 columns[n][...] 메타데이터는 서버에서 생략 가능하여 포함하지 않습니다.
    • LP 응답에 성별(sexdstn) 또는 휴대폰(hpNo) 컬럼이 없으면 해당 컬럼을 제외하고 반환합니다.
  • getStudentPassedList(courseId, chaId, filename_to_save="", verbose=False)
    • 차수 수료자 목록을 반환합니다.
    • LP 화면 구조가 바뀌어 파싱에 실패하면 False를 반환할 수 있으며, 관련 메시지는 verbose=True일 때만 출력합니다.
  • updateStudentToPassed(courseId, chaId, verbose=False)
    • 수료 조건 대상자를 일괄 수료 처리합니다.
    • 처리 결과 메시지는 verbose=True일 때만 출력합니다.

설문/강의실

  • getSurveyMeanScore(courseId, chaId, filename_to_save="", verbose=False)
    • 설문별 평균 점수와 응답자 수를 반환합니다.
  • getSurveyAnswerList(courseId, chaId, filename_to_save="", verbose=False)
    • 설문 응답 원본 데이터를 반환합니다.
  • getLectureRoomInfo(date, filename_to_save="", verbose=False)
    • 특정 날짜의 강의실 예약 정보를 반환합니다.
    • 요청 시 searchEduArea, searchEduPlaceCode는 공란으로 전달합니다.
    • 날짜 형식 오류 메시지는 verbose=True일 때만 출력합니다.

반환 규칙 요약

  • 조회 성공: 주로 pandas.DataFrame 또는 dict
  • 조회 실패: 주로 False
  • 입력이 비어 조회 자체를 진행하지 않는 경우: 일부 메서드는 None
  • 처리형 메서드: 반환값은 그대로 None, 처리 메시지는 verbose=True일 때만 출력

주요 변경 이력

  • 1.2.3 | 2026-07-03
    • 조회 전용 poscolp.mcp_server 추가
    • MCP 서버의 ~/.codex/.env 우선 자격정보 로딩 지원
    • mcp, python-dotenv optional dependency 및 posco-lp[mcp] 설치 경로 추가
    • Codex MCP 설정 및 read-only 도구 문서화
  • 1.2.2 | 2026-07-03
    • getChaList(), getStudentRegisterList(), getUserList() 요청을 최신 LP 화면 기준으로 갱신
    • getUserList()stay_type 지원 및 퇴직자 응답 안전 처리 추가
    • getStudentRegisterList() 휴대폰 컬럼 지원
    • getUserHistory(search_type="NUM")의 POSCO 고정 필터 제거
  • 1.2.1 | 2026-06-26
    • getLectureRoomInfo()의 강의실 조회 요청에서 교육지역/교육장 하드코딩 제거
  • 1.2.0 | 2026-06-26
    • pyautogui 제거
    • 공통 로그인 가드 추가
    • 로그인 정보 미입력 시 경고 후 실패 처리
    • openpyxl 의존성 추가
    • verbose 기반 메시지 출력 제어 추가
    • README 및 docstring 정비
  • 1.1.3 | 2023-09-21
    • getStudentRegisterList()에서 성별 컬럼 누락 시 발생하던 오류 수정
  • 1.1.2 | 2023-08-31
    • getStudentRegisterList() 결과에 신청/변경일시와 성별 컬럼 추가
  • 1.1.1 | 2023-07-16
    • getUserHistory() 메서드 추가
  • 1.0.9 | 2023-06-01
    • getChaList() 결과에 교육지역 정보 추가
  • 1.0.8
    • getSurveyAnswerList() 메서드 추가
    • 저장 파일명에 확장자가 없으면 .xlsx 자동 추가

주의 사항

  • POSCO Learning Platform 관리자 권한이 있는 계정이 필요합니다.
  • 일부 메서드는 LP 관리자 페이지의 HTML 구조에 의존합니다.
  • 패키지 내부 요청은 기존 구현과 동일하게 verify=False로 동작합니다.
  • 자동화 코드에 이미 이전 버전을 사용 중이라면, 업그레이드 전 verbose 사용 여부와 실패 시 반환값 흐름을 한 번 점검하는 것을 권장합니다.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

posco_lp-1.2.3.tar.gz (20.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

posco_lp-1.2.3-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

File details

Details for the file posco_lp-1.2.3.tar.gz.

File metadata

  • Download URL: posco_lp-1.2.3.tar.gz
  • Upload date:
  • Size: 20.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for posco_lp-1.2.3.tar.gz
Algorithm Hash digest
SHA256 7de3108e36d189623fa67f5122d0fe7e5f294fad0211a84dbeea30ed270e5e0a
MD5 f8222bf082e3145820ca8162273ca522
BLAKE2b-256 025775d7587020efedf59d37d4b89ecbbe6fc106341f446532ffa9c063011f80

See more details on using hashes here.

File details

Details for the file posco_lp-1.2.3-py3-none-any.whl.

File metadata

  • Download URL: posco_lp-1.2.3-py3-none-any.whl
  • Upload date:
  • Size: 20.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for posco_lp-1.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d75321393ae53e258d2ece604715d04a1a3ca61692843ee85870a4533ecd472b
MD5 944c973d8f04631845f271642072ca2e
BLAKE2b-256 167ba0ae362674023a692b28675d49e9ee2f808e27a5fb735bc2c757c51056ae

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page