News API API in Ruby
News API API in Ruby
This guide shows you how to integrate the News API into your Ruby application. Headlines and articles from 80,000+ worldwide news sources.
Prerequisites
- Ruby installed on your system
- An News API API key (sign up at https://newsapi.org)
- Basic familiarity with HTTP APIs
Installation
gem install httparty
Basic Usage
require 'net/http'
require 'json'
require 'uri'
api_key = ENV['API_KEY'] || 'YOUR_API_KEY'
base_url = 'https://api.newsapi.org'
uri = URI("#{base_url}/v1/resources")
request = Net::HTTP::Get.new(uri)
request['Authorization'] = "Bearer #{api_key}"
request['Content-Type'] = 'application/json'
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(request)
end
puts "Status: #{response.code}"
puts response.body
Error Handling
require 'net/http'
require 'json'
require 'uri'
def call_api_with_retry(url, headers, max_retries = 3)
uri = URI(url)
max_retries.times do |attempt|
request = Net::HTTP::Get.new(uri)
headers.each { |k, v| request[k] = v }
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(request)
end
if response.code == '429'
sleep(60)
next
end
return response unless response.code.to_i >= 500
sleep(2 ** attempt)
end
raise "Max retries exceeded"
end
url = 'https://api.newsapi.org/v1/resources'
headers = { 'Authorization' => "Bearer #{ENV['API_KEY']}", 'Content-Type' => 'application/json' }
response = call_api_with_retry(url, headers)
puts response.body
Advanced Usage
require 'net/http'
require 'json'
require 'uri'
class NewsapiClient
def initialize(api_key, base_url = 'https://api.newsapi.org')
@api_key = api_key
@base_url = base_url.chomp('/')
end
def request(method, path, body = nil)
uri = URI("#{@base_url}/v1#{path}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
request_class = Net::HTTP.const_get(method.capitalize)
request = request_class.new(uri)
request['Authorization'] = "Bearer #{@api_key}"
request['Content-Type'] = 'application/json'
request.body = body.to_json if body
response = http.request(request)
raise "API Error: #{response.code}" if response.code.to_i >= 400
JSON.parse(response.body)
end
def list_resources(params = {})
query = URI.encode_www_form(params)
path = "/resources#{query.empty? ? '' : '?' + query}"
request('get', path)
end
def create_resource(data)
request('post', '/resources', data)
end
end
client = NewsapiClient.new(ENV['API_KEY'] || 'YOUR_API_KEY')
resources = client.list_resources(limit: 50)
puts "Found #{resources['data']&.length || 0} resources"
Best Practices
- Store your API key in an environment variable, never in source code
- Implement retry logic with exponential backoff for 429 and 5xx errors
- Set reasonable timeouts (10-30 seconds) for all API calls
- Log request IDs from response headers for debugging
- Cache responses where appropriate to reduce API calls