지역별 날씨는 Rails 및 Livedoor Weather 웹 서비스로 표시

14280 단어 RubyRails

개시하다


지난 기사에서는 루비로부터 날씨 정보를 얻을 수 있었다.
Ruby에서 Weather Hacks로 날씨를 얻었어요.
처리 및 Rails를 사용하여 웹에 날씨 정보를 표시할 수 있습니다.

컨디션


macOS Mojave(10.14.4)
Ruby 2.6.3
Rails 5.2.3

가져오기 처리


다음 순서에 따라 각 지점의 날씨 정보를 얻습니다.
  • 표시할 사이트 이름 읽기
  • Livedoor Weather 웹 서비스에서 제공하는 도시와 1, 추출장 id
  • 지역별 날씨 정보 얻기
  • 표시할 사이트 이름 읽기


    텔레비전의 전국 날씨에서 자주 보이는 각 지점의 json 파일을 제작한다.
    main_city.json
    {
      "city":[
        {
          "name": "釧路"
        },
        {
          "name": "旭川"
        },
    ・・・略・・・
        {
          "name": "那覇"
        },
        {
          "name": "石垣島"
        }
    
    이것을 읽을 처리를 만듭니다.
      def read
        file_path = File.expand_path('config/main_city.json', __dir__)
        @city_list = []
        File.open(file_path, 'r') do |text|
          @parse_text = JSON.parse(text.read)
          @parse_text['city'].each { |city|
            @city_list.push(city['name'])
          }
        end
      end
    

    Livedoor Weather Web Service에서 제공하는 도시와 1을 사용하여 각 지점의 id를 꺼냅니다.


    제공된 사이트의 ID를 json 파일로 씁니다.
    location_id.json
    {
        "area":
        [
            {
                "name": "北海道",
                "prefs":[
                    {
                        "name": "北海道",
                        "city":[
                            {
                                "name": "稚内",
                                "id": "011000"
                            },
                            {
                                "name": "旭川",
                                "id": "012010"
                            },
    ・・・略・・・
                            {
                                "name": "石垣島",
                                "id": "474010"
                            },
                            {
                                "name": "与那国島",
                                "id": "474020"
                            }
                        ]
                    }
                ]
            }
        ]
    }
    
    이 json 파일을 읽고 장소별 id를 가져옵니다.
    단순히 포환으로 돌릴 뿐이다.
    더 좋은 방법이 있을 것 같은데 지금 이 방법으로 해요.
      def read_main_location_id
        parse_text = read_location_id
    
        location_list = LocationList.new
        reader = MainCityReader.new
        reader.read
        area = parse_text['area']
        for area_no in 0..area.count - 1
          prefs = area[area_no]['prefs']
          for pref_no in 0..prefs.count - 1
            city = prefs[pref_no]['city']
            for city_no in 0..city.count - 1
              city_name = city[city_no]['name']
              if reader.contain?(city_name)
                location = Location.new
                location.area_name = area[area_no]['name']
                location.pref_name = prefs[pref_no]['name']
                location.location_name = city_name
                location.id = city[city_no]['id']
                location_list.add(location)
              end
            end
          end
        end
        return location_list
      end
    
      private
    
      def read_location_id
        file_path = File.expand_path('config/location_id.json', __dir__)
        parse_text = ''
        File.open(file_path, 'r') do |text|
          parse_text = JSON.parse(text.read)
        end
        return parse_text
      end
    

    각지의 날씨 정보를 얻다


    id로 URL을 만듭니다.
      BASE_URL = 'http://weather.livedoor.com/forecast/webservice/json/v1?city='.freeze
      def create(location_id)
        return BASE_URL + location_id.to_s
      end
    
    URL에서 날씨 정보를 가진 json 파일을 가져옵니다.
      def read(url)
        response = URI.open(url)
        @parse_text = JSON.parse(response.read)
      end
    
    이후 제이슨에서 날씨 정보를 얻는 것은 끝났다.

    결과 표시


    전국 5/24 날씨를 간단히 보여준 결과다.

    5월 24일은 전국이 맑은 날씨인 것 같아요.

    금후


    다음으로 하고 싶은 것은 다음과 같은 세 가지다.
  • 최고 기온과 최저 기온을 얻을 수 있기 때문에 화면에 추가
  • 각 지점을 클릭하면 해당 지역의 상세한 날씨
  • 를 볼 수 있습니다.
  • 로그인 기능이 있어 내일과 모레 날씨를 표시할 수 있음
  • 독학 루비가 썼기 때문에 지적사항이 있으면 댓글로 남겨주세요.

    좋은 웹페이지 즐겨찾기