티스토리 뷰

해당 글은 https://blog.naver.com/kbs4674/221237115010 로 부터 게시글이 이전되었습니다.

 

Ruby를 이용해서 외부에서 지원하는 Open API를 활용하여 외부 API에 접근하는 방법에 대해 소개하고자 합니다.

이번 Open API 활용은 정부에서 서비스/지원을 하는 '데이터 공공데이터 포털'를 활용하고자 합니다.

 

https://www.data.go.kr "

 

  • 공공데이터포털 : 시작 전 rest-client Gem 설치

 실습 전 참고  사전에 공공데이터 API 신청 및 회원가입이 되어있다는 가정 하에 설명합니다.

 

1.  Gemfile  파일에

gem 'rest-client'

위 코드를 입력 후, 터미널에

bundle install

을 입력하셔서 Gem을 설치해주세요!

 

 

  • 공공데이터포털 : Ruby 코드

#Ruby : 기차 정보 조회 Open API 코드
require 'rubygems'
require 'rest_client'
require 'cgi'
 
url = 'http://openapi.tago.go.kr/openapi/service/TrainInfoService/getCtyCodeList'
headers = { :params => { CGI::escape('ServiceKey') => '서비스키',CGI::escape('파라미터영문명') => '파라미터기본값' } }
response = RestClient::Request.execute :method => 'GET', :url => url , :headers => headers
puts response

 

공공데이터 포털 사이트에서는 다양한 API 연동 코드를 제공해줍니다.

우리는 그저 그냥 이 사이트에서 위 코드만 따오면 됩니다..!

 

위 코드를 보는 법은 아무 오픈 API를 신청 후, (상단메뉴) 마이페이지 > 신청한 API 로 가신 후

 

위 사진에 보이는 '개발가이드' 에 가서 보면 됩니다.

 

 

  • 공공데이터포털 : 데이터 코드 조회

 실습 전 참고 

1. 본 예시에서는 코레일 : 기차시간표 데이터를 조회할 수 있는 열차정보서비스 로 예시를 설명하겠습니다.

공공데이터 API : 열차정보 서비스
https://www.data.go.kr/dataset/15000500/openapi.do

 

API를 이용한 정보검색을 위해서는 데이터 코드를 알아야합니다.

예를들어 우리가 기차정보 시스템을 조회한다 할 때, 출발역, 도착역, 기차유형 등을 해당 OpenAPI에 표현된 고유의 코드가 존재합니다.

 

 

해당 코드들은 위 항목에서 조회가 가능한데요,

예를들어 '출발역' 이라는 정규 이름이랑, 해당 출발역에 대한 역 코드명을 알고 싶다면


1)
출발역 같은 경우는 1. 출/도착지기반열차정보 조회 에서 '
실행' 버튼을 누르면 depPlaceId 라는 이름으로 확인이 되었습니다.

 

2) 역 코드명 3. 시/도별 기차역 목록조회 에서 조회가 가능합니다만, 

문제는 그 전에 도시코드를 알아야 합니다.

4. 도시코드 목록 조회에서 '실행'버튼을 누르고, 바로 '미리보기'를 누르셔서 자기가 찾고자 하는 도시코드를 탐색한 후,

다시 3. 시/도별 기차역 목록조회 로 돌아와서 자기가 찾고자 하는 역이 속한 도시코드를 입력한 후, '미리보기'를 누르셔서 역 코드를 찾으시면 됩니다.

 

 

  • 공공데이터포털 : 기차시간 정보 가져오기

 실습 전 참고  기차시간 API 정보는 현재로 부터 2일 뒤 까지의 시간밖에 조회가 안됩니다.

 

저는 이번 시간에 예시로 '기차시간 조회' 열람에 대해 다뤄보겠습니다.

기차 출발역은 남춘천역(NAT140840), 도착역은 용산역(NAT010032), 날짜조회 : 18.03.26, 열차 종류는 ITX-청춘(09)으로 하겠습니다.

 

1. 테스트를 위해  .rb  파일을 하나 만듭니다. (저는 예시로  test.rb  를 생성.)

 

2. 다음 내용을 적습니다.

require 'rubygems'
require 'rest_client'
require 'cgi'
 
url = 'http://openapi.tago.go.kr/openapi/service/TrainInfoService/getStrtpntAlocFndTrainInfo?serviceKey=(API 코드 번호)'
headers = { :params => { CGI::escape('numOfRows') => '50', CGI::escape('depPlaceId') => 'NAT140840', CGI::escape('arrPlaceId') => 'NAT010032', CGI::escape('depPlandTime') => "#{Time.now.strftime('%Y%m%d')}", CGI::escape('trainGradeCode') => '09' } }
response = RestClient::Request.execute :method => 'GET', :url => url , :headers => headers
puts response

 참고 

1) 혹시 '현재 날짜' 를 기준으로 조회하고 싶으면 CGI:escape 코드 중간에 다음 코드를 수정입력 해주시면 됩니다.

CGI::escape('depPlandTime') => "#{Time.now.strftime('%Y%m%d')}"

 

2) url 입력란 끝에 있는 API 코드번호 적는거 잊지마세요.

 

3) API 코드번호는 (상단메뉴) 마이페이지 > 신청한 API 에서 확인 가능합니다.

자신의 API 인증키 확인법

 

3. 코드를 입력한 루비 파일을 저장 후, 터미널에 다음 명령어 입력을 통해 결과를 봅니다.

# ruby "[파일명]"
ruby "test.rb"

 

 결과   CGI::escape('numOfRows') => '50'  속성 덕분에 한 목록에 50개의 데이터가 보여지는게 확인됩니다.

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL SERVICE.</resultMsg>
</header>
<body>
<items>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326073300</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326061200</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326082800</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326070600</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326090000</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326074000</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326093500</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326081400</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326102700</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326091500</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326113900</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326102700</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326123100</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326111800</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326132400</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326121300</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326142800</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326131800</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326153100</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326141400</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326163900</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326152600</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326173200</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326161800</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326181900</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326170900</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326193100</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326181700</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326210000</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326194200</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326223000</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326211300</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
<item>
<adultcharge>0</adultcharge>
<arrplacename>용산</arrplacename>
<arrplandtime>20180326232800</arrplandtime>
<depplacename>남춘천</depplacename>
<depplandtime>20180326221800</depplandtime>
<traingradename>ITX-청춘</traingradename>
</item>
</items>
<numOfRows>50</numOfRows>
<pageNo>1</pageNo>
<totalCount>17</totalCount>
</body>
</response>

 

 같은 경우, 결과가 위와같이 나왔는데요!

진짜 저 결과가 실제 코레일에서 조회되는 시간표랑 맞는지 확인을 해봤습니다.

 

코레일 조회 결과 모든 정보가 일치함을 확인했습니다.

 

 

  • Ruby on Rails에 직접 적용 : 실시간 조회

 실습 전 참고 

1. 저는 메인화면을 보여주는 HomeController의 index페이지에 띄우는 예시로 설명하겠습니다.

2. 해당 예제에서는 서울역 출발, 부산역 도착 KTX 시간표를 예시로 설명합니다.

3. Nokogiri Gem을 활용합니다.

4. 실시간 조회(실시간 크롤링) 기능은 여러 개를 크롤링을 할 수록 사이트에 큰 부담이 가니 사용에 있어 주의 바랍니다.

 

1. API 적용을 희망하는 View의 Controller로 이동합니다.

(저는 메인화면을 보여주는 HomeController의 index페이지에 띄우는 예시로 설명하겠습니다.)

 

2. 일단 기본 베이스로서, 기차 시간(API 결과)이 보여지고자 하는 컨트롤러에 다음 내용을 적어냅니다.

## 해당 코드는 app/controllers/home_controller.rb 에서 예시로서 작성되었습니다.
## 꼭 HomeController에서 작성되지 않아도 되니 참고 바랍니다. 어느 컨트롤러에 쓰건 그건 여러분들의 자유입니다.
## 해당 예시 코드는 app/views/home/index.html에서 View 결과가 보여지게 됩니다.
 
require 'rubygems'
require 'rest_client'
require 'cgi'
 
class HomeController < ApplicationController
    def index
        ...
    
        #코레일 API 연동
        url = 'http://openapi.tago.go.kr/openapi/service/TrainInfoService/getStrtpntAlocFndTrainInfo?serviceKey=(API코드)'
        headers = { :params => { CGI::escape('numOfRows') => '30', CGI::escape('depPlaceId') => 'NAT010000', CGI::escape('arrPlaceId') => 'NAT014445', CGI::escape('depPlandTime') => "#{(Time.now+9.hours).strftime('%Y%m%d')}", CGI::escape('trainGradeCode') => '00' } }
        @KTX_time_list = RestClient::Request.execute :method => 'GET', :url => url , :headers => headers
    end
end

 참고  해당 예시 코드는  app/views/home/index.html  에서 View 결과가 보여지게 됩니다.

 참고  서울역 : NAT010000, 부산역 : NAT014445, 열차코드 : 00(KTX)

 

3. 이제 저희는 기본 베이스에서 좀 더 보완을 해서 코드를 작성해 나가볼겁니다.

Nokogiri를 활용한 코드를 다음과 같이 입력해주세요. (2번 과정의 코드에서 추가적으로 입력됩니다.)

## 해당 코드는 app/controllers/home_controller.rb 에서 예시로서 작성되었습니다.
## 꼭 HomeController에서 작성되지 않아도 되니 참고 바랍니다. 어느 컨트롤러에 쓰건 그건 여러분들의 자유입니다.
## 해당 예시 코드는 app/views/home/index.html에서 View 결과가 보여지게 됩니다.
 
require 'rubygems'
require 'rest_client'
require 'cgi'
 
class HomeController < ApplicationController
    def index
        ...
    
        #코레일 API 연동
        url = 'http://openapi.tago.go.kr/openapi/service/TrainInfoService/getStrtpntAlocFndTrainInfo?serviceKey=(API코드)'
        headers = { :params => { CGI::escape('numOfRows') => '30', CGI::escape('depPlaceId') => 'NAT010000', CGI::escape('arrPlaceId') => 'NAT014445', CGI::escape('depPlandTime') => "#{(Time.now+9.hours).strftime('%Y%m%d')}", CGI::escape('trainGradeCode') => '00' } }
        @KTX_time_list = RestClient::Request.execute :method => 'GET', :url => url , :headers => headers
        @KTX_time_to_xml = @KTX_time_list.body
        @doc = Nokogiri::XML(@KTX_time_to_xml)
        @KTX_dep_time = @doc.xpath("//depplandtime")
        @KTX_dep_time_to_hash = @KTX_dep_time.map { |cur| cur.text }
    end
end

 

 

4. 기차 시간(API 결과)이 보여지고자 하는 View 파일에 가셔서 다음 코드를 입력해주세요.

## app/views/home/index.html 에서 작성된 코드입니다.
 
...
 
<% @KTX_dep_time_to_hash.each do |info| %>
    <%= content_tag(:div, info) %>
<% end %>
 
...

 

5. 여기까지 하고 결과를 보면 일단 KTX 시간표가 잘 나오는게 확인됩니다.

 참고1  API 호출 결과물에서 보면 오전 6시 5분 기차 시간이 없는게 확인되는데,

현재 API에서 검색되는 기차 종류는 코드번호 00인 KTX(구 KTX) 기차만 검색이 되며, KTX-산천(신형 KTX) 기차는 검색이 되지 않습니다.

 참고2  KTX-산천 열차 코드는 10 입니다.

 

6. 하지만 위 결과물은 뭔가 예쁜 결과물이 아닙니다.

제가 원하는 결과물은 최소  xx시 yy분  이라고 보여지는 결과물입니다.

 

위 표현을 위해 기차 시간(API 결과)이 보여지고자 하는 View 파일로 이동 후, 다음 코드로 수정해줍니다.

## app/views/home/index.html 에서 작성된 코드입니다.
 
...
 
<% @KTX_dep_time_to_hash.each do |info| %>
    <%= content_tag(:div, "#{info.last(6).remove.first(2)}시 #{info.last(4).remove.first(2)}분 출발") %>
<% end %>
 
...

위와같이 예쁘게 결과가 나오면 끝 입니다.

 

 

Ruby on Rails에 직접 적용 : DB에 저장하는 방식

 실습 전 참고 

1. 저는 메인화면을 보여주는 HomeController의 index페이지에 띄우는 예시로 설명하겠습니다.

2. 해당 예제에서는 서울역 출발, 부산역 도착 KTX 시간표를 예시로 설명합니다.

3. Nokogiri Gem을 활용합니다.

4. 예약된 시간에 따라 자동으로 일처리를 하는 whenever Gem이 필수적으로 필요합니다.

   자동 일처리 : whenever [클릭]

5. whenever Gem에 대한 자세한 설명은 생략합니다.

 

1. 모델 파일을 만듭니다.

# rails g model [모델명] [컬럼]
rails g model Crawling_Seoul_To_Busan time

그리고 모델을 스키마에 반영합니다.

rake db:migrate

 

2.  app/model/crawling_seoul_to_busan.rake.rb  파일로 가신 후, 데이터 수집 시, 내용의 중복을 방지하기 위한 코드 한 줄을 써놓습니다.

중복되는 값 구분 기준은 '유일성'을 나타내는 내용이면 좋습니다.

class CrawlingNotice < ApplicationRecord
    # validates_uniqueness_of :[DB 컬럼]
    validates_uniqueness_of :time
end

 

3. 다음 명령어를 입력해서 task 파일을 새로 생성해주세요.

# rails g task [task 파일명] [시행명령 이름]
rails g task Crawling_Seoul_To_Busan auto_crawl

 

4.  lib/tasks/crawling_seoul_to_busan.rake  로 이동하면 다음과 같은 내용으로 되어있을 겁니다.

namespace :crawling_seoul_to_busan do
  desc "TODO"
  task auto_crawl: :environment do
  end
end

 

5. 일단 기본 베이스로서,  lib/tasks/crawling_seoul_to_busan.rake  에 다음 내용을 적어냅니다.

# /lib/tasks/crawling_seoul_to_busan.rake
 
require 'rubygems'
require 'rest_client'
require 'cgi'
 
namespace :crawling_seoul_to_busan do
  desc "TODO"
  task auto_crawl: :environment do
    
    # 과거에 쓰여진 코레일 DB를 전부 제거
    CrawlingSeoulToBusan.all.each do |x|
        x.destroy
    end
    
    # 코레일 API DB 최신화
    url = 'http://openapi.tago.go.kr/openapi/service/TrainInfoService/getStrtpntAlocFndTrainInfo?serviceKey=(API코드)'
    headers = { :params => { CGI::escape('numOfRows') => '30', CGI::escape('depPlaceId') => 'NAT010000', CGI::escape('arrPlaceId') => 'NAT014445', CGI::escape('depPlandTime') => "#{(Time.now+9.hours).strftime('%Y%m%d')}", CGI::escape('trainGradeCode') => '00' } }
    @KTX_time_list = RestClient::Request.execute :method => 'GET', :url => url , :headers => headers
  end
end

 참고  해당 예시 코드는  /app/views/home/index.html  에서 결과가 보여지게 됩니다.

 참고  서울역 : NAT010000, 부산역 : NAT014445, 열차코드 : 00(KTX)

 

6.이제 저희는 기본 베이스에서 좀 더 보완을 해서 코드를 작성해 나가볼겁니다.

Nokogiri를 활용한 코드를 다음과 같이 입력해주세요.

## lib/tasks/crawling_seoul_to_busan.rake
 
require 'rubygems'
require 'rest_client'
require 'cgi'
 
namespace :crawling_seoul_to_busan do
  desc "TODO"
  task auto_crawl: :environment do
    
    # 과거에 쓰여진 코레일 DB를 전부 제거
    CrawlingSeoulToBusan.all.each do |x|
        x.destroy
    end
    
    # 코레일 API DB 최신화
    url = 'http://openapi.tago.go.kr/openapi/service/TrainInfoService/getStrtpntAlocFndTrainInfo?serviceKey=(API코드)'
    headers = { :params => { CGI::escape('numOfRows') => '30', CGI::escape('depPlaceId') => 'NAT010000', CGI::escape('arrPlaceId') => 'NAT014445', CGI::escape('depPlandTime') => "#{(Time.now+9.hours).strftime('%Y%m%d')}", CGI::escape('trainGradeCode') => '00' } }
    @KTX_time_list = RestClient::Request.execute :method => 'GET', :url => url , :headers => headers
    @KTX_time_to_xml = @KTX_time_list.body
    @doc = Nokogiri::XML(@KTX_time_to_xml)
    @KTX_dep_time = @doc.xpath("//depplandtime")
    @KTX_dep_time_to_hash = @KTX_dep_time.map { |cur| cur.text }
    # DB에 데이터가 쓰이는 코드
    @KTX_dep_time_to_hash.each do |x|
        @KTX_dep_time_result = CrawlingSeoulToBusan.new
        if (Time.parse(x) >= Time.now+9.hours) # 현재시간 기준부터 DB에 기차시간 기록
            @KTX_dep_time_result.time = x
            @KTX_dep_time_result.save
        end
    end
  end
end

 

7. 기차 시간(API 결과)이 보여지고자 하는 Controller로 이동 후, 다음 코드를 작성해주세요.

## 해당 코드는 /app/controllers/home_controller.rb 에서 예시로서 작성되었습니다.
## 꼭 HomeController에서 작성되지 않아도 되니 참고 바랍니다. 어느 컨트롤러에 쓰건 그건 여러분들의 자유입니다.
## 해당 예시 코드는 /app/views/home/index.html에서 View 결과가 보여지게 됩니다.
 
class HomeController < ApplicationController
  def index
    ...
    
    #코레일 API 결과물
    @KTX_dep_time_list = CrawlingSeoulToBusan.all
  end
end

 

 

8. 기차 시간(API 결과)이 보여지고자 하는 View 파일 가셔서 다음 코드를 입력해주세요.

## app/views/home/index.html 에서 작성된 코드입니다.
 
...
 
<% @KTX_dep_time_list.first(1).each do |info| %>
    <%= content_tag(:div, info.time) %>
<% end %>
 
...

 참고   .first(n)  은 DB 목록의 처음부터 n개 까지의 결과만 보여주는 레일즈 함수입니다.

 

9. 여기까지 하고 터미널에 다음 명령어를 입력해서 중간 결과를 봅니다.

rake "crawling_seoul_to_busan:auto_crawl"

 

10. 일단 KTX 시간표가 잘 나오는게 확인됩니다.

 참고1  현재 API에서 검색되는 기차 종류는 코드번호 00인 KTX(구 KTX) 기차만 검색이 되며, KTX-산천(신형 KTX) 기차는 검색이 되지 않습니다.

 참고2  KTX-산천 열차 코드는 10 입니다.

 

RAILS DB에서도 DB가 잘 쓰여진게 확인됩니다.

 

11. 하지만 위 결과물은 뭔가 예쁜 결과물이 아닙니다.

제가 원하는 결과물은 최소  xx시 yy분  이라고 보여지는 결과물입니다.

 

위 표현을 위해  app/views/home/index.html.erb  에서 다음 코드로 수정해줍니다.

## app/views/home/index.html 에서 작성된 코드입니다.
 
...
 
<% @KTX_dep_time_list.first(1).each do |info| %>
    <%= content_tag(:div, "#{info.time.last(6).remove.first(2)}시 #{info.time.last(4).remove.first(2)}분 출발") %>
<% end %>
 
...

위와같이 예쁘게 결과가 나오면 이제 최종적으로 모든 준비는 끝났습니다.

다음 12번 과정은 whenever Gem을 활용해서 매 5분마다 현재 시간을 기준으로 기차시간 DB가 최신화 되는 과정에 대해 소개합니다.

 

12.  Gemfile  로 이동하시고, 다음 내용을 입력합니다.

gem 'whenever'

 

그리고 터미널에 다음 명령어를 입력해서 Gem을 설치합니다.

bundle install

 

 

13.  프로젝트 상단 위치(  /(자신의 프로젝트 위치)  )에서 다음 명령어를 입력해줍니다.

wheneverize .

위 명령어를 입력하면  config  디렉토리에  schedule.rb  라는 파일이 생성된 것을 확인하실 수 있습니다.

 

14.  config/schedule.rb  파일을 열람하여, 다음 내용을 (추가) 입력해 줍니다. 

## config/schedule.rb
require "tzinfo"
 
def local(time)
        TZInfo::Timezone.get('Asia/Seoul').local_to_utc(Time.parse(time))
end
 
...
 
# 매 15분마다 코레일 API 시간 최신화
every 15.minutes do
    rake "crawling_seoul_to_busan:auto_crawl"
end

 

저는 매일 매 15분마다에 코레일 기차시간표를 DB에 최신화 하게 했습니다. 

 

15.  /(자기 프로젝트)  로 꼭 이동하신 후 터미널에 다음 내용을 입력해서

whenever --update-crontab
whenever

whenever 설정을 최신화 합니다.

 

16. 그럼 이제 매 15분마다 DB의 최신화가 이뤄집니다.

 

 

  • 공공데이터 사용 시 유의할 점

1. API를 확정적으로 사용을 하실 시, 운영 계정 신청을 하세요!

하루 할당받을 수 있는 트래픽 제공이 늘어납니다!

 

2. API에 있어 운영계정 상태로 되면 파라미터 예제확인이 안되니 참고 바랍니다.

 참고  예제 확인이 안될 시 이제 홈페이지를 통해 코드 Parameter 이름, 모의 데이터 결과물 확인이 안됩니다

 해결법  그래서 저는 부계정을 만들었습니다..

 

 

  • 자료 참고

1. 공공 데이터 포털 : https://www.data.go.kr

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함