postgresql 설치 (apt) 그 외 requirements.txt에 추가된것들도 설치 (pip)
root_of_repo/chroniccrawler/crawler/tools/key.txt를 생성해 key를 넣어주세요.
sudo service postgresql start
sudo -u postgres psql
psql에서 chroniccrawler 유저, chroniccrawler 데이터베이스, password도 chroniccrawler로 만들고 chroniccrawler 유저에게 권한 주기
CREATE USER chroniccrawler WITH PASSWORD 'chroniccrawler';
CREATE DATABASE chroniccrawler OWNER chroniccrawler;
이 시점에서 psql이 열려있는 terminal은 종료해도 됩니다
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py runserver
python3 manage.py createsuperuser
이후 절차에 따라 슈퍼유저를 만들어주세요.
대충 아무 인터넷 브라우저나 열어서 접속해주세요. 아마도 127.0.0.1:8000/master 일겁니다.
여러 DB가 보일것입니다. 그 중 CHRONICCRAWLER란의 항목 중
- Lane to tracks
- Ulsan bus_ lane to tracks
- Ulsan bus_ node to tracks
- Lane aliass
- Map to aliass
- Landmark aliass
- Landmark nodes 에 직접 정보를 등록해야 합니다.
우선, Lane to tracks에 bus name, route id, city code란에 국토교통부 api상의 해당 노선의 정보를 등록해주세요.
또한, Ulsan bus_ lane to tracks에 동일 노선의 울산 BIS api상의 해당 노선의 정보를 등록해주세요.
또한, Ulsan bus_ node to tracks에 도착 정보를 필요로 하는 정류장의 울산 BIS api상의 정류장 번호를 등록해주세요.
/busno/에 표시되는 정보는 각 노선의 정보가 Map to aliass의 매핑에 따라 Lane aliass에 적용이 되어 나타납니다.
따라서 Lane aliass에 원하는 만큼 노선의 alias를 등록한 후,
Map to aliass에서
Lane key: "Lane to tracks에 등록된 각 버스 노선에서"
Count: int("Ulsan bus_ node to tracks에 등록된 정류장이 몇 번째 나타난 것인지") - 1
Alias key: "어느 Lane alias에 매핑할 것인지"
전제조건) Ulsan bus_ node to tracks에는 홍길동역과 김철수역이 등록되어 있습니다.
-
어느 버스 노선은 출발역부터 도착역 이전까지 홍길동역을 3번 지납니다. 이 경우에, 출발역~ 첫번째 홍길동역의 Count는 0, 출발역~ 두번째 홍길동역의 Count는 1, 출발역~세번째 홍길동역의 Count는 2 입니다.
-
어느 버스 노선은 출발역이 김철수역이며 그 이후로도 도착역 이전까지 김철수역을 한번 더 지납니다. 이 경우에, 출발역~ 출발역의 Count는 0, 출발역~ 두번째 김철수역의 Count는 1 입니다.
-
어느 버스 노선은 출발역이 홍길동역이며 그 이후 김철수역을 지나고 그 이후 다시 홍길동역을 지난 후 종착역이 김철수역입니다. 이 경우에, 출발역~ 출발역의 Count는 0, 출발역~ 첫번째 김철수역의 Count는 1, 출발역~ 두번째 홍길동역의 Count는 2이며, 출발역~ 종착역의 경우에는 등록되지 않으니 Count 3으로 Map to aliass에 등록하더라도 영향을 미치지 않습니다.
에 따라 등록해주세요.
그 후, Landmark aliass에는 버스가 지나는 역 중 중요하며 경유역으로 표시하고 싶은 위치의 이름을 입력하고, Landmark nodes에 각 위치에 해당하는 역의 id를 모두 입력하세요.
CHRONICCRAWLER 란의 Vacation dates에 직접 정보를 등록해야합니다.
vacation first day : 시작일
vacation last day : 마지막날
desc : 설명
등록 이후부터는 오늘의 날짜가 시작일-마지막날 사이에 있는 경우 일반 시간표 대신 방학 시간표를 가져옵니다.
이후 밑에서 설명하는 작업 실행하기를 시행하면 나머지 DB는 알아서 채워집니다.
python3 manage.py dotask --daily
날짜 정보, 노선 정보, 시간표 정보를 불러오고 Part of lanes를 알아서 구축합니다.
일정 시간에 자동으로 실행되기를 원한다면 cron 등의 스케쥴러에 명령을 등록해주세요.
python3 manage.py dotask --timed
버스의 위치 정보, 도착 정보를 불러옵니다.
일정 시간에 자동으로 실행되기를 원한다면 cron 등의 스케쥴러에 명령을 등록해주세요.
virtualenv 사용 시에는 밑의 예시처럼 등록하면 정상적으로 작동할것입니다.
예시) * * * * * /home/!username!/.virtualenvs/!environment!/bin/python3 /path/to/django/app/manage.py dotask --timed
스케쥴러가 제대로 작동한다면 이 시점에서 자동으로 일정 시간마다 등록한 노선과 정류장에 대한 정보를 요청해 db에 저장할것입니다.
다만 기본 cron은 1분이 최소 단위이기 때문에 더 자주 실행하려면 별도의 무언가가 필요합니다.
ChronicCrawler는 공공 데이터포털에 공개된 아래 오픈API들을 기반으로 하고 있습니다.
API Key를 (앱 위치)/crawler/key.txt
에 저장하세요.
ChronicCrawler는 django를 활용합니다.
ChronicCrawler는 DB를 활용합니다. migration을 통해 DB를 생성해 주세요.
각 항목의 datatype은 별도의 표시가 없는 한 string입니다.
bus_name : 버스_번호(??? 방면) 예)337(삼남 순환)
route_id : 국토교통부 버스 api에서 사용하는 버스 노선 id. 예)USB196103373
city_code : 국토교통부 버스 api에서 사용하는 도시코드. 예)26
route_key : LaneToTrack (ForeignKey)
node_order : 해당 노선에서 해당 정류장의 순번. (integer)
node_id : 국토교통부 버스 api에서 사용하는 정류장 id.
node_name : 해당 정류장의 이름.
route_key : LaneToTrack (ForeignKey)
node_id : (불확실합니다. 정확한 정보를 얻을 시 수정해주세요.)제일 마지막으로 지난 정류장의 국토교통부 버스 api에서 사용하는 정류장 id.
bus_num : 해당 버스의 자동차등록번호.
node_order : 제일 마지막으로 지난 정류장의 해당 노선에서의 순번. (integer)
year : 년도
month : 월
day : 일
name : 해당 날의 이름 (일반 : 주중, 토요일 : 토요일, 일요일 : 일요일, 그 외 공휴일 : api에서 표시해주는 이름 예)한글날)
kind : 해당 날의 종류 (일반 : 0, 토요일 : 1, 일요일 및 공휴일 : 2)
route_key : LaneToTrack (ForeignKey)
route_id : 울산 BIS api에서 사용하는 노선 id.
route_num : 버스 노선 번호.
route_direction : 울산 BIS api에서 검색 후 direction 항목 참조
route_class : 울산 BIS api에서 검색 후 class 항목 참조
route_key_usb : UlsanBus_LaneToTrack (ForeignKey)
depart_time : 출발 시간. 숫자 4자리. 예)2300 : 23시 00분
depart_seq : 해당 노선의 시간표에서 몇번째 순번에 해당하는지에 대한 정보.
alias_name : 바깥으로 표시되기를 바라는 이름
출발역을 포함, 종착역 이전까지의 역 중 Ulsan bus_ node to tracks에 등록된 역이 등장할 때마다 자동으로 생성됩니다. 각 항목마다 "###방면"의 기준이 됩니다.
lane_key : LaneToTrack (ForeignKey)
first_node_key : 해당 부분의 첫 역. NodeOfLane (ForeignKey)
last_node_key : 해당 부분의 마지막 역. NodeOfLane (ForeignKey)
part_name : 노선번호(방면)/시작역번호~마지막역번호
count : 해당 LaneToTrack에서 현재 PartOfLane이 몇 번째로 등장하는 PartOfLane인지 - 1 (int)
lane_key : 연결시킬 PartOfLane의 lane_key (ForeignKey)
count : 연결시킬 PartOfLane의 count (int)
alias_key : 연결시킬 LaneAlias (ForeignKey)