はじめに
Hacker Newsというサイトにときどき目を通しています。
閲覧するときはいつも、Ruby
やRuby on Rails
といった単語で検索しているのですが、いちいち面倒です。
そこでAPIを用いて簡単に取得できるスクリプトをRubyで書きました。
Hacker Newsから特定の単語で検索するスクリプト
下記が実際のスクリプトです。
過去24時間に投稿された、Ruby
という単語を含むニュースを取得しています。
sample.rb
require 'net/http'
require 'json'
require 'uri'
require 'time'
# Hacker News APIのURLを作成
def search_hacker_news(query)
# クエリに前後のダブルクオートを追加して完全一致を狙う
exact_query = "\"#{query}\""
# 実行時点から過去24時間のタイムスタンプを計算
current_time = Time.now
past_24_hours_time = current_time - 24 * 60 * 60
past_24_hours_unix = past_24_hours_time.to_i
# クエリパラメータをエンコード
params = {
query: exact_query,
tags: "story",
numericFilters: "created_at_i>#{past_24_hours_unix}"
}
encoded_query = URI.encode_www_form(params)
uri = URI("https://hn.algolia.com/api/v1/search_by_date?#{encoded_query}")
# HTTPリクエストを送信
response = Net::HTTP.get(uri)
# JSON形式のレスポンスをパース
data = JSON.parse(response)
# 結果を表示
data['hits'].each do |item|
post_time = Time.at(item['created_at_i']).strftime('%Y-%m-%d %H:%M:%S')
puts "Title: #{item['title']}"
puts "URL: #{item['url']}"
puts "Posted at: #{post_time}"
puts "-----------------------------"
end
end
# 検索クエリとして 'Ruby' を指定して検索
search_hacker_news('Ruby')
URLをベタ書きしていたり例外処理がなかったりなど問題は多数ありますが、まずは疎通確認ができればいいやの精神でいったん雑に書き切りました。
このスクリプトを実行してみます。
$ ruby sample.rb
Title: Alpine.js for Ruby on Rails Developers: Simplifying Front End Development
URL: https://alexsinelnikov.blog/alpinejs-for-ruby-on-rails-developers-simplifying-frontend-development
Posted at: 2024-08-15 18:45:29
-----------------------------
Title: Simple Benchmark of Ruby HTTP Clients – Faraday,Http.rb,Httpx,HTTParty,Typhoeus
URL: https://gist.github.com/kalicki/f7bd15efedd1067c351248fd2f49634e
Posted at: 2024-08-15 02:36:22
-----------------------------
Title: An Introduction to HTTP Caching in Ruby on Rails
URL: https://blog.appsignal.com/2024/08/14/an-introduction-to-http-caching-in-ruby-on-rails.html
Posted at: 2024-08-14 22:51:56
-----------------------------
無事に取得することができました!
おわりに
このスクリプトを自動で毎日1回実行して、取得結果をメールなどに送信する仕組みが構築できれば、作ること自体が勉強にもなるし情報収集も効率化できるので一石二鳥ですね。
OpenAIのAPIなどを使い記事の内容を日本語で要約したものを配信しても良さそうです。
そのためにまずはベースURLの定数化や例外処理を追加といったリファクタリングをする必要がありますね。
アイデアが膨らんできたので、コツコツ進めてみようかなと思います。
参考資料