Rubyを用いて、APIを取得してSlackに送信するプログラムを書いているのですが、以下のハッシュの使い方が汚いと感じました。eachメソッドを用いるとうまくデータが取得できず、下記よりも効率的な書き方を、教えて頂きたいです。
lang
1 size.times do |i| 2 vulners_datas[i]['id'] = result['data']['search'][i]['_source']['id'] 3 vulners_datas[i]['title'] = result['data']['search'][i]['_source']['title'] 4 vulners_datas[i]['href'] = result['data']['search'][i]['_source']['href'] 5 vulners_datas[i]['published'] = result['data']['search'][i]['_source']['published'] 6 vulners_datas[i]['modified'] = result['data']['search'][i]['_source']['modified'] 7 vulners_datas[i]['description'] = result['data']['search'][i]['_source']['description'] 8 vulners_datas[i]['cvss_score'] = result['data']['search'][i]['_source']['cvss']['score'] 9 print vulners_datas[i]['id'] + "\t\t" +vulners_datas[i]['modified'] + "\n" 10 end 11
プログラムの内容は以下の通りです。
➀Vulners APIから脆弱情報をJSON形式で取得する。
➁取得したデータをハッシュに格納する。
➂格納したデータをSlackに送信。
get-vulners.rb
lang
1def get_vulners(size) 2 #1.Vulners APIを取得 3 vulners_datas = Hash.new{ |h,k| h[k] = {}} 4 5 uri = URI.parse("https://vulners.com/api/v3/search/lucene" + "/?query=type%3Acisco" + "&sort=order%3Apublished" + "&size=#{size}") 6 json = Net::HTTP.get(uri) 7 result = JSON.parse(json) 8 9 #返ってきた値をvulners_datasに格納 10 size.times do |i| 11 vulners_datas[i]['id'] = result['data']['search'][i]['_source']['id'] 12 vulners_datas[i]['title'] = result['data']['search'][i]['_source']['title'] 13 vulners_datas[i]['href'] = result['data']['search'][i]['_source']['href'] 14 vulners_datas[i]['published'] = result['data']['search'][i]['_source']['published'] 15 vulners_datas[i]['modified'] = result['data']['search'][i]['_source']['modified'] 16 vulners_datas[i]['description'] = result['data']['search'][i]['_source']['description'] 17 vulners_datas[i]['cvss_score'] = result['data']['search'][i]['_source']['cvss']['score'] 18 print vulners_datas[i]['id'] + "\t\t" +vulners_datas[i]['modified'] + "\n" 19 end 20 #2.Slackの着信Webフック 21 slack = Slack::Incoming::Webhooks.new("ここにトークンを記述") 22 slack.post("新たな脆弱性をキャッチしました。") 23 size.times do |i| 24 slack.post "#{i + 1}件目".to_json 25 slack.post vulners_datas[i]['modified'].to_json 26 slack.post vulners_datas[i]['id'].to_json 27 slack.post vulners_datas[i]['href'].to_json 28 slack.post vulners_datas[i]['cvss_score'].to_json 29 slack.post (vulners_datas[i]['description']).to_json 30 end 31 #TODO Slackに送信できたかどうかを確認してターミナルに出力 32end 33 34print "件数:" 35input = gets.chomp.to_i 36get_vulners(input)
質問自体は表題の通りなのですが、API関連など、もしアドバイスがありましたらそちらも是非お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/14 13:33