데이터 CLI Gem 프로젝트 편평철학교(mod1 프로젝트)!
8136 단어 flatironschoolcliprojectruby
CLI 데이터 보석 조합 프로젝트
오늘 날짜를 보니 한 달 전에 플레티론 학교에서 제 겸직 소프트웨어 공학 과정을 시작했다는 것을 깨달았습니다.그 전에, 나의 모든 프로그래밍은 취미 항목을 반복해서 시험하고 검색하는 것이다.하지만 지금까지 나는 이번 모험을 즐겼다.
이제 한 달 동안의 프로젝트에서 우리는 첫 번째 투자조합 프로젝트를 시작할 때가 되었다.어디부터??
다행히도 다음과 같은 프로젝트 요구 사항을 제공합니다.
CLI 제공
CLI 애플리케이션은 웹 데이터에 대한 액세스를 제공해야 합니다.
제공된 데이터는 최소한 한 층 깊이 들어가야 한다.
좋은 OO 디자인 모드를 사용합니다.데이터를 저장하기 위해 산열이 아닌 대상 집합을 만들어야 합니다.
첫걸음
어디서부터 무엇을 프로젝트로 선택해야 하는가.나는 곧 http://top40.nl 에 열거된 네덜란드 40위권 안에 드는 인기 명단을 사용하기로 결정했다. 네덜란드 사람들이 나를 그 방향으로 밀어붙였는지, 그리고 내가 삭제할 수 있는 명단을 열거하는 데 도움을 주었다.
두 번째 단계
다음 단계는gem를 기획하고 어떤 종류를 사용하며 어떻게 상호작용할 것인지입니다.나는 http://draw.io로 나의 프로그램이 어떤 모습이어야 한다고 생각하는 개술을 만들었다
http://github.com/raspimeteo/dutch_top40/blob/master/dutch_top40_flowchart.jpg
세 번째 단계
이 프로젝트의 페이지에서 그는 Avi로부터 유튜브 동영상을 올렸다. 그는 어떻게gem을 구축하고 당신의 프로그램에 프레임워크를 만드는지 잘 지적했다.VisualStudio 코드를 사용하면 명령을 내리기만 하면 매우 간단합니다.bundle gem dutch top40 명령을 실행하면 bundler가 프로그램의 전체 디렉토리 트리를 생성합니다.나머지는 필요한 수요를 적당한 위치에 두는 것뿐이다. 예를 들어'개방uri'와'nokogiri'등은 스크랩에 필요한 것이다.디버깅에 대해 프로그램의 작업 상황을 볼 수 있도록pry를 추가했습니다.
github에 저장소를 만들고 프로젝트를 github에 보낼 때가 되었습니다.불행하게도, 이번 주에github에서 github 접근이 신뢰할 수 없는 중단을 처리하고 있습니다.하지만 나는 임무를 성공적으로 완수했다.
4단계
물건을 제자리에 놓을 때가 되었다.프로세스 맵에 따라 세 가지 클래스 CLI, Songs 및 Scraper 및 메서드를 만들어야 합니다.나는 CLI 클래스부터 가짜 데이터와 간단한puts 명령을 사용하여 연결된 물건이 예상한 출력을 출력하고 있는지 확인한다.CLI가 실행되고 필요한 옵션이 주어지면 Songs 클래스에서 시작할 때가 되었습니다.상위 40개 사이트를 살펴보면 한 페이지에서 얻을 수 있는 정보를 볼 수 있다.Songs류는 실제로 응용 프로그램의 주력이기 때문에 저는 데이터 얻기에 너무 몰두했고 scraper도 Songs류에 잘못 넣었습니다.이 사이트는 이 목록을 얻기 위해 두 가지 옵션이 있다.홈 페이지 또는 더 깊이http://top40.nl/top40.두 번째 페이지에 표시된 정보가 홈 페이지보다 뚜렷하기 때문에, 나는 그 중에서 데이터를 추출하려고 한다.이 모든 것이 작동하고 있고 사용할 태그를 찾았지만 다른 열에 같은 태그가 있어서 그룹 요소가 비어 있는 것을 발견했습니다.이로 인해 내 게시물 캡처가 실패했다.말할 필요도 없이, 이것은 나에게 약간의 시간을 썼다.어쨌든 나는 홈페이지로 돌아왔고 리플도 사용했다.그것은 검사 도구를 사용해서 홈페이지에서 더 좋은 결과를 찾았다.
내가 우리 팀 지도자와 만나기로 예정한 후, 그녀는 또 내가 스크레이퍼를 자신의 교실에 놓아야 한다고 지적했다.
더 나은 모양새를 위해 top40 로고를 ASCII로 변환하여 CLI 클래스에서 로고로 사용합니다.
class DutchTop40::CLI
def call
logo
puts "One moment, acquiring data.",""
list_songs
# binding.pry
menu
end
def list_songs
@songs = DutchTop40::Songs.list
print_songs
puts
end
def print_songs
puts "Dutch Top40 - week #{Time.now.strftime("%U")}", ""
@songs.each.with_index(1) do |song, index|
puts "#{index}. #{song.title}"
end
end
def menu
input = nil
while input != 'exit'
puts "Which song do you want more info on? Type list to see list again, type exit to quit.",""
input = gets.strip.downcase
case input.to_i
when [email protected]
puts "------------------------------------------------------------------------------------"
puts "Current rank #{input}."
puts "------------------------------------------------------------------------------------"
puts "#{@songs[input.to_i-1].title} - performing artist(s): #{@songs[input.to_i-1].name}"
puts "weeks in Top40: #{@songs[input.to_i-1].listed} - last weeks rank: #{@songs[input.to_i-1].last_weeks_rank}"
puts "------------------------------------------------------------------------------------"
else
puts "Invalid input!" unless input == 'exit' || input == 'list'
if input == 'list'
print_songs
end
if input == 'exit'
goodbye
end
end
end
end
def goodbye
logo
puts "See you next time..."
end
def logo
puts "
** logo removed because the blog markup messed up the way it was displayed **"
end
end
보시다시피 CLI는 매우 간단합니다.프로그램이 시작되면 Bin 파일에서 DutchTop40::CLI 호출 call 메서드를 사용합니다.새것전화를 걸다.호출 방법 중 첫 번째 동작은 top40 로고의 ASCII 표시를 표시하기 위해 로고 방법을 호출한 다음list songs 방법을 호출하는 것입니다.이list songs 메서드는 Songs 클래스의 list 메서드를 순차적으로 호출합니다.그곳에서 되돌아온 대상 그룹은 @songs에 저장됩니다.다음은 print songs 메서드 호출입니다.print songs 메서드에서 프로그램은 배열을 반복하여 노래 제목 목록을 인쇄합니다.다음 줄 코드는menu 방법을 호출합니다.메뉴는 동적입니다. 비록 예상 출력이 항상 40이지만.그러나 노래 제목의 모든 40개의 옵션을 프로그래밍할 필요가 없이 일을 간소화했다.마지막으로 잘못된 입력에 대한 검사입니다. 목록과 종료 옵션 두 가지 옵션에 공간을 제공합니다.class DutchTop40::Songs
attr_accessor :title, :name, :listed, :last_weeks_rank
@@songs = []
def initialize(title, name, listed, last_weeks_rank)
@title = title
@name = name
@listed = listed
@last_weeks_rank = last_weeks_rank
@@songs << self
end
def self.list
DutchTop40::Scraper.scrape_songs
@@songs
end
end
Songs 클래스에서 스크레이퍼를 제거하면 스크레이퍼가 거의 간소화됩니다.현재 기본 작업은list 방법을 호출하고, Scraper 클래스를 호출하며, scrape 방법으로 실제 스크래치를 하는 것입니다.Scraper::scrape songs 메서드는 initialize 메서드를 호출하여 제공된 변수로 새 song 객체를 만듭니다.initialize 방법은 노래 대상을 만드는 데 저장합니다 @
. 스크랩이 완료되면list 메서드는 @songs 배열을 CLI 클래스에 반환합니다.이 클래스에서, 나는 변수를 저장하는 방법을 만들기 위해 속성 액세서리가 필요하다.
class DutchTop40::Scraper
attr_accessor :title, :name, :listed, :last_weeks_rank
def self.scrape_songs
doc = Nokogiri::HTML(open("http://top40.nl"))
doc.search('.listScroller .list-right').each do |song|
# binding.pry
title = song.css('.songtitle').text.strip
name = song.css('.artist').text
details = song.css('.details').text
listed = details.split(' | ')[1].gsub(/Aantal weken: /,'').strip
if details.split(' | ')[0].gsub(/Vorige week: #/,'').strip == '-'
last_weeks_rank = 'new entry'
else
last_weeks_rank = details.split(' | ')[0].gsub(/Vorige week: #/,'').strip
end
DutchTop40::Songs.new(title, name, listed, last_weeks_rank)
end
end
end
위에서 말한 바와 같이 캡처는 가장 도전적인 부분이지만, 위에서 열거한 코드를 통해 나는 내가 필요로 하는 모든 정보를 얻을 수 있다.나는 노래 정보에도 URL이 포함되어 있기 때문에 노래를 더욱 깊이 있게 캡처할 수 있다.이 URL은 공연 예술가에 대한 일반적인 정보를 포함하는 페이지를 가리킨다.그러나 정보를 얻기 위해서는 두 번째 스크랩 프로그램이 필요하다.scrape songs 메서드의 아래쪽에서 DutchTop40:::songs에 대한 호출을 볼 수 있습니다.새로운 제목, 이름, 명단과 마지막 몇 주 순위 전달.이렇게 하면 Songs 클래스가 해당 노래를 사용하여 만든 모든 객체를 포함하는 객체 배열을 만듭니다.새 명령.마지막 걸음
마지막 단계는 CLI 클래스가 인터페이스를 잘 보여주고 정보를 제공할 수 있도록 미화하는 것이다.어떻게 작동하는지 보고 싶으면 네덜란드어 top40을 다운로드할 수 있다.루비게이지의 보석.org 또는 다운로드 환매 협의, 주소는 https://github.com/raspimeteo/dutch_top40
Reference
이 문제에 관하여(데이터 CLI Gem 프로젝트 편평철학교(mod1 프로젝트)!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/johnzonneveld/data-cli-gem-project-flatiron-school-mod1-project-cmp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)