class News

Constants

BASE_URL
VERSION

Public Class Methods

new(api_key) click to toggle source
# File lib/news-api.rb, line 12
def initialize(api_key)
    @api_key = api_key
end

Public Instance Methods

get_everything(**args) click to toggle source
# File lib/news-api.rb, line 21
def get_everything(**args)
    endpoint = 'everything'
    return _get_everything(endpoint, **args)
end
get_sources(**args) click to toggle source
# File lib/news-api.rb, line 26
def get_sources(**args)
    endpoint = 'sources'
    request = _make_request(endpoint, **args)
    status = request['status']
    sources = request['sources']
    data = Array.new
    sources.each do |v|
        data.push(
            Source.new(
                v["id"], v["name"], v["description"],
                v["url"], v["category"], v["language"],
                v["country"]
            )
        )
    end
    return data
end
get_top_headlines(**args) click to toggle source
# File lib/news-api.rb, line 16
def get_top_headlines(**args)
    endpoint = 'top-headlines'
    return _get_everything(endpoint, **args)
end

Private Instance Methods

_get_everything(endpoint, **args) click to toggle source
# File lib/news-api.rb, line 73
def _get_everything(endpoint, **args)
    request = _make_request(endpoint, **args)
    status = request['status']
    totalResults = request['totalResults']
    articles = request['articles']
    data = Array.new
    articles.each do |a|
        data.push(
            Everything.new(
                a["source"], a["author"], a["title"],
                a["description"], a["content"], a["url"],
                a["urlToImage"], a["publishedAt"]
            )
        )
    end
    return data
end
_make_request(endpoint, **queries) click to toggle source
# File lib/news-api.rb, line 46
def _make_request(endpoint, **queries)
    params = eval(queries.inspect)
    uri = URI(_make_request_string(endpoint, params))
    req = Net::HTTP::Get.new(uri)
    req['X-Api-Key'] = @api_key
    res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) { |http| http.request(req) }
    json = JSON.parse(res.body)
    if res.code == '200'
        return json
    elsif res.code == '401'
        raise UnauthorizedException, json
    elsif res.code == '400'
        raise BadRequestException, json
    elsif res.code == '429' || res.code == '426'
        raise TooManyRequestsException, json
    elsif res.code == '500'
        raise ServerException, json
    end
end
_make_request_string(endpoint, params) click to toggle source
# File lib/news-api.rb, line 66
def _make_request_string(endpoint, params)
    url = BASE_URL + endpoint + '?'
    params.each { |key, value| url += key.to_s + '=' + value.to_s + '&' }
    url = url[0..-2]
    return url
end