google_news 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: df4beeb3e71a539fd40e36aff03536fd8239976510093a0af1f7c8cbc91df797
4
- data.tar.gz: dbc67f83eed942876a9ac46e7763de6d19dbebdd135fe6d9ca09867ea0bc2282
3
+ metadata.gz: 6168625d6e729f8fa19728bb27caed64749d600c55550edb80c4370775b2eb96
4
+ data.tar.gz: 91c7cdb1d9b6ad61e621f3c914cbf117c2dd7aabc86bc5e62e4856a500d2f6f0
5
5
  SHA512:
6
- metadata.gz: 68e12a403a5a857760ae821d4b8a6d9532b4825fbf7302a0cdfa40753945730ead7d0788bb459e5f67aa716c83be85d48bbf98e15fb53b434c1556e29f26676f
7
- data.tar.gz: 695d594b22921aabc3ca570407c34bd9d47d227c188f39ad001b3c5d12f3ff1a6c515fdf9d87b5a3c3a1646ada27e5e76101159b654da89721d58a771e93c048
6
+ metadata.gz: 447e5eb18577d9cb5c0cfce07e68c1527224de5113838ea173d4a2b2f1fe84ff1a84bd58000358b0a5d8d8a257bdb43b0ae5fd13f7be4ad00b5c505021d3764f
7
+ data.tar.gz: 2736ba54da2962201979a53d57029c15d52cb4c2985ea0690e6731887cfff04aab582848e7d860a87c2f410a71ab6126c5d84a40942f4082ac7c104b7c28d91e
data/.gitignore CHANGED
@@ -12,4 +12,4 @@
12
12
  *.gem
13
13
 
14
14
  # rspec failure tracking
15
- .rspec_status
15
+ .rspec_status
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
1
  --format documentation
2
2
  --color
3
+ --require spec_helper
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.4.6
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ ---
2
+ language: ruby
3
+ cache: bundler
4
+ rvm:
5
+ - 3.3.5
6
+ before_install: gem install bundler -v 2.7.1
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # 0.1.0
2
+ - refactored headline output to have parsed description(s) as Array with Hashes instead of one string
3
+
4
+ # 0.0.1
5
+ - initial alpha release with basic features, most is untested
data/README.md CHANGED
@@ -73,7 +73,25 @@ require 'google_news'
73
73
 
74
74
  results = GoogleNews.headlines n: 5 # get top 5 news in default language (country: us, language: en)
75
75
  puts results
76
- # => [{"title"=>"Title of the news article", "link"=>"https://link.to/the/article", "pubDate"=>"Wed, 01 Jan 2024 00:00:00 GMT", "source"=>"Source Name"}, ...]
76
+ # => [
77
+ # {
78
+ # :title => "Title of the news article",
79
+ # :link => "https://link.to/the/article",
80
+ # :pub_date => Time("Wed, 01 Jan 2024 00:00:00 GMT"),
81
+ # :descriptions => [
82
+ # {
83
+ # :title => "First article, like :title",
84
+ # :link => "https://link.to/the/first/article",
85
+ # :author => "Author Name",
86
+ # },
87
+ # {
88
+ # :title => "Second article, same topic, similiar to first",
89
+ # :link => "https://link.to/the/second/article",
90
+ # :author => "Another Author Name",
91
+ # },
92
+ # ...
93
+ # ],
94
+ # ]
77
95
  ```
78
96
 
79
97
 
data/Rakefile CHANGED
@@ -9,9 +9,25 @@ task :default do
9
9
  end
10
10
 
11
11
  task :console do
12
- require_relative '../lib/google_news'
13
- require 'irb'
14
- IRB.start(__FILE__)
12
+ require_relative 'lib/google_news'
13
+ require 'pry'
14
+ Pry.start
15
15
  end
16
16
 
17
+ namespace :example do
18
+ task :headlines do
19
+ require_relative 'lib/google_news'
20
+ headlines = GoogleNews.headlines(n: 10, language: 'de', country: 'de')
21
+ headlines.each do |item|
22
+ puts "Title: #{item[:title]}"
23
+ puts "Link: #{item[:link]}"
24
+ puts "Published At: #{item[:pub_date].class}"
25
+ puts "Descriptions: #{item[:descriptions]}"
26
+ puts "-" * 40
27
+ end
28
+ end
29
+
30
+ end
31
+
32
+
17
33
  RSpec::Core::RakeTask.new(:spec)
data/bin/console CHANGED
@@ -1,14 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'bundler/setup'
4
- require_relative '../lib/google_news'
5
-
4
+ require 'google_news'
6
5
  # You can add fixtures and/or initialization code here to make experimenting
7
6
  # with your gem easier. You can also use a different console, if you like.
8
7
 
9
8
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require 'pry'
11
- # Pry.start
9
+ require "pry"
10
+ Pry.start
12
11
 
13
- require 'irb'
14
- IRB.start(__FILE__)
12
+ #require "irb"
13
+ #IRB.start(__FILE__)
data/bin/google_news CHANGED
@@ -1,31 +1,33 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative '../lib/google_news'
3
+ require_relative '../lib/google_news/cli'
4
4
 
5
- arg = ARGV[0]
6
5
 
7
- if %w[help -h --help].include?(arg) || arg.nil? || arg == ''
8
- puts <<-TEXT
9
-
10
- google_news #{GoogleNews::VERSION}
11
- https://github.com/magynhard/google_news
6
+ GoogleNews::CLI.run
12
7
 
13
- Usage:
14
- google_news [options]
15
- Options:
16
- -h, --help Show this help message
17
- -v, --version Show version
18
- -n, --number N Number of headlines to fetch (default: 10)
19
- -c, --country CC Country code (default: "us")
20
- -l, --language LL Language code (default: "en")
21
- --headlines Fetch top headlines
22
- --topic TOPIC Fetch headlines for a specific topic (WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH)
23
- --geo LOCATION Fetch headlines for a specific geographic location (e.g. "48.8566,2.3522" for Paris)
24
- --search QUERY Search headlines for a specific query
25
- --website SITE Fetch headlines from a specific website (e.g. "bbc.com")
26
-
27
- TEXT
28
- elsif %w[]
29
- else
30
- puts "Invalid command or option. Use --help for usage information."
31
- end
8
+ #
9
+ # if %w[help -h --help].include?(arg) || arg.nil? || arg == ''
10
+ # puts <<-TEXT
11
+ #
12
+ # google_news #{GoogleNews::VERSION}
13
+ # https://github.com/magynhard/google_news
14
+ #
15
+ # Usage:
16
+ # google_news [options]
17
+ # Options:
18
+ # -h, --help Show this help message
19
+ # -v, --version Show version
20
+ # -n, --number N Number of headlines to fetch (default: 10)
21
+ # -c, --country CC Country code (default: "us")
22
+ # -l, --language LL Language code (default: "en")
23
+ # --headlines Fetch top headlines
24
+ # --topic TOPIC Fetch headlines for a specific topic (WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH)
25
+ # --geo LOCATION Fetch headlines for a specific geographic location (e.g. "48.8566,2.3522" for Paris)
26
+ # --search QUERY Search headlines for a specific query
27
+ # --website SITE Fetch headlines from a specific website (e.g. "bbc.com")
28
+ #
29
+ # TEXT
30
+ # elsif %w[]
31
+ # else
32
+ # puts "Invalid command or option. Use --help for usage information."
33
+ # end
data/bin/setup CHANGED
File without changes
data/google_news.gemspec CHANGED
@@ -4,24 +4,21 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'google_news/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "google_news"
8
- spec.version = GoogleNews::VERSION
9
- spec.executables = %w[google_news]
10
- spec.authors = ["Matthäus J. N. Beyrle"]
11
- spec.email = ["google_news.gemspec@mail.magynhard.de"]
7
+ spec.name = "google_news"
8
+ spec.version = GoogleNews::VERSION
9
+ spec.executables = %w[google_news]
10
+ spec.authors = ["Matthäus J. N. Beyrle"]
11
+ spec.email = ["google_news.gemspec@mail.magynhard.de"]
12
12
 
13
- spec.summary = %q{Get Google News headlines from Ruby or the command line.}
14
- spec.homepage = "https://github.com/magynhard/google_news"
15
- spec.license = "MIT"
13
+ spec.summary = %q{Get Google News headlines from Ruby or the command line.}
14
+ spec.homepage = "https://github.com/magynhard/google_news"
15
+ spec.license = "MIT"
16
16
 
17
- # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
- # to allow pushing to a single host or delete this section to allow pushing to any host.
19
- if spec.respond_to?(:metadata)
20
- spec.metadata['allowed_push_host'] = "https://rubygems.org"
21
- else
22
- raise "RubyGems 2.0 or newer is required to protect against " \
23
- "public gem pushes."
24
- end
17
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
18
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
19
+ spec.metadata['homepage_uri'] = spec.homepage
20
+ spec.metadata['source_code_uri'] = spec.homepage
21
+ spec.metadata['changelog_uri'] = "#{spec.homepage}/CHANGELOG.md"
25
22
 
26
23
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
24
  f.match(%r{^(test|spec|features)/})
@@ -29,11 +26,14 @@ Gem::Specification.new do |spec|
29
26
 
30
27
  spec.require_paths = ['lib']
31
28
 
32
- spec.add_runtime_dependency 'rss', '>= 0.2.6'
29
+ spec.add_runtime_dependency 'rss', '>= 0.2.6'
33
30
  spec.add_runtime_dependency 'open-uri', '>= 0.1.0'
34
31
 
35
- spec.add_development_dependency 'bundler', '>= 2.0'
36
- spec.add_development_dependency 'rake', '>= 10.0'
37
- spec.add_development_dependency 'rspec', '>= 3.0'
38
- spec.add_development_dependency 'pry', '>= 0.10.0'
32
+ spec.add_development_dependency 'bundler', '>= 2.7.1'
33
+ spec.add_development_dependency 'rake', '~> 12.0'
34
+ spec.add_development_dependency 'rspec', '~> 3.0'
35
+ spec.add_development_dependency 'pry', '~> 0.15.2'
36
+ spec.add_development_dependency 'fiddle', '~> 1.1.8'
37
+ spec.add_development_dependency 'ostruct', '~> 0.6.3'
38
+ spec.add_development_dependency 'nokogiri', '~> 1.18'
39
39
  end
@@ -0,0 +1,65 @@
1
+ require 'optparse'
2
+ require 'json'
3
+ require_relative '../google_news'
4
+
5
+ module GoogleNews
6
+ #
7
+ # Command-line interface for GoogleNews
8
+ #
9
+ class CLI
10
+ def self.run(args = ARGV)
11
+ options = { n: 10, language: 'en' }
12
+ opt_parser = OptionParser.new do |opts|
13
+ opts.banner = "Usage: google_news [options]"
14
+ opts.on('-tTOPIC', '--topic=TOPIC', 'Get news for a specific topic. One of: WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH') do |topic|
15
+ options[:topic] = topic
16
+ end
17
+ opts.on('-gPOSITION', '--geo=POSITION', 'Get news for a specific geographic location, e.g. "48.8566,2.3522" for Paris') do |position|
18
+ options[:geo] = position
19
+ end
20
+ opts.on('-cCOUNTRY', '--country=COUNTRY', 'Country code, e.g. "us" for United States (default: us)') do |country|
21
+ options[:country] = country
22
+ end
23
+ opts.on('-lLANGUAGE', '--language=LANGUAGE', 'Language code, e.g. "en" for English (default: en)') do |language|
24
+ options[:language] = language
25
+ end
26
+ opts.on('-nN', '--n=N', Integer, 'Number of headlines to fetch (default: 10)') do |n|
27
+ options[:n] = n
28
+ end
29
+ opts.on('-h', '--help', 'Show this help message') do
30
+ puts opts
31
+ exit
32
+ end
33
+ end
34
+ begin
35
+ opt_parser.parse!(args)
36
+ rescue OptionParser::InvalidOption => e
37
+ puts e.message
38
+ puts opt_parser
39
+ exit 1
40
+ end
41
+ show_logo
42
+ begin
43
+ if options[:headlines]
44
+ headlines = GoogleNews.headlines(country: options[:country] || 'us', language: options[:language] || 'en', n: options[:n] || 10)
45
+ elsif options[:topic]
46
+ headlines = GoogleNews.topic(options[:topic], country: options[:country] || 'us', language: options[:language] || 'en', n: options[:n] || 10)
47
+ elsif options[:geo]
48
+ headlines = GoogleNews.geo(options[:geo], country: options[:country] || 'us', language: options[:language] || 'en', n: options[:n] || 10)
49
+ else
50
+ headlines = GoogleNews.headlines(country: options[:country] || 'us', language: options[:language] || 'en', n: options[:n] || 10)
51
+ end
52
+ end
53
+ puts headlines.to_json
54
+ end
55
+
56
+ def self.show_logo
57
+ puts
58
+ puts "GoogleNews CLI v#{GoogleNews::VERSION} - Get Google News headlines from Ruby or the command line."
59
+ puts ""
60
+ puts "Powered by the 'google_news' Ruby gem"
61
+ puts ""
62
+ end
63
+
64
+ end
65
+ end
@@ -1,3 +1,3 @@
1
1
  module GoogleNews
2
- VERSION = '0.0.1'.freeze
2
+ VERSION = '0.1.0'.freeze
3
3
  end
data/lib/google_news.rb CHANGED
@@ -5,12 +5,15 @@
5
5
  require 'open-uri'
6
6
  require 'rss'
7
7
  require 'uri'
8
+ require 'nokogiri'
9
+
10
+ require_relative 'google_news/version'
8
11
 
9
12
  module GoogleNews
10
13
  HEADLINES_RSS = 'https://news.google.com/news/rss'.freeze
11
- TOPICS_RSS = 'https://news.google.com/news/rss/headlines/section/topic/'.freeze
12
- GEO_RSS = 'https://news.google.com/news/rss/headlines/section/geo/'.freeze
13
- SEARCH_RSS = 'https://news.google.com/rss/search?q='.freeze
14
+ TOPICS_RSS = 'https://news.google.com/news/rss/headlines/section/topic/'.freeze
15
+ GEO_RSS = 'https://news.google.com/news/rss/headlines/section/geo/'.freeze
16
+ SEARCH_RSS = 'https://news.google.com/rss/search?q='.freeze
14
17
 
15
18
  TOPICS = %w[WORLD NATION BUSINESS TECHNOLOGY ENTERTAINMENT SPORTS SCIENCE HEALTH].freeze
16
19
 
@@ -48,7 +51,7 @@ module GoogleNews
48
51
  #
49
52
  # Get top headlines for a specific geographic location from Google News
50
53
  #
51
- # @param [String] position e.g. "48.8566,2.3522" for Paris
54
+ # @param [String] position name e.g. "Berlin" for Berlin
52
55
  # @param [String] country
53
56
  # @param [String] language
54
57
  # @param [Integer] n
@@ -199,17 +202,18 @@ module GoogleNews
199
202
  # Convert an RSS item to a hash
200
203
  #
201
204
  # @param [RSS::Rss::Channel::Item] item
202
- # @return [Hash] with keys :title, :link, :pub_date, :description, and :raw_item
205
+ # @return [Hash] with keys :title, :link, :pub_date, :descriptions [:title, :link, :author], and :raw_item
203
206
  #
204
207
  def self.item_to_hash(item)
205
208
  {
206
209
  title: item.title,
207
210
  link: extract_link(item),
208
211
  pub_date: (item.respond_to?(:pubDate) ? item.pubDate : nil),
209
- description: (item.respond_to?(:description) ? item.description : nil),
212
+ descriptions: (item.respond_to?(:description) ? parse_description(item.description) : nil),
210
213
  raw_item: item
211
214
  }
212
215
  end
216
+
213
217
  #
214
218
  # Extract the link from an RSS item
215
219
  #
@@ -223,6 +227,42 @@ module GoogleNews
223
227
  nil
224
228
  end
225
229
 
230
+ #
231
+ # Description can consist of a <a> tag with a link, containing the title, followed by a <font> tag with the authors name.
232
+ #
233
+ # But it can also consist of a bunch of news, inside a <ol> list, containing <li> items with a <a> tag, followed by a <font> tag each.
234
+ #
235
+ # This method creates a array of hashes with :title, :link and :author keys for each news item found in the description.
236
+ #
237
+ # @param [String] description as HTML
238
+ # @return [Array<Hash>] array of news items with :title, :link and :author keys
239
+ #
240
+ def self.parse_description(description)
241
+ return nil if description.nil?
242
+ doc = Nokogiri::HTML(description)
243
+ news_items = []
244
+ if doc.at_css('ol')
245
+ doc.css('ol li').each do |li|
246
+ a_tag = li.at_css('a')
247
+ font_tag = li.at_css('font')
248
+ news_items << {
249
+ title: a_tag ? a_tag.text : nil,
250
+ link: a_tag ? a_tag['href'] : nil,
251
+ author: font_tag ? font_tag.text : nil
252
+ }
253
+ end
254
+ else
255
+ a_tag = doc.at_css('a')
256
+ font_tag = doc.at_css('font')
257
+ news_items << {
258
+ title: a_tag ? a_tag.text : nil,
259
+ link: a_tag ? a_tag['href'] : nil,
260
+ author: font_tag ? font_tag.text : nil
261
+ }
262
+ end
263
+ news_items
264
+ end
265
+
226
266
  #
227
267
  # Default User-Agent string for HTTP requests
228
268
  #
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google_news
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthäus J. N. Beyrle
@@ -43,56 +43,98 @@ dependencies:
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: '2.0'
46
+ version: 2.7.1
47
47
  type: :development
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: '2.0'
53
+ version: 2.7.1
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: rake
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ">="
58
+ - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '10.0'
60
+ version: '12.0'
61
61
  type: :development
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ">="
65
+ - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '10.0'
67
+ version: '12.0'
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: rspec
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ">="
72
+ - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '3.0'
75
75
  type: :development
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - ">="
79
+ - - "~>"
80
80
  - !ruby/object:Gem::Version
81
81
  version: '3.0'
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: pry
84
84
  requirement: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - ">="
86
+ - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: 0.10.0
88
+ version: 0.15.2
89
89
  type: :development
90
90
  prerelease: false
91
91
  version_requirements: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - ">="
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: 0.15.2
96
+ - !ruby/object:Gem::Dependency
97
+ name: fiddle
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: 1.1.8
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 1.1.8
110
+ - !ruby/object:Gem::Dependency
111
+ name: ostruct
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
94
115
  - !ruby/object:Gem::Version
95
- version: 0.10.0
116
+ version: 0.6.3
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 0.6.3
124
+ - !ruby/object:Gem::Dependency
125
+ name: nokogiri
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.18'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '1.18'
96
138
  email:
97
139
  - google_news.gemspec@mail.magynhard.de
98
140
  executables:
@@ -103,6 +145,9 @@ files:
103
145
  - ".gitattributes"
104
146
  - ".gitignore"
105
147
  - ".rspec"
148
+ - ".ruby-version"
149
+ - ".travis.yml"
150
+ - CHANGELOG.md
106
151
  - CODE_OF_CONDUCT.md
107
152
  - Gemfile
108
153
  - LICENSE
@@ -115,12 +160,16 @@ files:
115
160
  - google_news.gemspec
116
161
  - lib/custom_errors/invalid_key_type_error.rb
117
162
  - lib/google_news.rb
163
+ - lib/google_news/cli.rb
118
164
  - lib/google_news/version.rb
119
165
  homepage: https://github.com/magynhard/google_news
120
166
  licenses:
121
167
  - MIT
122
168
  metadata:
123
169
  allowed_push_host: https://rubygems.org
170
+ homepage_uri: https://github.com/magynhard/google_news
171
+ source_code_uri: https://github.com/magynhard/google_news
172
+ changelog_uri: https://github.com/magynhard/google_news/CHANGELOG.md
124
173
  rdoc_options: []
125
174
  require_paths:
126
175
  - lib
@@ -128,14 +177,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
128
177
  requirements:
129
178
  - - ">="
130
179
  - !ruby/object:Gem::Version
131
- version: '0'
180
+ version: 2.3.0
132
181
  required_rubygems_version: !ruby/object:Gem::Requirement
133
182
  requirements:
134
183
  - - ">="
135
184
  - !ruby/object:Gem::Version
136
185
  version: '0'
137
186
  requirements: []
138
- rubygems_version: 3.7.1
187
+ rubygems_version: 3.7.2
139
188
  specification_version: 4
140
189
  summary: Get Google News headlines from Ruby or the command line.
141
190
  test_files: []