IKEA 재고 정보를 Ruby에서 검색

8969 단어 스크래핑XML루비

개요



IKEA 재고 관리 URL에서 얻은 XML을 처리하여 정보를 추출합니다. 간단.

배경



요즘, 항으로 인기(아마 지금도)의.
어느 날 손이 미끄러져 우연히 Chrome의 검증을 밀어 버렸다 우연히 Network를 보고 있으면 IKEA의 제품의 재고수를 알 수 있는 URL을 발견했기 때문에, IKEA 상어의 재고 감시 사이트를 만들었습니다. 제목 IKEA 상어

만들어 보자



사전 준비



nokogiri 설치 (rails 환경이라면 이미 있습니다)$ gem install nokogiri

우선 샘플



여기 IKEA의 재고를 아는 너에 액세스하면 이런 식으로 XML을 얻을 수 있습니다.

IKEA 상어 재고 정보

CLI로 재고 정보와 다음 번 입하일 (재충전일?)을 추출합니다.

ikea.rb
require 'nokogiri'
require 'open-uri'
# url末尾の8桁の数字は商品番号
url = 'https://www.ikea.com/jp/ja/iows/catalog/availability/10373589'

xml = Nokogiri::XML(open(url).read)

STORE_NAME = { "447" => "船橋", "448" => "港北", "887" => "新三郷",
               "486" => "神戸", "392" => "仙台", "509" => "長久手",
               "496" => "鶴浜", "189" => "福岡新宮", "359" => "立川" }

# XMLのルートのノードから探して一致したNodeSetオブジェクトを返す→9店舗分のlocalStoreを取得
item_nodes = xml.xpath('//availability/localStore')

item_nodes.each do |item|
  # attribute('xx')でlocalStoreのxx属性の属性値を取得
  store_code = item.attribute('buCode').text
  puts "店名:#{STORE_NAME[store_code]}(#{store_code})"
  # localStore以下のstockノードを探してNodeSetで返す
  item.xpath('stock').each do |store|
    puts '在庫数:' + store.xpath('availableStock').text
    if store.xpath('restockDate').any?
      puts '次回入荷日:' + store.xpath('restockDate').text
    else
      puts '次回入荷日:不明'
    end
  end
  puts "-------------------------"
end

움직여 보자


할 수 있었다! !

간단히 설명


open(url).read 에서 url 응답의 본문 부분을 문자열로 가져옵니다.
Nokogiri::XML(open(url).read) 에서 바디 부분 문자열에서Nokogiri::XML::Document 객체 생성
xml.xpath('//availability/localStore') 에서 Nokogiri::XML::NodeSet 라는 배열과 같은 객체를 가져옵니다. 이제 처리하려는 대상 데이터를 추출 할 수있었습니다.



또, xpath 메소드의 사용법은, 이번과 같이 xpath('//hoge') 로 대원으로부터 데이터를 찾아, NodeSet 객체에 대해서 한층 더 xpath('piyo')
일부 NodeSet에는 Nokogiri::XML::Element 객체가 포함되어 있습니다.
> item_nodes[1].class
=> Nokogiri::XML::Element

Element 객체에 대해 attribute('buCode') 로 속성명과 속성이 포함된 Attr 객체를 취득해, Attr에 text 메소드를 호출하면 속성치를 꺼낼 수 있다
> item_nodes[1].attribute('buCode')
=> #(Attr:0x3663e58 { name = "buCode", value = "448" })
> item_nodes[1].attribute('buCode').text
=> "448" #店舗コード

마찬가지로 Element에 text 메서드를 호출하면 태그의 값을 호출할 수 있습니다.
> item_nodes[0].xpath('stock')[0].xpath('availableStock').text
=> "73" #執筆時のIKEA船橋店のサメの在庫数

끝에



나중에 Qiita에서 검색해 보면 IKEA의 재고 확인하고 있는 기사가 꽤 발견되었습니다. 생각하는 것은 같네요.
그리고 자신은 아직 IKEA 상어를 맞이할 수 없습니다. . .

10/28일 추가

이전 IKEA 상어를 집에 맞이할 수있었습니다 🦈🎉

참고 사이트




htps : //에서 v.ぁsss d. jp / 와 l / xml 톱 - xml - rrse /

좋은 웹페이지 즐겨찾기