Поиск в Интернете и чтение документов, но не смогли найти ответ.Я довольно новичок и изучаю Ruby. Я хотел сделать следующий сценарий.
Сценарий, по сути, выполняет поиск несущей по списку номеров, которые предоставляются через файл CSV.Файл CSV имеет только одну строку с заголовком столбца «число».
Все работает нормально, пока API не выдаст вывод, отличный от других.В этом примере он говорит мне, что одно из чисел в моем файле не является действительным номером США.Это приводит к тому, что мой скрипт перестает работать.
Я смотрю, есть ли способ игнорировать его (я читал о Begin и End, но не смог заставить его работать) или в идеале либо создать отдельный файл с этими ошибками, либо простопоместите данные в основной файл.
Любая помощь будет высоко ценится.Спасибо.
Код Ruby:
require 'csv'
require 'uri'
require 'net/http'
require 'json'
number = 0
CSV.foreach('data1.csv',headers: true) do |row|
number = row['number'].to_i
uri = URI("https://api.message360.com/api/v3/carrier/lookup.json?PhoneNumber=#{number}")
req = Net::HTTP::Post.new(uri)
req.basic_auth 'XXX' , 'XXX'
res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) {|http|
http.request(req)
}
json = JSON.parse(res.body)
new = json["Message360"]["Carrier"].values
CSV.open("new.csv", "ab") do |csv|
csv << new
end
end
Данные файла:
number
5556667777
9998887777
Пример хорошего ответа в JSON:
{"Message360"=>{"ResponseStatus"=>1, "Carrier"=>{"ApiVersion"=>"3", "CarrierSid"=>"XXX", "AccountSid"=>"XXX", "PhoneNumber"=>"+19495554444", "Network"=>"Cellco Partnership dba Verizon Wireless - CA", "Wireless"=>"true", "ZipCode"=>"92604", "City"=>"Irvine", "Price"=>0.0003, "Status"=>"success", "DateCreated"=>"2018-05-15 23:05:15"}}}
Ответ, вызывающий остановку скрипта:
{
"Message360": {
"ResponseStatus": 0,
"Errors": {
"Error": [
{
"Code": "ER-M360-CAR-111",
"Message": "Allowed Only Valid E164 North American Numbers.",
"MoreInfo": []
}
]
}
}
}