前提・実現したいこと
Ruby初学者です。
RubyでMicroSoft社の検索エンジンBingのAPIを使用し「dog」のワードで検索時の画像データをクロールしてきて、PCへ保存したいと考えています。
以下のコードを実行すると、エラーが表示されました。
###該当のコード
ruby
1require "open-uri" 2require "FileUtils" 3require 'net/http' 4require 'json' 5 6# 保存先ディレクトリ 7@dirName = "./dog_image/" 8# 保存用ディレクトリを作る(ディレクトリがない場合は新たにディレクトリを作成) 9FileUtils.mkdir_p(@dirName) unless FileTest.exist?(@dirName) 10 11# 画像URLから指定フォルダに画像を保存する関数 12def save_image(url, num) 13 filePath = "#{@dirName}/dog#{num.to_s}.jpg" 14 open(filePath, 'wb') do |output| 15 open(url) do |data| 16 output.write(data.read) 17 end 18 end 19end 20 21# 検索ワード 22search_word = 'dog' 23# 保存する枚数(APIの仕様上一気に150枚が限界) 24count = 10 25 26# Bing Search API(公式のコードをそのまま使用) 27# https://dev.cognitive.microsoft.com/docs/services/56b43f0ccf5ff8098cef3808/operations/571fab09dbe2d933e891028f 28uri = URI('https://api.cognitive.microsoft.com/bing/v7.0/images/search') 29uri.query = URI.encode_www_form({ 30 'q' => search_word, 31 'count' => count 32 # 'offset' => 150(指定した数だけ検索結果をスキップ) 33}) 34request = Net::HTTP::Post.new(uri.request_uri) 35request['Content-Type'] = 'multipart/form-data' 36request['Ocp-Apim-Subscription-Key'] = "自分のAPIキー" # Fix Me 37request.body = "{body}" 38response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http| 39 http.request(request) 40end 41 42# searchwordの検索画像をcountの枚数だけ保存する 43count.times do |i| 44 begin 45 image_url = JSON.parse(response.body)["value"][i]["thumbnailUrl"] 46 save_image(image_url, i) 47 rescue => e 48 puts "image#{i} is error!" 49 puts e 50 end 51end 52
発生している問題・エラーメッセージ
image0 is error! undefined method `[]' for nil:NilClass image1 is error! undefined method `[]' for nil:NilClass image2 is error! undefined method `[]' for nil:NilClass image3 is error! undefined method `[]' for nil:NilClass image4 is error! undefined method `[]' for nil:NilClass image5 is error! undefined method `[]' for nil:NilClass image6 is error! undefined method `[]' for nil:NilClass image7 is error! undefined method `[]' for nil:NilClass image8 is error! undefined method `[]' for nil:NilClass image9 is error! undefined method `[]' for nil:NilClass
あなたの回答
tips
プレビュー